【发布时间】:2012-12-13 22:33:14
【问题描述】:
我的问题是 CXF 和 wsdl4j_1.6.2.jar 与某些东西发生碰撞,大概是 axis-wsdl4j.jar。
我已阅读:What's wrong with my Apache CXF client?
我的项目中没有包含战争中的axis-wsdl4j.jar。我还要求我们的管理员将 Websphere 切换到 Parent Last。我还是明白了:
[12/13/12 16:01:28:378 CST] 0000001b ServletWrappe E SRVE0068E: 的服务方法之一中抛出未捕获的异常 小服务程序:CXFServlet。抛出异常:java.lang.RuntimeException: org.apache.cxf.interceptor.Fault: javax/wsdl/xml/WSDLReader.readWSDL(Ljavax/wsdl/xml/WSDLLocator;Lorg/w3c/dom/Element;) Ljavax/wsdl/定义; 在 org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:116) 在 org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:322) 在 org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:122) 在 org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:211) 在 org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:213) 在 org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:154) 在 org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:129) 在 org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:187) 在 org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:110) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:763) 在 org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:166) 在 com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1143) 在 com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:591) 在 com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:481) 在 com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3453) 在 com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:267) 在 com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:815) 在 com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1466) 在 com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:119) 在 com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:458) 在 com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:387) 在 com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:267) 在 com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214) 在 com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113) 在 com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165) 在 com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217) 在 com.ibm.io.async.AsyncChannelFuture$1.run(AsyncChannelFuture.java:205) 在 com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1473) 引起:org.apache.cxf.interceptor.Fault: javax/wsdl/xml/WSDLReader.readWSDL(Ljavax/wsdl/xml/WSDLLocator;Lorg/w3c/dom/Element;)Ljavax/wsdl/Definition; 在 org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:162) 在 org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:128) 在 org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:167) 在 org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:94) 在 org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58) 在 org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:94) 在 org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:262) ... 26 更多原因:java.lang.NoSuchMethodError: javax/wsdl/xml/WSDLReader.readWSDL(Ljavax/wsdl/xml/WSDLLocator;Lorg/w3c/dom/Element;)Ljavax/wsdl/Definition; 在 org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:242) 在 org.apache.cxf.wsdl11.WSDLManagerImpl.getDefinition(WSDLManagerImpl.java:191) 在 org.apache.cxf.wsdl11.WSDLServiceFactory.(WSDLServiceFactory.java:92) 在 org.apache.cxf.jaxws.ServiceImpl.initializePorts(ServiceImpl.java:203) 在 org.apache.cxf.jaxws.ServiceImpl.(ServiceImpl.java:147) 在 org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:97) 在 javax.xml.ws.Service.(Service.java:35) ...
项目由 Maven 构建,仅通过 Continuum 部署到 Websphere;并且所有设置都通过请求更改。应用程序在本地 Tomcat 上完美运行。
编辑: 最终通过以下方式解决了这个问题:
- 将 wsdl4j.jar 复制到 /usr/WebSphere/AppServer/appLibs/APPNAME 目录。
- 以前的 Chmod 775。
- 在 websphere 管理控制台中,环境(左侧),共享库,并在上面定义一个名称为 APPNAME 的容器范围的共享库。
- 将 jar 添加到共享库的类路径中。
- 服务器(左侧)、APPNAME java、进程管理、类加载器,并确保“首先使用应用程序类加载器加载类”
- 单击类加载器并将共享库分配给它。
- 重启服务器
【问题讨论】:
标签: websphere cxf nosuchmethoderror