The ServiceClass object does not implement the required method in the following form: OMElement sayHello(OMElement e)


今天遇到一件詭異的事情,打好的同一個aar包,丟到測試環境tomcat,使用soapui測試,正常反饋結果。

丟到本地tomcat,使用soapui測試,始終報以下錯誤。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header/>
   <soapenv:Body>
      <soapenv:Fault>
         <faultcode>soapenv:Server</faultcode>
         <faultstring>The ServiceClass object does not implement the required method in the following form: OMElement sayHello(OMElement e)</faultstring>
         <detail/>
      </soapenv:Fault>
   </soapenv:Body>
</soapenv:Envelope>

查找該錯誤,所有的解決方案均指向需要在aar工程中配置service.xml文件。

但是,我是同一個包啊,測試環境不需要service.xml就能正確運行,沒道理放到本地環境中不行啊。

於是再將測試環境中的axis2.xml替換掉本地的axis2.xml,發現serverlist中一個服務都沒有了。

后來猜測是不是版本的原因,查看測試環境中的版本,axis2 1.6.0,本地版本axis2 1.7.3.

於是下載1.6.0至本地環境,無需配置service.xml即能正確運行soapui進行測試。

這個太坑了,新版本竟然不支持不配置service的方式。


 修改與2017/04/19

抱歉,前面的解釋沒經過仔細的試驗,在經過試驗之后得出以下結論

生成aar包的Service Archive plugin的版本需要不高於服務器上運行時的axis2的版本才能正確的運行服務。

 建議:服務器運行時版本與生成服務包的版本保持一致。

如果不確定服務器運行時的axis2版本,可以通過webapps/axis2/WEB-INF/services查看,或者使用http://server:port/axis2/services/Version?wsdl獲取版本號。


修改於2017/04/20

上述問題經過再次在java代碼中使用RPCClient的方式調用。

分別使用

a.先打jar包,再改后綴為aar,最后手工編輯services.xml的方式生成aar包(手工生成AXIS2的aar文件

b.直接使用Serveice Archive plugin插件生成aar包的方式

進行了測試。

測試結果如下。

a.

b.

通過對比發現使用,

插件1.6.2生成的service.xml內容如下:

<service name="HelloServer" >
    <description>
        Please Type your service description here
    </description>
    <messageReceivers>
        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
        <messageReceiver  mep="http://www.w3.org/2004/08/wsdl/in-out"  class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
    </messageReceivers>
    <parameter name="ServiceClass">com.hongbo.server.HelloServer</parameter>
</service>

插件1.7.4生成的service.xml內容如下:

<service name="HelloServer" >
    <description>
        Please Type your service description here
    </description>
    <messageReceivers>
        <messageReceiver mep="http://www.w3.org/ns/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
        <messageReceiver  mep="http://www.w3.org/ns/wsdl/in-out"  class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
    </messageReceivers>
    <parameter name="ServiceClass">com.hongbo.server.HelloServer</parameter>
</service>

 關於MEP的解釋:

Apache Axis2用戶指引-介紹服務

Web 服務與 Axis2 體系結構


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM