users@jaxb.java.net

How to upgrade JAXB impl provided?

From: <ebenzacar_at_gmail.com>
Date: Wed, 4 Apr 2012 15:57:26 +0000 (GMT)

Hi,

I'm running a webapp in JBoss 7.0.2 and I am running into an
ArrayIndexOutOfBounds exception with JAXB marshaller. I'm using
JDK_1.6.0_29. From a web search, this is a bug that was fixed in a
subsequent version of JAXB.

So I downloaded jaxb-impl.jar 2.2.5 via Maven and included it within my
war. However it has not made any difference. When I startup my app, I
have included the following class to log the implementation being used:

/**
 * Print the JAXB Implementation information
 */
public static void outputJaxpImplementationInfo() {
    logger.debug(getImplementationInfo("DocumentBuilderFactory",
DocumentBuilderFactory.newInstance().getClass()));
    logger.debug(getImplementationInfo("XPathFactory",
XPathFactory.newInstance().getClass()));
    logger.debug(getImplementationInfo("TransformerFactory",
TransformerFactory.newInstance().getClass()));
    logger.debug(getImplementationInfo("SAXParserFactory",
SAXParserFactory.newInstance().getClass()));
}

/**
 * Get the JAXB implementation information for a particular class
 * @param componentName
 * @param componentClass
 * @return
 */
private static String getImplementationInfo(String componentName, Class
componentClass) {
    CodeSource source =
componentClass.getProtectionDomain().getCodeSource();
    return MessageFormat.format(
            "{0} implementation: {1} loaded from: {2}",
            componentName,
            componentClass.getName(),
            source == null ? "Java Runtime" : source.getLocation());
}

This produces the following output:
10:28:27,402 INFO [stdout] (MSC service thread 1-14) 2012-04-04
10:28:27,402 DEBUG cws.cs.lendingsimulationservice.util.JAXBUtil -
DocumentBuilderFactory implementation:
__redirected.__DocumentBuilderFactory loaded from:
file:/C:/servers/jboss-as-7.0.2.Final/jboss-modules.jar
10:28:27,403 INFO [stdout] (MSC service thread 1-14) 2012-04-04
10:28:27,403 DEBUG cws.cs.lendingsimulationservice.util.JAXBUtil -
XPathFactory implementation: __redirected.__XPathFactory loaded from:
file:/C:/servers/jboss-as-7.0.2.Final/jboss-modules.jar
10:28:27,404 INFO [stdout] (MSC service thread 1-14) 2012-04-04
10:28:27,404 DEBUG cws.cs.lendingsimulationservice.util.JAXBUtil -
TransformerFactory implementation: __redirected.__TransformerFactory
loaded from: file:/C:/servers/jboss-as-7.0.2.Final/jboss-modules.jar
10:28:27,406 INFO [stdout] (MSC service thread 1-14) 2012-04-04
10:28:27,406 DEBUG cws.cs.lendingsimulationservice.util.JAXBUtil -
SAXParserFactory implementation: __redirected.__SAXParserFactory loaded
from: file:/C:/servers/jboss-as-7.0.2.Final/jboss-modules.jar


I've tried the following but see no changes either:
1) just dropping the jar in my war,
2) putting both the api and impl jars in JAVA_HOME/jre/lib/endorsed,
3) setting
-Djavax.xml.bind.context.factory=com.sun.xml.bind.v2.ContextFactory

No matter what I try, I always seem to be using the v2.1 that is
bundled with the JRE.


So two questions arise:
1) How do I properly bundle the new version of JAXB in my app
2) How can I confirm that I am running the new version? Is the above
code snippet valid, or is there a bug in there as well?

Thanks for any help/advice!

Eric