web service 调用问题

http://www.webxml.com.cn/WebServices/WeatherWebService.asmx在这个网站里我想调用getWeatherbyCity... http://www.webxml.com.cn/WebServices/WeatherWebService.asmx
在这个网站里我想调用
getWeatherbyCityName
这个来获取到指定城市的天气情况,为什么会用问题,调用不起来,求高手
展开
 我来答
星星爱弘基8媛
2014-05-22 · 超过66用户采纳过TA的回答
知道答主
回答量:182
采纳率:50%
帮助的人:129万
展开全部
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

提交
取消

辅 助

模 式