I've hit trouble moving my JAXB-unmarshalled web service (based on Spring Web Services 1.0.0) from Tomcat 5.5.23 to Geronimo 2.0.1; stack trace below. I used JDK6 on Linux for both TC and Geronimo.
I stripped the .war down to use dummy empty implementations of everything, with no extra jar's, so that only the unmarshalling was causing a problem. (I generate my JAXB classes with JDK wsimport on the command line and include them in WEB-INF/classes, so unlike for Axis2 and CXF they don't include Geronimo machinery-maybe this is a problem.) I think the problem is because of Geronimo's Axis 2 SAAJ implementation, and it can't be overridden even when classloader priority is configured to be to the servlet context. Also, I've tried setting JAVA_OPTS in the geronimo.sh startup script to include -Djavax.xml.soap.MessageFactory=com.sun.xml.messaging.saaj.soap.ver1_1.S OAPMessageFactory1_1Impl etc but it had no effect. My fix was to replace the impl and api jars in the Geronimo repository with empty files, so that the deployer's dependency checker was fooled and rmi and the server started without complaining. Now my web service works. But I have a bad feeling about what I've just done to Geronimo - probably it will prevent me using CXF in the same server. Anyone got a better workaround, or a fix for Geronimo? 16:33:04,183 WARN [SoapMessageDispatcher] Endpoint invocation resulted in exception - responding with SOAP Fault java.lang.ClassCastException: org.apache.axiom.soap.impl.dom.SOAPMessageImpl cannot be cast to org.apache.axiom.om.impl.dom.ElementImpl at org.apache.axis2.saaj.NodeImplEx.toSAAJNode2(NodeI mplEx.java:260) at org.apache.axis2.saaj.NodeImplEx.toSAAJNode(NodeIm plEx.java:181) at org.apache.axis2.saaj.SOAPElementImpl.getParentEle ment(SOAPElementImpl.java:723) at org.apache.axis2.saaj.SOAPElementImpl.getParentNod e(SOAPElementImpl.java:778) at com.sun.xml.bind.unmarshaller.DOMScanner.buildName spaceSupport(DOMScanner.java:159) at com.sun.xml.bind.unmarshaller.DOMScanner.buildName spaceSupport(DOMScanner.java:159) at com.sun.xml.bind.unmarshaller.DOMScanner.scan(DOMS canner.java:100) at com.sun.xml.bind.v2.runtime.unmarshaller.Unmarshal lerImpl.unmarshal0(UnmarshallerImpl.java:288) at com.sun.xml.bind.v2.runtime.unmarshaller.Unmarshal lerImpl.unmarshal(UnmarshallerImpl.java:271) at javax.xml.bind.helpers.AbstractUnmarshallerImpl.un marshal(AbstractUnmarshallerImpl.java:107) at org.springframework.oxm.jaxb.Jaxb2Marshaller.unmar shal(Jaxb2Marshaller.java:312) at org.springframework.ws.support.MarshallingUtils.un marshal(MarshallingUtils.java:54) at org.springframework.ws.server.endpoint.adapter.Mar shallingMethodEndpointAdapter.unmarshalRequest(Mar shallingMethodEndpointAdapter.java:145) at org.springframework.ws.server.endpoint.adapter.Mar shallingMethodEndpointAdapter.invokeInternal(Marsh allingMethodEndpointAdapter.java:135) at org.springframework.ws.server.endpoint.adapter.Abs tractMethodEndpointAdapter.invoke(AbstractMethodEn dpointAdapter.java:58) at org.springframework.ws.server.MessageDispatcher.di spatch(MessageDispatcher.java:211) at org.springframework.ws.server.MessageDispatcher.re ceive(MessageDispatcher.java:158) at org.springframework.ws.transport.support.WebServic eMessageReceiverObjectSupport.handleConnection(Web ServiceMessageReceiverObjectSupport.java:87) at org.springframework.ws.transport.http.WebServiceMe ssageReceiverHandlerAdapter.handle(WebServiceMessa geReceiverHandlerAdapter.java:57) at org.springframework.ws.transport.http.MessageDispa tcherServlet.doService(MessageDispatcherServlet.ja va:158) at org.springframework.web.servlet.FrameworkServlet.p rocessRequest(FrameworkServlet.java:475) at org.springframework.web.servlet.FrameworkServlet.d oPost(FrameworkServlet.java:440) at javax.servlet.http.HttpServlet.service(HttpServlet .java:713) at javax.servlet.http.HttpServlet.service(HttpServlet .java:806) at org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invo ke(StandardWrapperValve.java:230) at org.apache.catalina.core.StandardContextValve.invo ke(StandardContextValve.java:175) at org.apache.geronimo.tomcat.valve.DefaultSubjectVal ve.invoke(DefaultSubjectValve.java:56) at org.apache.geronimo.tomcat.GeronimoStandardContext $SystemMethodValve.invoke(GeronimoStandardContext. java:351) at org.apache.geronimo.tomcat.valve.GeronimoBeforeAft erValve.invoke(GeronimoBeforeAfterValve.java:47) at org.apache.catalina.core.StandardHostValve.invoke( StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:104) at org.apache.catalina.core.StandardEngineValve.invok e(StandardEngineValve.java:109) at org.apache.catalina.valves.AccessLogValve.invoke(A ccessLogValve.java:563) at org.apache.catalina.connector.CoyoteAdapter.servic e(CoyoteAdapter.java:261) at org.apache.coyote.http11.Http11Processor.process(H ttp11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11Conn ectionHandler.process(Http11Protocol.java:581) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run( JIoEndpoint.java:447) at java.lang.Thread.run(Thread.java:619)