The Processing Instruction Target Matching “[xX][mM][lL]” is Not Allowed

Friday, June 24th, 2011


When parsing XML you receive the following error:

...The Processing Instruction Target Matching "[xX][mM][lL]" is Not Allowed...


The chances are you have some sort of whitespace (or control character) infront of your XML declaration:

..<?xml version="1.0" encoding="utf-8"?>

It may even be that you have more than one XML declaration in the document..!

Posted in quick tips | No Comments »

Read a File as String with Java

Thursday, June 16th, 2011


I’m always Googling for a way to do this. This seems to be the best “idiomatic” solution I’ve found. So without further ado…


public String readFile(String path) throws IOException {
    FileInputStream stream = new FileInputStream(new File(path));
        FileChannel fc = stream.getChannel();
        MappedByteBuffer bb =, 0, fc.size());
        return Charset.defaultCharset().decode(bb).toString();
    finally {

Posted in Development, How to's, quick tips | No Comments »

View Source of Oracle Trigger

Wednesday, May 11th, 2011

select trigger_body from user_triggers where trigger_name = 'XXXXX'

Tags: ,
Posted in quick tips | No Comments »

Unit Test Private Java Methods using Reflection

Thursday, May 5th, 2011


I realise that the thought of Unit Testing private methods in Java classes can be like a red rag to a bull for some people and I understand the arguments.

Therefore, I present the following as a “how to”, not a moral argument for or against!


The class under test

public class Product() {
    private String privateMethod(String id) {
    //Do something private
    return "product_" + id;

The (Reflection Based) Unit Test

import java.lang.reflect.Method;

import static org.junit.Assert.*;
import org.junit.Test;

public class ProductTest {
    private Product product; // the class under test
    private Method m;
    private static String METHOD_NAME = "privateMethod";
    private Class[] parameterTypes;
    private Object[] parameters;

    public void setUp() throws Exception {
        product = new Product();
        parameterTypes = new Class[1];
        parameterTypes[0] = java.lang.String.class;
        m = product.getClass().getDeclaredMethod(METHOD_NAME, parameterTypes);
        parameters = new Object[1];

    public void testPrivateMethod() throws Exception {
        parameters[0] = "someIdentifier";
        String result = (String) m.invoke(product, parameters); 
        //Do your assertions


I’ve since been told that if dp4j.jar is in the classpath at compile-time, it will inject the necessary reflection to make this work. I haven’t had time to try this yet so YMMV.

Tags: , ,
Posted in Development, How to's | No Comments »

Using Oracle’s SYS_GUID()

Friday, April 29th, 2011


For years I’ve bemoaned Oracle’s lack of an auto-number/identity type column (think MySQL AUTO_INCREMENT). Obviously you can create sequences and triggers to produce the same effect but it always seemed like a bit of a palaver to me.

So, I had a smile on my when I discovered the delight that is SYS_GUID().

Taken from the Oracle documentation:

SYS_GUID generates and returns a globally unique identifier (RAW value) made up of 16 bytes. On most platforms, the generated identifier consists of a host identifier, a process or thread identifier of the process or thread invoking the function, and a nonrepeating value (sequence of bytes) for that process or thread.


select SYS_GUID() from dual

= ================================
1 A20D42BA1F165DB5E04400144FB99F0A

SYS_GUID() as a default

Because SYS_GUID() “returns a globally unique identifier” we can use it as a default value in a Primary Key column of a table.

create table products( 
    product_id raw(32) default sys_guid() not null primary key

Tags: ,
Posted in Development | No Comments »