CXF Bundle is missing an Import-Package for woodstox
----------------------------------------------------

                 Key: CXF-1642
                 URL: https://issues.apache.org/jira/browse/CXF-1642
             Project: CXF
          Issue Type: Bug
    Affects Versions: 2.0.6, 2.1
         Environment: Running CXF with cxf-bundle
            Reporter: Guillaume Sauthier


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 ...


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to