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

标签 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 中进行部署不同,我对此感到有些困惑。

最佳答案

我也遇到了这个问题。问题是我在类路径中依赖于 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 实现。

关于java - JAX-WS 客户端在部署到 tomcat 管理器后失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19118988/

相关文章:

java - 我如何在安装在 "C:\Program Files\Apache Software Foundation\Tomcat 8.0\"中的 Debug模式下启动我的 Tomcat 8

java - ServletContextListener 是否调用每次机器重启时调用的方法

tomcat - 禁用客户端证书提示

java - 如何在 java ee 6 框架中的 JAX-WS Web 服务中保存数据?

java - 通过 Java/SOAP 的亚马逊产品广告 API

java - codenameone 中 canvas.drawColor 的替代函数是什么

java - 尝试使用转换时出错,java

java - GUI 程序,选项卡面板的问题

tomcat - 如何在tomcat服务器中部署应用程序

java - Wildfly 的 JAXWS 实现似乎忽略了 bindingProvider 属性 com.sun.xml.ws.transport.https.client.SSLSocketFactory