我们的合作方是用axis1作为客户端,我们用axis2作为服务器,调用我们的服务时候报错:
10:56:27 ERROR [org.apache.axis2.rpc.receivers.RPCMessageReceiver:invokeBusinessLogic(165)] - Exception occurred while trying to invoke service method NotifyStatus
org.apache.axis2.AxisFault: namespace mismatch require http://util.stat2 found none
at org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.java:172)
at org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:102)
at org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:40)
at org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:100)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:176)
at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:275)
at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:133)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)我们服务端这边的services.xml是:
 <service name="ShortMessageService" targetNamespace="">
    <description>
      shortMessageService
    </description>
    <parameter name="ServiceClass" locked="false">stat2.util.WebServiceServerOperator</parameter>
    <operation name="NotifyStatus" mep="http://www.w3.org/2004/08/wsdl/in-out">
        <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>  
    </operation>
<schema schemaNamespace=""/>
</service>
其中targetNamespace和schemaNamespace两项无论怎么设置都报这个错,客户端那边说在调用时候根本没有设置命名空间,那我们服务端这边应该怎么修改配置文件或者程序?

解决方案 »

  1.   

    错误不提示你了么,namespace用http://util.stat2
      

  2.   

    targetNamespace和schemaNamespace两项为空的情况下,生成的wsdl里面namespace就是http://util.stat2,是按照包名倒过来写的,可是现在还是报错啊?有人知道是怎么回事吗?
      

  3.   

    不是你的axis2发布的服务有问题,是axis客户端调用有问题,将调用的方法namespace加上http://util.stat2
    call.setOperationName(new QName(namespaceURI, methodName));//call是axis1产生的Call对象,namespaceURI应该是http://util.stat2,methodName应该是调用的方法名称
      

  4.   

    晕倒,axis调用不带namespace是最不严谨的做法。现在发布的webservice(SOAP 12)有哪个是不带namespace的?还停留在axis1代的水平,真是无语。你可以直接跟客户说,你们out了!!ps:你发布的Webservice如果真不想带namespace,修改service class,不要package,直接放在src下层。
      

  5.   

    直接放在SRC也是不可以的。axis2在自动生成wsdl时会把命名空间设置为http://ws.apache.org/axis2
      

  6.   

    可能真没办法了,你应该去apache axis2的讨论组问问。
    反正我这几年来不管是开发的还是调用的literal/document方式的webservice都是带namespace的,rpc方式可能不带。