这两天在项目上集成CXF进行异构系统间的通讯,在Tomcat上集成开发,用cxf生成客户端代码,运行都没有问题,但是迁移到WAS7上,就出问题了
Caused by: javax.xml.ws.soap.SOAPFaultException: Unmarshalling Error: unexpected element (uri:"", local:"colNum"). Expected elements a re <{}sql> at org.apache.axis2.jaxws.marshaller.impl.alt.MethodMarshallerUtils.createSystemException(MethodMarshallerUtils.java:1310) at org.apache.axis2.jaxws.marshaller.impl.alt.MethodMarshallerUtils.demarshalFaultResponse(MethodMarshallerUtils.java:1036) at org.apache.axis2.jaxws.marshaller.impl.alt.DocLitWrappedMethodMarshaller.demarshalFaultResponse(DocLitWrappedMethodMarshall er.java:591) at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.getFaultResponse(JAXWSProxyHandler.java:532) at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.createResponse(JAXWSProxyHandler.java:470) at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invokeSEIMethod(JAXWSProxyHandler.java:377) at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invoke(JAXWSProxyHandler.java:185)
这大致的意思是客户端发送的参数(uri:"", local:"colNum")与服务端接收的参数<{}sql>不一致
开始没怎么注意,就看到了
org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler
唉,怎么老是WAS报错啊,赶快查查这个类在哪里,结果是WAS容器自己带的,这~难道是WAS不支持CXF?
一番谷歌度娘后,发现was是支持的,奇怪了,Tomcat、Application调用全都可以啊。。。。
再用soapUI调用试试,正常~~~
无奈,在csdn上看到有人说是代码中缺少命名空间注释
参考:http://blog.csdn.net/maosijunzi/article/details/8278042
一番修改之后,再部署到was上,结果。。。依旧。。。
怎么办?
检查一下服务端吧,检查了半天,还是没发现有问题。。。。
无意中,在soapUI中多加了一个请求参数,OMG,竟然报了同样的错误。
至此注意到了这个错误内容:
Unmarshalling Error: unexpected element (uri:"", local:"colNum"). Expected elements a re <{}sql>
参数不对,参数不对!研究一下客户端代码,没问题,依然没问题
那是不是就代表在was上部署的没问题呢?
查。。。查。。。查。。。。
发现了,原来WAS上的应用咱本来是要用jar包里的客户端代码,结果,把源码包编译后的客户端class文件放上去了,而且是旧的,自然不会调用新的jar包了
果断删除class文件,果断重启,果断测试,终于解决~
以后部署都要谨慎点啊~唉~这闹的~