RSS

Exception using XMLConfiguration

I tried using the Apache XMLConfiguration to save the settings of an application I am developing to XML format. When I used it with Java 1.5 it all worked perfectly; however if I tried using it with Java 1.6 I was getting the following exception.


Exception in thread "main" java.lang.AbstractMethodError: org.apache.xerces.dom.DocumentImpl.getXmlStandalone()Z
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.setDocumentInfo(Unknown Source)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(Unknown Source)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(Unknown Source)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(Unknown Source)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(Unknown Source)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(Unknown Source)
at org.apache.commons.configuration.XMLConfiguration.save(XMLConfiguration.java:880)
at org.apache.commons.configuration.AbstractHierarchicalFileConfiguration$FileConfigurationDelegate.save(AbstractHierarchicalFileConfiguration.java:454)
at org.apache.commons.configuration.AbstractFileConfiguration.save(AbstractFileConfiguration.java:546)
at org.apache.commons.configuration.AbstractFileConfiguration.save(AbstractFileConfiguration.java:513)
at org.apache.commons.configuration.AbstractFileConfiguration.save(AbstractFileConfiguration.java:491)
at org.apache.commons.configuration.AbstractFileConfiguration.save(AbstractFileConfiguration.java:403)
at org.apache.commons.configuration.AbstractHierarchicalFileConfiguration.save(AbstractHierarchicalFileConfiguration.java:199)

After doing some search on google I found that this can be a problem with the xerces XML library (xercesImpl.jar). Checking the 3rd party libraries I am using in my project, I found a library that was using and distributing an earlier version of xercesImpl.jar.

I downloaded the latest version (2.91) of xercesImpl.jar from the Apache xerces project (http://xerces.apache.org/mirrors.cgi#binary) and replaced in the 3rd party library I was using the xercesImpl.jar file with the one I downloaded. Now everything seems to work fine, even in Java 1.6.  :-)


Spring Cleaning part 2

This is another script I found while cleaning up my hdd. Now, we all know that java .class files can be decompiled to (a version) of their source code. The first java decompiler out there is jad. I tried to decompile some of my class files using jad.exe, but I couldn’t find a way of decompiling multiple .class files at the same time. So instead of digging into the documentation, I decided to quickly create a script that allows me to decompile a number of .class files at the same time.

Here’s how it works! I created a VBScript that goes through a directory (and subdirectories) of .class files and creates a dos batch file. The dos batch file can now be used to run and actually decompile all the .class files!

The VBscript can be found under this link: Decompile_vbs.

You need to edit it and change the paths to the .class and source directories.

When you execute this file, it will create a dos batch file like this one: Example_decompile.batPlease note this batch file will be generated under the directory where jad.exe exists! You can now run this batch file, which will actually decompile the .class files.


Hard disk spring cleaning

It is time for spring cleaning my hard disk at home. I am sorting/deleting files that I no longer use. I will post here files that I do not need now, but might need in the future.

So… I found a small linux shell script  that individually compiles every java file in a directory and all its subdirectories. The code is:

#!/bin/bash

for d in `ls`
do
javac $d/*.java > $d/compile.txt

done

The text file can be found here:  batchcompile


Log4j result in JTextPane

I recently wanted to redirect the output of Log4j to a JTextPane, so as to output messages to the JTextPane using a different color depending on the severity.

I spent some time searching for information and I quickly put together a small example. The following screenshot shows the output.

screenshot.jpg

The source code is available here.


SiTra and Eclipse 3.3 or Java 1.6

I recently installed eclipse 3.3 and Java 1.6. Today I tried to use SiTra (Simple Transformations in Java) but when I tried to compile it Java started complaining on the following methods of the SimpleTransformerImpl.java:

public Object transform(Object object) {
return transform(Rule.class, object);
}
public List<? extends Object> transformAll(List<? extends Object> sourceObjects) {
return transformAll(Rule.class, sourceObjects);
}

The error was something about java inconvertible types. I don’t know if it is the new version of eclipse or Java 1.6. Looks like for some reason the compiler doesn’t recognise that Rule.class is of type Class<? extends Rule<S, T>>, so as to call the public <S, T> T transform(Class<? extends Rule<S, T>> ruleType, S source)

A simple solution is to ct the Rule.class expression to Class (it sounds weird but it worked).

So the transform and transformAll methods become:


public Object transform(Object object) {
Class r = Rule.class;
return transform(r, object);
}
public List<? extends Object> transformAll(List<? extends Object> sourceObjects){
Class r = Rule.class;
return transformAll(r, sourceObjects);
}


.NET 3.0 Sample Application

DinnerNow http://www.dinnernow.net is a .NET 3.0 sample application. I heard about it on ArcCast (http://channel9.msdn.com/shows/ARCast_with_Ron_Jacobs).

DinnerNow is an interesting application taking advantage of most of .NET 3.0 Windows Foundations (i.e. WCF, WPF, etc) and the source code is available for download. I want to download the source code and play with it over the weekend and familiarise with those kinds of technologies.


Microsoft Access parametric queries on Forms.

For the past two days I have been working with MS Access to create an application. One of the features I wanted to create, was a parametric query that would take the value from a combobox on a form and create a report.

To be more precise I had a form with a combobox populate with IDs and names and when the user selected a specific item from the combo and clicked on a button I wanted to have a report that showed some information of related to the selected ID.

One way to do it is to create some vb code and create a select query with a “where” clause. But, that is not too flexible, caz if I want to change the query, I have to change the code.

Today I came across a more flexible solution. Parametric queries. I knew how to use parametric queries, but not in conjunction with forms. So if you want to create a parametric query related to a form, all you have to do in the query is define the parameter at the beginning like:

PARAMETERS [Forms]![formName]![ControlName] ParameterType;

In the where clause you also have to use the same notation. So for example:

where Id = [Forms]![formName]![ControlName]

and that’s it!


Microsoft Access crashes when trying to create MDE file

I was trying to convert an MS Access database I had developed to MDE. It was crashing every time I was trying to create the MDE file.

After some search on the internet I run across a Microsoft article that solved the problem for me.

The link is: http://support.microsoft.com/Default.aspx?scid=kb;en-us;814858&spid=2509&sid=98

What it says is:

WORKAROUND
To work around this problem, you can reload the VBA project of the Access database from text and then create the MDE file or the ADE file. To do this, follow these steps:

Note Make a backup copy of the database before you start these steps.
1. On the taskbar, click start and then click Run.
2. Type msaccess.exe /decompile and then click OK.

3. Open the original .mdb file or the original .adp file that you want to save as the new MDE file or the new ADE file.
a. Press ALT+F11 to open the Visual Basic Editor.
b. On the Debug menu, click Compile <databasename>.

c. On the File menu click Save <databasename>, and then close the Visual Basic Editor.
4. On the Tools menu, click Database Utilities and then click Make MDE File or click Make ADE File.
5. In the Save MDE As dialog box or the Save ADE As dialog box, locate the folder where you want to save the MDE file or the ADE file, type the file name in the File name box, and then click Save.<databasename>

I tried it and it and it works like a charm! Apparently I had deleted some forms and there was some VBA code related to those forms that was still there. With the decompile option not only did I manage to create an MDE file, but I also reduced the size of the db by almost 1MB(!!) after I compacted it.

From now on I am going to use the /decompile option every time before I deploy a new version of access.