读书人

关于websphere V7.0 解析 cxf 的 wsdl

发布时间: 2012-12-18 12:43:41 作者: rapoo

关于websphere V7.0 解析 cxf 的 wsdl 异常问题。
如题。cxf-2.2.9+spring2.5 的应用。从tomcat 移植到was 7.0 上面。服务端的SOAP接口,可以正常提供服务,客户端访问页没有问题。只是在访问WSDL的时候提示异常。
http://localhost:9080/myapp/msgService?wsdl。异常信息如下

[11-2-15 16:23:16:312 CST] 00000019 servlet E com.ibm.ws.webcontainer.servlet.ServletWrapper service SRVE0068E: 应用程序 myapp 中 servlet CXFServlet 的某一服务方法创建了未捕获到的异常。创建的异常:java.lang.NoSuchMethodError: org/apache/ws/commons/schema/XmlSchema.getSchemaDocument()Lorg/w3c/dom/Document;
at org.apache.cxf.service.model.SchemaInfo.getElement(SchemaInfo.java:109)
at org.apache.cxf.wsdl11.ServiceWSDLBuilder.buildTypes(ServiceWSDLBuilder.java:277)
at org.apache.cxf.wsdl11.ServiceWSDLBuilder.build(ServiceWSDLBuilder.java:189)
at org.apache.cxf.wsdl11.ServiceWSDLBuilder.build(ServiceWSDLBuilder.java:149)
at org.apache.cxf.transport.http.WSDLQueryHandler.writeResponse(WSDLQueryHandler.java:153)
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:162)
at org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:142)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:179)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:108)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:718)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:159)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1443)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:790)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:443)
at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:175)
at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3610)
at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:274)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:926)
at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1557)
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:173)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:455)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:384)
at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:83)
at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:202)
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:766)
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:896)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1527)



从异常信息来看 貌似是wsdl4j 在解析wsdl的时候出的问题。所以怀疑是 我应用带 wsdl4j-1.6.2.jar 与 WAS自带的wsdl4j.jar 发生了冲突。我尝试改变 应用模块的类加载策略。改为(类已装入并且是先使用本地类装入器父类最后)。改完之后。正常的应用也不能访问了报了一个404的错误。
[11-2-15 16:40:55:609 CST] FFDC Exception:java.lang.ClassCastException SourceId:com.ibm.ws.webcontainer.webapp.WebAppServletManager.loadServlet ProbeId:213 Reporter:com.ibm.ws.webcontainer.servlet.ServletWrapper$1@4bab4bab


java.lang.ClassCastException: org.apache.cxf.transport.servlet.CXFServlet incompatible with javax.servlet.Servlet
at com.ibm.ws.webcontainer.servlet.ServletWrapper$1.run(ServletWrapper.java:1682)
at com.ibm.ws.security.util.AccessController.doPrivileged(AccessController.java:118)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.loadServlet(ServletWrapper.java:1673)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.initialize(ServletWrapper.java:1581)
at com.ibm.wsspi.webcontainer.extension.WebExtensionProcessor.createServletWrapper(WebExtensionProcessor.java:98)
at com.ibm.ws.webcontainer.webapp.WebApp.getServletWrapper(WebApp.java:936)
at com.ibm.ws.webcontainer.webapp.WebApp.getServletWrapper(WebApp.java:857)
at com.ibm.ws.webcontainer.webapp.WebApp.initializeTargetMappings(WebApp.java:538)
at com.ibm.ws.webcontainer.webapp.WebApp.commonInitializationFinish(WebApp.java:360)
at com.ibm.ws.webcontainer.webapp.WebAppImpl.initialize(WebAppImpl.java:292)
at com.ibm.ws.webcontainer.webapp.WebGroupImpl.addWebApplication(WebGroupImpl.java:99)
at com.ibm.ws.webcontainer.VirtualHostImpl.addWebApplication(VirtualHostImpl.java:167)
at com.ibm.ws.webcontainer.WSWebContainer.addWebApp(WSWebContainer.java:722)



有人遇到过类似情况吗?求高手解决!WAS.不熟!

at com.ibm.ws.webcontainer.WSWebContainer.addWebApplication(WSWebContainer.java:607)
at com.ibm.ws.webcontainer.component.WebContainerImpl.install(WebContainerImpl.java:376)
at com.ibm.ws.webcontainer.component.WebContainerImpl.start(WebContainerImpl.java:668)
at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:1162)
at com.ibm.ws.runtime.component.DeployedApplicationImpl.fireDeployedObjectStart(DeployedApplicationImpl.java:1313)
at com.ibm.ws.runtime.component.DeployedModuleImpl.start(DeployedModuleImpl.java:611)
at com.ibm.ws.runtime.component.DeployedApplicationImpl.start(DeployedApplicationImpl.java:938)
at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:740)
at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:2092)
at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.java:437)
at com.ibm.ws.runtime.component.CompositionUnitImpl.start(CompositionUnitImpl.java:122)
at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.java:380)
at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.access$300(CompositionUnitMgrImpl.java:105)
at com.ibm.ws.runtime.component.CompositionUnitMgrImpl$CUInitializer.run(CompositionUnitMgrImpl.java:928)
at com.ibm.wsspi.runtime.component.WsComponentImpl$_AsynchInitializer.run(WsComponentImpl.java:349)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1527)
[解决办法]
cxf,axis2等跟was整合问题太多了,基本都是源于类冲突,jar冲突。还是用was自带的webservices实现比较省心啊
[解决办法]
是我也怀疑是jar 冲突的问题。
没人遇到这种情况吗?我这是WAS V7.0
[解决办法]


在WAS_HOME\java\jre\lib目录下建立endorsed子目录,将XmlSchema-1.4.7.jar文件拷入,重新启动was即可,在was7.0.0.15下测试成功。
[解决办法]
有可能是JAR文件起冲突吧..你按照楼上的方法试试看
[解决办法]

引用:
在WAS_HOME\java\jre\lib目录下建立endorsed子目录,将XmlSchema-1.4.7.jar文件拷入,重新启动was即可,在was7.0.0.15下测试成功。


我最近用was 6.0发布cxf接口也出了同样的问题 我是一下发布了两个接口 一个能用 一个就报这个错误!


[解决办法]

引用:
在WAS_HOME\java\jre\lib目录下建立endorsed子目录,将XmlSchema-1.4.7.jar文件拷入,重新启动was即可,在was7.0.0.15下测试成功。


我的环境是was6.1.0.31,发布cxf-2.2.12+spring2.5服务,也出现了同样的问题,用三楼提供的解决办法解决了,呵呵,谢谢高手同志!真是帮了大忙了!
[解决办法]
怎么重启was啊?重启was的脚本是哪个?
[解决办法]
为此问题 折腾了好几天 最终于解决方案
http://www.ibm.com/developerworks/websphere/library/techarticles/1001_thaker/1001_thaker.html

人家的版本.是cxf2.1.3的,我用的是2.4.1的

除了更换了CXF版本外,还在打出的war包的manifest.mf文件中增加了一行:
Manifest-Version: 1.0
DisableIBMJAXWSEngine: true
Class-Path:

读书人网 >Java Web开发

热点推荐