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" 而这个才是表示的请求响应 。