Uploaded image for project: 'CXF'
  1. CXF
  2. CXF-1642

CXF Bundle is missing an Import-Package for woodstox

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 2.1, 2.0.6
    • Fix Version/s: 2.1.1, 2.0.7
    • Component/s: None
    • Labels:
      None
    • Environment:

      Running CXF with cxf-bundle

      Description

      When running the cxf-bundle (2.0.6) in an OSGi environment (Felix), the Bus cannot initialize sucesfuly:

      2008-06-10 14:54:27,350 : SpringBusFactory.createBus : Failed to create application context.
      org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [META-INF/cxf/cxf.xml]; nested exception is javax.xml.transform.TransformerException: org.w3c.dom.DOMException: NAMESPACE_ERR: An attempt is made to create or change an object in a way which is incorrect with regard to namespaces.

      After a bit of digging, I've found that Xerces was used instead of Woodstox.

      This is caused by the TunedDocumentLoader:

      try

      { Class<?> cls = Class.forName("com.ctc.wstx.sax.WstxSAXParserFactory"); saxParserFactory = (SAXParserFactory)cls.newInstance(); nsasaxParserFactory = (SAXParserFactory)cls.newInstance(); }

      catch (Exception e)

      { //woodstox not found, use any other Stax parser saxParserFactory = SAXParserFactory.newInstance(); nsasaxParserFactory = SAXParserFactory.newInstance(); }

      Indeed, the cxf-bundle do not import the 'com.ctc.wstx.sax' package, so we fall back in the Exception handling, and CXF uses the default SAXParserFactory, which is provided by Xerces.

      Just to be sure, I've added manually an Import-Package on 'com.ctc.wstx.sax', and provided woodstox as a bundle, and everythings works better !

      I've only tested that on 2.0.6, but I've checked the Import-Package of the cxf-bundle version 2.1 and there is still no import, so I guess the problem is there too.

      What I'm proposing is simply add an optional dependency on Woodstox, so that if it is available, it will be used.

      Import-Package com.ctc.wstx.sax:resolution:=optional, *

      BTW, I'm curious, how about normal users who are not using OSGi ? What happen if they remove the woodstox.jar ? Will they have the same behavior than me ? If so, CXF has a real dependency on woodstox, and it should not try to hide it using Class.forName ...

        Attachments

        1. cxf-stacktrace.txt
          5 kB
          Guillaume Sauthier

          Activity

            People

            • Assignee:
              dkulp Daniel Kulp
              Reporter:
              sauthieg Guillaume Sauthier
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: