加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

axis2通过城市名称调用.net写的asmx WebService查询天气实例

发布时间:2020-12-17 00:34:27 所属栏目:安全 来源:网络整理
导读:注释 是自己的理解。。 package com.jielan.axis2; 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.AxisF



注释 是自己的理解。。

package com.jielan.axis2;


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.transport.http.HTTPConstants;

public class Client01 {
?? ?private static String url = "http://webservice.webxml.com.cn/WebServices/WeatherWebService.asmx";
?? ?//端点引用 指接口位置
?? ?private static EndpointReference targetEpr = new EndpointReference(url);
?? ?//有抽象OM工厂获取OM工厂,创建request SOAP包
?? ?private static OMFactory fac = OMAbstractFactory.getOMFactory();
?? ?
?? ?public static OMElement getOMMethod(String methodStr,String namespace,String tns,String[] pars,String[] vals){
?? ??? ?//创建命名空间
?? ??? ?OMNamespace nms = fac.createOMNamespace(namespace,tns);
?? ??? ?//创建OMElement方法 元素,并指定其在nms指代的名称空间中
?? ??? ?OMElement method = fac.createOMElement(methodStr,nms);
?? ??? ?//添加方法参数名和参数值
?? ??? ?for(int i=0;i<pars.length;i++){
?? ??? ??? ?//创建方法参数OMElement元素
?? ??? ??? ?OMElement param = fac.createOMElement(pars[i],nms);
?? ??? ??? ?//设置键值对 参数值
?? ??? ??? ?param.setText(vals[i]);
?? ??? ??? ?//讲方法元素 添加到method方法元素中
?? ??? ??? ?method.addChild(param);
?? ??? ?}
?? ??? ?return method;
?? ?}
?? ?
?? ?public static Options getClientOptions(String action){
?? ??? ?//创建request soap包 请求选项
?? ??? ?Options options = new Options();
?? ??? ?//设置options的soapAction
?? ??? ?options.setAction(action);
?? ??? ?//设置request soap包的端点引用(接口地址)
?? ??? ?options.setTo(targetEpr);
?? ??? ?//如果报错提示Content-Length,请求内容长度
?? ??? ?options.setProperty(HTTPConstants.CHUNKED,"false");//把chunk关掉后,会自动加上Content-Length。
?? ??? ?return options;

?? ?}


?? ?public static OMElement getWeather(String action,String methodStr,String[] vals){
?? ??? ?OMElement result = null;
?? ??? ?try {
?? ??? ??? ?ServiceClient client = new ServiceClient();
?? ??? ??? ?client.setOptions(getClientOptions(action));
?? ??? ??? ?result =? client.sendReceive(getOMMethod(methodStr,namespace,tns,pars,vals));
?? ??? ?} catch (AxisFault e) {
?? ??? ??? ?// TODO Auto-generated catch block
?? ??? ??? ?e.printStackTrace();
?? ??? ?}
?? ??? ?return result;

?? ?}


??public static void main(String[] args) {
?? ??? ?String action? = "http://WebXml.com.cn/getWeatherbyCityName";
?? ??? ?String methodStr = "getWeatherbyCityName";
?? ??? ?String namespace = "http://WebXml.com.cn/";
?? ??? ?String tns = "xsd";
?? ??? ?String[] pars = {"theCityName"};
?? ??? ?String[] vals = {"杭州"};
?? ??? ?OMElement result = null;
?? ??? ?result = getWeather(action,methodStr,vals);
?? ??? ?System.out.println(result);
?? ?}
?? ?

}



查看namespace

查看 ?? 端点引用 指接口位置? 接口地址


查看调用方法名 和 soapAction的action地址


另外OMElement method = fac.createOMElement(methodStr,nms);第二个参数nms 具体是什么好像随便填,""也行

不过查了很多看到有人说这是服务名。。

这里只要不填已有的变量名,遇到变量重复定义错误,就都可以。。


结果:


index.jsp上调用

?<body>
??? <%?? ?
?? ??? ?//out.print(InvokeExercise.invokeWucan().replaceAll("</string>","</string>r<br/>"));
? ?? ??? ?//out.print(InvokeExercise.invokeYouCan());
? ?? ??? ?out.print(Client01.getWeather(
? ?? ??? ??? ??? ?"http://WebXml.com.cn/getWeatherbyCityName",
? ?? ??? ??? ??? ?"getWeatherbyCityName","http://WebXml.com.cn/",
? ?? ??? ??? ??? ?"xsd",new String[]{"theCityName"},
? ?? ??? ??? ??? ?new String[]{"台州"}).toString().replaceAll("。","。<br/>").replaceAll("今日天气实况","<br/>今日天气实况"));
??? %>
? </body>


web上调用 结果 :

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读