zoukankan      html  css  js  c++  java
  • CXF开发的接口在websphere下居然调用了AXIS2的实现

    CXF开发的接口在websphere下居然调用了AXIS2的实现

    问题原因:开发的cxf接口,在本地tomcat下没有问题,部署到websphere下有的时候没有问题,有的时候重启后就出现问题

    日志如下:

    Caused by: javax.xml.ws.WebServiceException: org.apache.axis2.AxisFault: Address information does not exist in the Endpoint Reference (EPR).The system cannot infer the transport mechanism.
    at org.apache.axis2.jaxws.ExceptionFactory.createWebServiceException(ExceptionFactory.java:175)
    at org.apache.axis2.jaxws.ExceptionFactory.makeWebServiceException(ExceptionFactory.java:70)
    at org.apache.axis2.jaxws.ExceptionFactory.makeWebServiceException(ExceptionFactory.java:128)
    at org.apache.axis2.jaxws.core.controller.impl.AxisInvocationController.execute(AxisInvocationController.java:586)
    at org.apache.axis2.jaxws.core.controller.impl.AxisInvocationController.doInvoke(AxisInvocationController.java:130)
    at org.apache.axis2.jaxws.core.controller.impl.InvocationControllerImpl.invoke(InvocationControllerImpl.java:93)
    at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invokeSEIMethod(JAXWSProxyHandler.java:391)
    at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invoke(JAXWSProxyHandler.java:208)
    at $Proxy100.invoke(Unknown Source)
    at com.scms.epms.buyapply.action.BuyApplyActivator.buyApplyClient(BuyApplyActivator.java:86)
    at com.huaxin.gs.sysinterface.InitInterfaceService.buyaply(InitInterfaceService.java:64)
    at com.huaxin.gs.sysinterface.InitInterfaceService.doInitInterfaceData(InitInterfaceService.java:49)
    ... 55 more

    发现问题,很是奇怪,我们明明用的是cxf 怎么日志是axis2的呢?然后在本地用soapui模拟接口跟踪代码发现并没有走axis2,也看了应用lib里并没有axis2的jar。

    问题应该出在了websphere加载机制里面了。确定好了问题那么就跟着源码看看,为什么我们的接口在websphere会调用axis2呢?

    根据报错代码 com.scms.epms.buyapply.action.BuyApplyActivator.buyApplyClient(BuyApplyActivator.java:86) 我们发现自动生成的客户端代码都调用了

     javax.xml.ws.Service 类的 Provider provider() 方法

    方法里面有

    我们可以看到JAX-WS 2.0 的实现是根据

    Object provider =FactoryFinder.find(JAXWSPROVIDER_PROPERTY,DEFAULT_JAXWSPROVIDER);来查找实现类的,默认使用javax.xml.ws.spi.Provider的实现类com.sun.xml.internal.ws.spi.ProviderImpl

    优先实现类的顺序 如图

    而我们系统META-INF下面没有配置。而websphere下面的自带了JAX-WS 2.0的 实现 AXIS2

    此org.apache.axis2.jar下面的services下的的javax.xml.ws.spi.Provider 文件里有org.apache.axis2.jaxws.spi.Provider实现。根据日志确实走了这个的实现。

    那么我们如何修改呢?

    直接在应用下新建

    META-INF/services/javax.xml.ws.spi.Provider 文件

    文件里面用org.apache.cxf.jaxws.spi.Provider即可。一切OK

    之前也走了弯路,发现里面的解决方法都不可行。连接在这里http://www.bubuko.com/infodetail-279125.html

    但是里面提供了很好的思路

  • 相关阅读:
    spring-tool-suite-4下载安装及报错的解决办法
    CentOS 6.5使用yum快速搭建LAMP环境
    jquery省份城市选择器
    js 将json字符串转换为json对象的方法解析
    Spring MVC添加支持Http的delete、put请求!(HiddenHttpMethodFilter)
    Filebeat工作原理
    filebeat_config
    Docker设置http代理
    转-OWASP CSRFGuard使用细节
    转-JavaWeb三大组件之Listener监听器
  • 原文地址:https://www.cnblogs.com/diaobiyong/p/9837319.html
Copyright © 2011-2022 走看看