日期:2014-05-19  浏览次数:20910 次

axis2,这是什么错误:namespace mismatch
我写了一个调用sql server的java文件,生成了web service放在了axis2\web-inf\services目录下:

-AgriNewsService
--dbfolder
----AgriNewsService.class,News.class
--lib
--meta-inf
----services.xml

其中services.xml的内容如下:

<service name="AgriNewsService" scope="application">
  <description>
  AgriNews Sample Service
  </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">
  dbfolder.AgriNewsService
  </parameter>
</service>

我在客户端调用的代码如下:

String endpoint="http://localhost:8080/axis2/services/AgriNewsService";

Service service = new Service();

Call call = (Call) service.createCall();

call.setTargetEndpointAddress(endpoint);

call.setOperationName("searchInfo");

String result = (String)call.invoke(new Object[]{"牛"});

其中函数searchInfo参数是string,返回值也是string.要读取数据库.

在执行是出现下列错误:
Eclipse的console中输出:namespace mismatch require http://dbfolder found none

服务器端tomcat输出:

[ERROR] Exception occurred while trying to invoke service method searchInfo
org.apache.axis2.AxisFault: namespace mismatch require http://dbfolder found none

  at org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.jav
a:172)
  at org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic
(RPCMessageReceiver.java:98)
  at org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusines
sLogic(AbstractInOutMessageReceiver.java:40)

不知道为什么?我用同样的代码调用axis1的服务就没有错误,

请各位指点一二,是服务器端错误,还是客户端有问题??????????



------解决方案--------------------
我用同样的代码调用axis1的服务就没有错误, 

建议你看看1/2的区别,特别是命名空间部分。
------解决方案--------------------
axis1和axis2完全不同,他的架构完全不同,现在Axis已停止更新的。去官方网站看看
------解决方案--------------------
<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> 

我没做过你这个,但这几天在看这方面的书。我觉得以上部分可能有问题。
mep="http://www.w3.org/2004/08/wsdl/in-only" 这个应该表示消息的单向传递 mep="http://www.w3.org/2004/08/wsdl/in-out" 而这个才是表示的请求调用 。
你把消息的单向传递的这个注释掉再试看看。

以上全是我的猜测,你可以试一下。
------解决方案--------------------
mep="http://www.w3.org/2004/08/wsdl/in-only" 这个应该表示消息的单向传递

mep="http://www.w3.org/2004/08/wsdl/in-out" 而这个才是表示的请求响应 。