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