<dependency> <groupId>jcs</groupId> <artifactId>jcs</artifactId> <version>1.3</version> </dependency>
Unfortunately, when the build ran, exceptions with the following key root causes:
Caused by: javax.xml.parsers.ParserConfigurationException: Unable to validate using XSD: Your JAXP provider [org.apache.xerces.jaxp.DocumentBuilderFactoryImpl@8034b6] does not support XML Schema. Are you running on Java 1.4 with Apache Crimson? Upgrade to Apache Xerces (or Java 1.5) for full XSD support.
Caused by: java.lang.IllegalArgumentException: No attributes are implemented
...began to appear similar to those shown in the example below:
Tests run: 5, Failures: 0, Errors: 4, Skipped: 1, Time elapsed: 0.303 sec <<< FAILURE! testSendFileStringOutputStream(com.configureconnect.cplayer.ImageGeneratorServiceTest) Time elapsed: 0.105 sec <<< ERROR! org.unitils.core.UnitilsException: Unable to create application context for locations [test-beans.xml] at org.unitils.spring.util.ApplicationContextManager.createInstanceForValues(ApplicationContextManager.java:121) at org.unitils.spring.util.ApplicationContextManager.createInstanceForValues(ApplicationContextManager.java:36) at org.unitils.core.util.AnnotatedInstanceManager.getInstanceImpl(AnnotatedInstanceManager.java:234) at org.unitils.core.util.AnnotatedInstanceManager.getInstance(AnnotatedInstanceManager.java:121) at org.unitils.spring.util.ApplicationContextManager.getApplicationContext(ApplicationContextManager.java:65) at org.unitils.spring.SpringModule.getApplicationContext(SpringModule.java:222) at org.unitils.spring.SpringModule$1.isApplicableFor(SpringModule.java:104) at ---- Lots of lines removed for readability.... at org.apache.maven.surefire.Surefire.run(Surefire.java:169) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:592) at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:350) at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1021) Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Parser configuration exception parsing XML from class path resource [test-beans.xml]; nested exception is javax.xml.parsers.ParserConfigurationException: Unable to validate using XSD: Your JAXP provider [org.apache.xerces.jaxp.DocumentBuilderFactoryImpl@8034b6] does not support XML Schema. Are you running on Java 1.4 with Apache Crimson? Upgrade to Apache Xerces (or Java 1.5) for full XSD support. at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:404) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:212) at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:126) at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:92) at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130) at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:467) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:397) at org.unitils.spring.util.ApplicationContextManager.createInstanceForValues(ApplicationContextManager.java:117) ... 32 more Caused by: javax.xml.parsers.ParserConfigurationException: Unable to validate using XSD: Your JAXP provider [org.apache.xerces.jaxp.DocumentBuilderFactoryImpl@8034b6] does not support XML Schema. Are you running on Java 1.4 with Apache Crimson? Upgrade to Apache Xerces (or Java 1.5) for full XSD support. at org.springframework.beans.factory.xml.DefaultDocumentLoader.createDocumentBuilderFactory(DefaultDocumentLoader.java:102) at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:70) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:388) ... 44 more Caused by: java.lang.IllegalArgumentException: No attributes are implemented at org.apache.xerces.jaxp.DocumentBuilderFactoryImpl.setAttribute(DocumentBuilderFactoryImpl.java:98) at org.springframework.beans.factory.xml.DefaultDocumentLoader.createDocumentBuilderFactory(DefaultDocumentLoader.java:99) ... 46 more
From the stack trace, I believe that it was JCS’s dependency on xerces and other XML APIs that have caused the problem.
The classes from these libraries have been added to the Java SE SDK and improved upon, whilst xerces has also continued to grow, change and diverge. Hence, when compiling with Java 5 and greater, the xerces classes conflict with Java SE SDK creating the exception demonstrated above.
Possible Solutions
- Don’t use JCS: this works!
- Try excluding xerces using Maven. I haven’t tried this yet...
- Upgrade to Spring 3.1
The version of Spring used was 3.0.5, but the Guys at Spring have been busy and recently released Spring 3.1, which comes with its own cache. I haven’t looked at this yet, but it’s worth investigating...
1 comment:
I'll have to look into the caching in Speing 3.1 - thanks for the tip!
The other alternative that may work depending on the scenario is to configure a caching module in the web server (eg Apache httpd)
Post a comment