HDA

Parsing a HDA file from a Java application

Sometimes you might want to parse a .hda file in a custom Java application, outside of the Oracle UCM.

Here is a sample code:

/*
 * Main.java
 */
package hdatest;
 
import intradoc.data.DataBinder;
import intradoc.data.DataSerializeUtils;
import intradoc.resource.ResourceUtils;
import intradoc.serialize.DataBinderSerializer;
 
public class Main {
 
	public static void main(String[] args) {
		DataBinder dataBinder = null;
		String dir = "/usr/lib/oracle/ucm/data/profiles/document/";
		String file = "dprules.hda";
 
		DataSerializeUtils.setDataSerialize(new DataBinderSerializer());
 
		try {
			dataBinder = ResourceUtils.readDataBinderHeader(dir, file);
		} catch (Exception e) {
			e.printStackTrace();
			return;
		}
 
		String str = dataBinder.getLocal("blDateFormat");
		System.out.println("blDateFormat: " + str);
	}
}

To compile the above source code you'll have to include the file /shared/classes/server.zip in your classpath:

javac -classpath /usr/lib/oracle/ucm/shared/classes/server.zip hdatest/Main.java

The important bit here is the initialization of the serializer. Without it you will get an ugly exception like this one:

intradoc.common.ServiceException: !csResourceUtilsFileIOError!csResourceUtilsFileReadError,dprules.hda
	at intradoc.resource.ResourceUtils.serializeDataBinderWithEncoding(ResourceUtils.java:251)
	at intradoc.resource.ResourceUtils.serializeDataBinderEx(ResourceUtils.java:86)
	at intradoc.resource.ResourceUtils.readDataBinderHeader(ResourceUtils.java:283)
	at hdareadtest.Main.main(Main.java:18)
Caused by: java.lang.NullPointerException
	at intradoc.data.DataSerializeUtils.detectEncoding(DataSerializeUtils.java:157)
	at intradoc.resource.ResourceUtils.serializeDataBinderWithEncoding(ResourceUtils.java:224)
	... 3 more