axis,axis2调用.net的webservice

    xiaoxiao2026-03-30  12

    今天一个朋友咨询java调用.net的webservice功能,折腾了2个小时,也都折腾出来了,贴出来,希望用到的朋友少走弯路  1、axis调用.net的webservice  Java代码   package test;      import java.net.URL;      import javax.xml.namespace.QName;      import org.apache.axis.client.Call;   import org.apache.axis.client.Service;   import org.apache.axis.encoding.XMLType;   import javax.xml.rpc.ParameterMode;      public class Test {          public static void test() throws Exception{           Service service = new Service();           Call call = null;             try {                 call = (Call) service.createCall();                 call.setTargetEndpointAddress(new URL("http://www.webxml.com.cn/WebServices/WeatherWebService.asmx"));                 call.setOperationName(new QName("http://WebXml.com.cn/","getWeatherbyCityName"));                 call.addParameter(new QName("http://WebXml.com.cn/""theCityName"),XMLType.SOAP_VECTOR,ParameterMode.IN);                 call.setReturnType(XMLType.SOAP_VECTOR);                 call.setUseSOAPAction(true);                 call.setSOAPActionURI("http://WebXml.com.cn/getWeatherbyCityName");                 System.out.println(call.invoke(new Object[]{"广州"}));             } catch (Exception e) {                 e.printStackTrace();             }       }              /**       * @param args       */       public static void main(String[] args) throws Exception{           test();       }      }   2、axis2调用.net的webservice     axis2调用不需要写那么多,按照下面的步骤,一步一步来,简单你都想象不到     1、下载axis2(到apache官网下载www.apache.org)     2、我下载的是axis2-1.5-bin.zip,解压到当前文件夹     3、进入bin目录(F:\study\java\service\axis2\axis2-1.5\bin)     4、打开cmd,进入第3步的bin目录,输入wsdl2java.bat -uri http://www.webxml.c  om.cn/WebServices/WeatherWebService.asmx?wsdl,回车     5、之后会在bin目录下生成一个src目录,将src目录下的两个类考到eclipse开发目录下     6、建一个测试类Test,代码如下  Java代码   import cn.com.webxml.WeatherWebServiceStub;   import cn.com.webxml.WeatherWebServiceStub.ArrayOfString;   import cn.com.webxml.WeatherWebServiceStub.GetWeatherbyCityName;         public class Test {          public static void test1(){           try{               WeatherWebServiceStub stub = new WeatherWebServiceStub();               stub._getServiceClient().getOptions().setProperty(                         org.apache.axis2.transport.http.HTTPConstants.CHUNKED,                         Boolean.FALSE);               GetWeatherbyCityName city = new GetWeatherbyCityName();               city.setTheCityName("广州");               ArrayOfString array = stub.getWeatherbyCityName(city).getGetWeatherbyCityNameResult();               String[] str = array.getString();               for(String s : str){                   System.out.println(s);               }           }catch(Exception e){               e.printStackTrace();           }       }              /**       * @param args       */       public static void main(String[] args) throws Exception{           test1();       }      }   需要注意的是这个类 GetWeatherbyCityName ,这个本来是.net webservice中的一个方法,如下  Java代码   POST /WebServices/WeatherWebService.asmx HTTP/1.1   Host: www.webxml.com.cn   Content-Type: text/xml; charset=utf-8   Content-Length: length   SOAPAction: "http://WebXml.com.cn/getWeatherbyCityName"      <?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>       <getWeatherbyCityName xmlns="http://WebXml.com.cn/">         <theCityName>string</theCityName>       </getWeatherbyCityName>     </soap:Body>   </soap:Envelope>   用axis2生成java代码后,会自动生成一个对应的对象,webservice需要传递的参数,可以通过对这个对象赋值操作完成,如上面,我要查广州的天气,就设置为city.setTheCityName("广州");  注意,关键的地方   由于.net webservice中返回的是ArrayOfString,java中没有这个对象,所以axis2会自动生成这个对象,然后转换成对应的数组即可,如String[] str = array.getString();在axis版本中,使用的是返回类型,但是返回类型设置其他的比如String等都会报错,只能设置成VECTOR,即call.setReturnType(XMLType.SOAP_VECTOR),如果只返回一个字符串,可以直接使用STRING;这样才能确保返回正确。 

    比较两个版本,还是觉得axis2使用方便 

    转自http://cqyqing.iteye.com/blog/1668227

    转载请注明原文地址: https://ju.6miu.com/read-1308320.html
    最新回复(0)