org.apache.axis.client.Service调用服务webservice时报Unexpected wrapper element sayHello found. Expected

在使用Apache Axis客户端Service调用WebService时遇到错误:'Unexpected wrapper element sayHello found. Expected {http://webservice.demo.lerr.com/}sayHello.'。经过排查,错误原因是命名空间匹配问题。通过修改调用代码,指定正确的命名空间和方法名,成功解决了问题。

先看报错信息:

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了。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值