String endpoint = actionUrl;
String method = "saveInfo";
String targetNamespace = "http://webservice.grain.aisino.com/";
Service sv = new Service(); //new 一个服务
Call call = (Call) sv.createCall(); //创建一个call对象
call.setTargetEndpointAddress(new URL(endpoint)); //设置要调用的接口地址以上一篇的为例子
call.setUseSOAPAction(true);
call.setSOAPActionURI("http://webservice.asd.com/"+"saveInfo");
call.setOperationName(new QName(targetNamespace ,method));
call.setProperty(org.apache.axis.AxisEngine.PROP_DOMULTIREFS, Boolean.FALSE);
call.addParameter(new QName("targetNamespace ","entCode"), org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_INT);//返回参数类型 这里没有返回值,可不写
int s = (Integer)call.invoke(new Object[]{jsonData}); //
第一种可能性
call.setOperationName(new QName(targetNamespace ",method))里的地址为空了或者缺少/符号;
第二种可能性
call.addParameter(new QName("targetNamespace ","entCode"), 没有添加targetNamespace 或者entCode参数不对
因为webservice服务器默认参数是age0开始参数越多age0+1这种形式。解决办法,wsdl配置文件修改参数。
第三种可能性
call.setUseSOAPAction(true);
call.setSOAPActionURI("http://WebXml.com.cn/"+"getMobileCodeInfo");
call.setSOAPActionURI("http://webservice.grain.aisino.com/"+"saveInfo"); 没有添加targetNamespace 和请求方法。
如果以上都不行
只有通过jdk生成客户端了咱们以公用网络的电话卡号为例子。
cmd命令,进入jdk的bin目录下运行命令
1、wsimport -keep -s D:\JAVA -p com.phone -verbose http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl
这样的话就会在D:\JAVA 文件夹里面生成一个com.phone包里面有生成好的代码
然后新建一个javaweb工程将生成好的代码拷进去
测试类
结果