部署到tomcat管理器后,JAX-WS客户端失败

时间:2013-10-01 14:34:15

标签: java tomcat jax-ws

我有一个应用程序充当JAX-WS服务器的客户端。如果我通过将war放入tomcat webapps目录直接部署应用程序(即使进行热部署),连接也能正常工作。但是,如果我取消部署,然后使用tomcat管理器重新部署应用程序(从自动脚本),我会在尝试建立连接时随时抛出以下异常。

Caused by: java.lang.NullPointerException
        at com.ctc.wstx.util.SymbolTable.copyArrays(SymbolTable.java:574)
        at com.ctc.wstx.util.SymbolTable.findSymbol(SymbolTable.java:403)
        at com.ctc.wstx.sr.StreamScanner.parseLocalName(StreamScanner.java:1770)
        at com.ctc.wstx.sr.BasicStreamReader.handleStartElem(BasicStreamReader.java:2914)
        at com.ctc.wstx.sr.BasicStreamReader.handleRootElem(BasicStreamReader.java:2093)
        at com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java:2073)
        at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1069)
        at com.sun.xml.internal.ws.util.xml.XMLStreamReaderFilter.next(Unknown Source)
        at com.sun.xml.internal.ws.streaming.XMLStreamReaderUtil.next(Unknown Source)
        at com.sun.xml.internal.ws.streaming.XMLStreamReaderUtil.nextContent(Unknown Source)
        at com.sun.xml.internal.ws.streaming.XMLStreamReaderUtil.nextElementContent(Unknown Source)
        at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.hasWSDLDefinitions(Unknown Source)
        at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.parse(Unknown Source)
        at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.parse(Unknown Source)
        at com.sun.xml.internal.ws.client.WSServiceDelegate.parseWSDL(Unknown Source)
        at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(Unknown Source)
        at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(Unknown Source)
        at com.sun.xml.internal.ws.spi.ProviderImpl.createServiceDelegate(Unknown Source)
        [... continues into application specific code calling the service ...]

This post出现在搜索中遇到类似问题的人,但除了使用spring-ws之外没有解决方案,这对我来说当然不是一个选择。

之前是否有人遇到此问题并且能够解决问题?我对这里通过tomcat管理器进行部署而不是通过将文件放在webapps中进行部署感到有点困惑。

2 个答案:

答案 0 :(得分:0)

我也遇到过这个问题。问题是我在我的类路径中依赖于cxf-rt-frontend-jaxws-2.5.2.jar,它包含org.apache.cxf.jaxws.spi.ProviderImpl的实现,它与rt中的同一个类冲突JDK附带的.jar。

cxf-rt-frontend-jaxws的更高版本不再包含此类。升级到cxf-rt-frontend-jaxws-2.6.15.jar后,问题得到了解决。

我希望问题间歇性地发生,因为类加载器会随机选择每次部署WAR时使用哪个ProviderImpl实现。

答案 1 :(得分:-1)

就我而言,问题出现在SymbolTable类上,该类同时出现在com.sun.org.apache.xerces.internal.util.SymbolTable(来自rt.jar)和com.ctc.wstx.util.SymbolTable(来自wstx-asl-3.2.7.jar)。从我的类路径中删除wstx-asl lib后,我们通过tomcat管理器进行了重新部署,没有错误。