先看报错信息:
2021-07-03 14:51:54.696 [http-nio-8090-exec-4] WARN org.apache.cxf.phase.PhaseInterceptorChain - Interceptor for {http://webservice.demo.lerr.com}CxfService#{http://webservice.demo.lerr.com/}sayHello has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: Unexpected wrapper element sayHello found. Expected {http://webservice.demo.lerr.com/}sayHello.
at org.apache.cxf.wsdl.interceptors.DocLiteralInInterceptor.handleMessage(DocLiteralInInterceptor.java:107)
一开始使用的是org.apache.axis.client.Service,调用webservice服务,
看看调用的代码:
String url = "http://localhost:8090/rp-api/service/say?wsdl";
try {
//引用远程wsdl文件
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(url);
call.setOperationName("sayHello");//wsdl里面描述的接口名称
//addParameter参数名称
call.addParameter("username",XMLType.XSD_STRING, ParameterMode.IN);
call.setReturnType(XMLType.XSD_STRING);//接口返回值
String username = "admin";
String result = (String) call.invoke(new Object[]{username});
System.out.println(result);
} catch (Exception e) {
System.out.println(e.fillInStackTrace());
}
百度了半天,都说是命名空间对应不上的问题。最终使用cxf自动生成调用时服务确没有问题,最终判定调用的地方肯定有问题。
call.setOperationName("sayHello");//wsdl里面描述的接口名称
改为:
//call.setOperationName(new QName("yyy","ddd"));
要指定命名空间跟方法名,yyy值的是webservice服务的命名空间,ddd指的是方法名。
再次调用就OK了。。
在使用Apache Axis客户端Service调用WebService时遇到错误:'Unexpected wrapper element sayHello found. Expected {http://webservice.demo.lerr.com/}sayHello.'。经过排查,错误原因是命名空间匹配问题。通过修改调用代码,指定正确的命名空间和方法名,成功解决了问题。
3027

被折叠的 条评论
为什么被折叠?



