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]);
展开
 我来答
每天学点Java
推荐于2018-03-19 · TA获得超过5938个赞
知道大有可为答主
回答量:3547
采纳率:0%
帮助的人:1343万
展开全部
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:广东 广州 广东移动全球通卡

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式