axis2调用webservice问题

2024-10-27 22:10:05
推荐回答(1个)
回答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这种方法能够拼凑出如下的内容:



  
    
      string
      string
    
  

你的代码只能够产生如下的内容:

不知道是不是.net的webservice是不是一定要

string
      string

形式的,但是使用rpc方式,我是不知道怎么办到的,所以我只能采用document方式调用,生成如下的内容:

现在总算是可以了:

15818843224:广东 广州 广东移动全球通卡