Axis namespace mismatch 传参出错解决方案,Java Webservice调用
描述
在做Webservice接口的时候发现一个问题,Webservice测试类中有两个方法,一个是helloWorld一个是SayHello(String name),调用helloWorld的时候能正常输出返回值,因为这个方法不带参数,但是在使用SayHello的方法时就会出错,报出namespace mismatch XXXXX 这个问题查了很久,主要说是Webservice的发部方式引起的问题,具体不知。
解决
在调用时的客户端类中设置一下namespace,因为调用写法很多,所以我在下方列出一种比较简单的调用方法#具体的namespace查看方式可以看控制台报的错误信息获取也可以通过完整Webservice访问地址加上?wsdl来查看配置信息,里面也有namespace#。
try {//调用地址String endpoint = "http://localhost:8080/smsp/services/MainControl";Service service = new Service();Call call = null;call = (Call) service.createCall();//调用方法名称和nameSpace域名配置call.setOperationName(new QName("http://webservice.smsp.withub.net.cn", "sayH"));call.setTargetEndpointAddress(new java.net.URL(endpoint));//调用及传参,#返回的类型#如果不同记住进行修改这里是默认转的(String),如果传参需要多个,只需要在Object数组中增加String ret = (String) call.invoke(new Object[] {"Jim"});} catch (Exception ex) {ex.printStackTrace();}