axis2调用webservice问题
最近刚学webserviceaxis2调用网上的webservice查询手机号码归属地但是接收到的返回一直是“手机号码错误http://www.webxml.com.cn...
最近刚学webservice axis2调用网上的webservice 查询手机号码归属地 但是接收到的返回一直是“手机号码错误 http://www.webxml.com.cn” (绝对保证输入的手机号是正确的)
public static void main(String[] args) throws Exception {
// 使用RPC方式调用WebService
RPCServiceClient ser = new RPCServiceClient();
Options options = ser.getOptions();
// 指定调用WebService的URL
EndpointReference targetEPR = new EndpointReference(
"http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL");
options.setTo(targetEPR);
options.setAction("http://WebXml.com.cn/getMobileCodeInfo");
// 指定getMobileCodeInfo方法的参数值
Object[] opAddEntryArgs = new Object[] { "13023439289", "" };
// 指定getMobileCodeInfo方法返回值的数据类型的Class对象
Class[] classes = new Class[] { String.class };
// 指定要调用的getMobileCodeInfo方法及WSDL文件的命名空间
QName opAddEntry = new QName("http://WebXml.com.cn/","getMobileCodeInfo");
// 调用getMobileCodeInfo方法并输出该方法的返回值
Object[] str = ser.invokeBlocking(opAddEntry, opAddEntryArgs, classes);
System.out.println(str[0]);
} 展开
public static void main(String[] args) throws Exception {
// 使用RPC方式调用WebService
RPCServiceClient ser = new RPCServiceClient();
Options options = ser.getOptions();
// 指定调用WebService的URL
EndpointReference targetEPR = new EndpointReference(
"http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL");
options.setTo(targetEPR);
options.setAction("http://WebXml.com.cn/getMobileCodeInfo");
// 指定getMobileCodeInfo方法的参数值
Object[] opAddEntryArgs = new Object[] { "13023439289", "" };
// 指定getMobileCodeInfo方法返回值的数据类型的Class对象
Class[] classes = new Class[] { String.class };
// 指定要调用的getMobileCodeInfo方法及WSDL文件的命名空间
QName opAddEntry = new QName("http://WebXml.com.cn/","getMobileCodeInfo");
// 调用getMobileCodeInfo方法并输出该方法的返回值
Object[] str = ser.invokeBlocking(opAddEntry, opAddEntryArgs, classes);
System.out.println(str[0]);
} 展开
1个回答
展开全部
import javax.xml.namespace.QName;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
import org.apache.axis2.rpc.client.RPCServiceClient;
public class test {
public static void main(String[] args) throws Exception {
// 使用RPC方式调用WebService
RPCServiceClient ser = new RPCServiceClient();
Options options = ser.getOptions();
// 指定调用WebService的URL
EndpointReference targetEPR = new EndpointReference(
"http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL");
options.setTo(targetEPR);
options.setAction("http://WebXml.com.cn/getMobileCodeInfo");
// 指定getMobileCodeInfo方法的参数值
Object[] opAddEntryArgs = new Object[] { "15818843224","15848888" };
// 指定getMobileCodeInfo方法返回值的数据类型的Class对象
Class[] classes = new Class[] { String.class,String.class };
// 指定要调用的getMobileCodeInfo方法及WSDL文件的命名空间
QName opAddEntry = new QName("http://WebXml.com.cn/","getMobileCodeInfo");
// 调用getMobileCodeInfo方法并输出该方法的返回值
Object[] str = ser.invokeBlocking(opAddEntry, opAddEntryArgs, classes);
// System.out.println(ser.invokeBlocking(opAddEntry, opAddEntryArgs));
try {
ServiceClient sc = new ServiceClient();
Options opts = new Options();
//确定目标服务地址
opts.setTo(new EndpointReference(
"http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL"));
//确定调用方法
opts.setAction("http://WebXml.com.cn/getMobileCodeInfo");
sc.setOptions(opts);
//发送请求并并得到返回结果,注意参数生成方法的分析
OMElement res = sc.sendReceive(createPayLoad());
//值得注意的是,返回结果就是一段由OMElement对象封装的xml字符串。
//我们可以对之灵活应用,下面我取第一个元素值,并打印之。因为调用的方法返回一个结果
res.getFirstElement().getText();
System.out.println(res.getFirstElement().getText());
} catch (AxisFault e) {
e.printStackTrace();
}
}
public static OMElement createPayLoad(){
OMFactory fac = OMAbstractFactory.getOMFactory();
//指定命名空间
OMNamespace omNs = fac.createOMNamespace("http://WebXml.com.cn/", "nsl");
//指定方法
OMElement method = fac.createOMElement("getMobileCodeInfo",omNs);
//指定方法的参数
OMElement value = fac.createOMElement("mobileCode",omNs);
value.setText("15818843224");
method.addChild(value);
OMElement value1 = fac.createOMElement("userID",omNs);
value1.setText("");
method.addChild(value1);
//返回方法(实际上就是OMElement封装的xml字符串)
return method;
}
}
我不知道怎么使用rpc这种方法能够拼凑出如下的内容:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<getMobileCodeInfo xmlns="http://WebXml.com.cn/">
<mobileCode>string</mobileCode>
<userID>string</userID>
</getMobileCodeInfo>
</soap:Body>
</soap:Envelope>
你的代码只能够产生如下的内容:
不知道是不是.net的webservice是不是一定要
<mobileCode>string</mobileCode>
<userID>string</userID>
形式的,但是使用rpc方式,我是不知道怎么办到的,所以我只能采用document方式调用,生成如下的内容:
现在总算是可以了:
15818843224:广东 广州 广东移动全球通卡
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询