views:

74

answers:

1

Hi all !

I need your help to resolve a conflict between Tapestry and JaxB. The error is :

com.sun.xml.stream.ZephyrParserFactory cannot be cast to org.codehaus.stax2.XMLInputFactory2

I find a way to resolve it, but it is for jetty : http://tynamo.org/tapestry-resteasy+guide

The solution seems to be to add a system properties to declare :

javax.xml.stream.XMLInputFactory = com.ctc.wstx.stax.WstxInputFactory

But i don't know how to do this for Tomcat. I try to do it int he web.xml like :

<env-entry>
     <env-entry-name>
      javax.xml.stream.XMLInputFactory
     </env-entry-name>
     <env-entry-value>
      com.ctc.wstx.stax.WstxInputFactory
     </env-entry-value>
     <env-entry-type>
      com.ctc.wstx.stax.WstxInputFactory
     </env-entry-type>
    </env-entry>

without success...

I am also aware for another solution :)

thx for helping me.

+1  A: 

The <env-entry> properties are accessible via JNDI, and not as system properties, so that won't work. System properties must be specified on the command line when starting the Java VM.

How do you start your tomcat? If it is from the command line, try adding this snippet to JAVA_OPTS:

java -Djavax.xml.stream.XMLInputFactory=com.ctc.wstx.stax.WstxInputFactory [...]

You should be able to do that either as an environment variable (Unix: export JAVA_OPTS='-Djavax.xml.stream.XMLInputFactory=com.ctc.wstx.stax.WstxInputFactory', Windows: SET JAVA_OPTS='-Djavax.xml.stream.XMLInputFactory=com.ctc.wstx.stax.WstxInputFactory') or in the Tomcat startup script itself (catalina.sh/catalina.bat).

If you start Tomcat from Eclipse, you can add the parameter via Debug Configurations | JRE | VM Arguments. Just paste -Djavax.xml.stream.XMLInputFactory=com.ctc.wstx.stax.WstxInputFactory and you're good.

Edit based on comment: AFAIK, you cannot specify system properties in web.xml, sorry.

An idea: You can set system properties programmatically. Maybe you could add a call to System.setProperty() in your Tapestry application module. It will have to be executed before JAXB initializes.

Henning
Do you think there is another way to resolve the conflict ?
alex
Just thinking about this solution, and it works !Thx a lot :)
alex