在Websphere上涉及CXF的类加载问题,父级最后没有帮助

时间:2012-12-13 22:33:15

标签: websphere cxf nosuchmethoderror

我的问题涉及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:   在其中一个服务方法中抛出未捕获的异常   servlet:CXFServlet。抛出异常:java.lang.RuntimeException:   org.apache.cxf.interceptor.Fault:   的javax / WSDL / XML / WSDLReader.readWSDL(Ljavax / WSDL / XML / WSDLLocator; Lorg / W3C / DOM /元素;)   Ljavax / WSDL /定义;           at org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:116)           在org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:322)           at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:122)           at 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)           at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:187)           at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:110)           在javax.servlet.http.HttpServlet.service(HttpServlet.java:763)           at 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)           at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)           在com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)           at 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 /元素;)Ljavax / WSDL /定义;           在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)           at 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)           at org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:97)           在javax.xml.ws.Service。(Service.java:35)          ...

项目由Maven构建,仅通过Continuum部署到Websphere;并通过请求更改所有设置。应用程序在本地Tomcat上运行完美。

编辑: 这最终由以下方法解决:

  1. 将wsdl4j.jar复制到/ usr / WebSphere / AppServer / appLibs / APPNAME目录。
  2. 以前的Chmod 775。
  3. 在websphere管理控制台,环境(左侧),共享库中,定义一个容器范围的共享库,其名称为上面的APPNAME。
  4. 将jar添加到共享库的类路径中。
  5. 服务器(左侧),APPNAME java,进程管理,类加载器并确保"类首先加载应用程序类加载器"
  6. 单击类加载器并将共享库分配给它。
  7. 重新启动服务器

2 个答案:

答案 0 :(得分:0)

我认为你需要禁用Jax ws引擎

尝试设置JVM属性,如下所示

com.ibm.websphere.webservices.DisableIBMJAXWSEngine=true

答案 1 :(得分:0)

这就是我要做的事。

在WAS运行时启用详细类加载,并查看包含WSDLReader的JAR。

根据详细类加载,检查这是否是您希望在运行时(开始时)使用的JAR。

HTH