0

I need to include the following jar in my Apache CXF Spring Web service app. I use maven. I included the following dependency:

    <dependency>
        <groupId>manual</groupId>
        <artifactId>xmlparserv2</artifactId>
        <version>11.1.1.6.0</version>
    </dependency>

That's a JAR that is part of Oracle common module. I installed it on my local Maven repository. When I run my service with this JAR included, I get the following error:

org.xml.sax.SAXParseException; lineNumber: 25; columnNumber: 113; <Line 25, Column 113>: XML-24500: (Error) Can not build schema 'http://www.springframework.org/schema/context' located at 'http://www.springframework.org/schema/context/spring-context.xsd'
    oracle.xml.parser.v2.XMLError.flushErrorHandler(XMLError.java:425)
    oracle.xml.parser.v2.XMLError.flushErrors1(XMLError.java:287)
    oracle.xml.parser.v2.NonValidatingParser.parseDocument(NonValidatingParser.java:376)
    oracle.xml.parser.v2.XMLParser.parse(XMLParser.java:226)
    oracle.xml.jaxp.JXDocumentBuilder.parse(JXDocumentBuilder.java:155)
    org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:75)
    org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:388)
    org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
    org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
    org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)
    org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)
    org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
    org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125)
    org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)
    org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130)
    org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:537)
    org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:451)
    org.apache.cxf.transport.servlet.CXFServlet.createSpringContext(CXFServlet.java:160)
    org.apache.cxf.transport.servlet.CXFServlet.loadBus(CXFServlet.java:74)
    org.apache.cxf.transport.servlet.CXFNonSpringServlet.init(CXFNonSpringServlet.java:71)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539)
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    java.lang.Thread.run(Thread.java:722)

oracle.xml.parser.schema.XSDException: Duplicated definition for: 'identifiedType'
    oracle.xml.parser.schema.XSDBuilder.buildSchema(XSDBuilder.java:794)
    oracle.xml.parser.schema.XSDBuilder.build(XSDBuilder.java:489)
    oracle.xml.parser.schema.XSDValidator.processSchemaLocation(XSDValidator.java:999)
    oracle.xml.parser.schema.XSDValidator.startElement(XSDValidator.java:604)
    oracle.xml.parser.v2.NonValidatingParser.parseElement(NonValidatingParser.java:1524)
    oracle.xml.parser.v2.NonValidatingParser.parseRootElement(NonValidatingParser.java:409)
    oracle.xml.parser.v2.NonValidatingParser.parseDocument(NonValidatingParser.java:355)
    oracle.xml.parser.v2.XMLParser.parse(XMLParser.java:226)
    oracle.xml.jaxp.JXDocumentBuilder.parse(JXDocumentBuilder.java:155)
    org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:75)
    org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:388)
    org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
    org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
    org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)
    org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)
    org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
    org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125)
    org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)
    org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130)
    org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:537)
    org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:451)
    org.apache.cxf.transport.servlet.CXFServlet.createSpringContext(CXFServlet.java:160)
    org.apache.cxf.transport.servlet.CXFServlet.loadBus(CXFServlet.java:74)
    org.apache.cxf.transport.servlet.CXFNonSpringServlet.init(CXFNonSpringServlet.java:71)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539)
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    java.lang.Thread.run(Thread.java:722)

It is my understanding that this is a problem regarding XML parsers conflicts. I have read that this can be solved by adding this argument to the JVM:

-Djavax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl

And in fact, this solves the issue. Howhever, this is not desirable for me, because it forces me to add arguments to the JVM, and that can cause conflicts with other resources deployed on the Application Server (e.g. Tomcat). I need to know if there is a way to solve this error without adding parameters to the JVM. For example, by adding something to the Spring configuration file, or something like that.

Alfredo A.
  • 1,697
  • 3
  • 30
  • 43

1 Answers1

1

Ok, I figure it out. I had to include these dependencies.

    <dependency>
        <groupId>xerces</groupId>
        <artifactId>xercesImpl</artifactId>
        <version>2.11.0</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>xalan</groupId>
        <artifactId>xalan</artifactId>
        <version>2.7.1</version>
        <scope>runtime</scope>
    </dependency>

I had to force them to be included at runtime. This forces the framework to use xercesImpl instead of xmlparserv2 at runtime. I had to include xalan so the generated WSDL could include the custom types, otherwise, the service worked, but the generated WSDL had an empty section with no types defined.

Alfredo A.
  • 1,697
  • 3
  • 30
  • 43