微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用axis和axis2调用webservice

一   使用axis调用webservice

1.导入包

activation.jar
axis.jar
commons-discovery-0.2.jar
commons-logging-1.0.4.jar
jaxrpc.jar
mail.jar
wsdl4j-1.5.1.jar

2.代码

private void getWeather(){
  try{
//   String url = http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl;
   String url=http://webservice.webxml.com.cn/WebServices/WeatherWebService.asmx;
   String city=北京;
   //命名空间
   String soapaction=http://WebXml.com.cn/;
   Service service = new Service();
   Call call=(Call) service.createCall();call.setTargetEndpointAddress(url);
   //方法名
//   call.setoperationName(new QName(soapaction,getSupportCityString));
   call.setoperationName(new QName(soapaction,getWeatherbyCityName));
   
   //参数
   call.addParameter(new QName(soapaction,theCityName),org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);
   
//   call.addParameter(new QName(soapaction,theRegionCode),//     javax.xml.rpc.ParameterMode.IN);
   
   //返回类型
   call.setReturnType(new QName(soapaction,getWeatherbyCityName),Vector.class);
//   call.setReturnType(new QName(soapaction,getSupportCityString),Vector.class);
   
   call.setUseSOAPAction(true);
   call.setSOAPActionURI(soapaction+getWeatherbyCityName);
//   call.setSOAPActionURI(soapaction+getSupportCityString);
   
   Vector v=(Vector)call.invoke(new Object[]{city});
   for (int i = 0; i <v.size(); i++) {
    System.out.println(v.get(i));
   }
  }catch(Exception ex){
   ex.printstacktrace();
  }
 }

二 使用axis2调用webservice1.导包axiom-api-1.2.11.jaraxiom-impl-1.2.11.jaraxis2-adb-1.5.5.jaraxis2-kernel-1.5.5.jaraxis2-transport-http-1.5.5.jaraxis2-transport-local-1.5.5.jarcommons-codec-1.3.jarcommons-httpclient-3.1.jarcommons-io.jarcommons-logging-1.1.1.jarhttpcore-4.0.jarmail-1.4.jarneethi-2.0.5.jarwsdl4j-1.6.2.jarXmlSchema-1.4.3.jar2.代码这里可以有两种方法实现其一 手动构造OMElement对象然后通过ServiceClient发送接收(网上很多实例)其二 通过读取本地的xml文件将其转换为OMElement 然后再发送接收

private static void invokeWeb Service() 
    { 
        try 
        { 
            String soapBindingAddress = http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl; 
            
            EndpointReference endpointReference = new EndpointReference(soapBindingAddress); 
            
            //创建一个OMFactory,下面的namespace、方法与参数均需由它创建 
//            OMFactory factory = OMAbstractFactory.getoMFactory(); 
            //指定命名空间
//            OMNamespace namespace = factory.createOMNamespace(http://WebXml.com.cn/,web); 
            
           /* //下面创建一个method对象,getSupportCityString为方法名 
            OMElement method = factory.createOMElement(getSupportCityString,namespace); 
            OMElement value1 = factory.createOMElement(theRegionCode,namespace);//方法的第一个参数名称
           //手动构造参数和值 下面有一个buildParma方法
            value1.addChild(factory.createOMText(value1,北京));//设定参数的值
//            value1.setText(北京);
            method.addChild(value1);//方法设置参数*/
            
            //请求参数设置
            Options options = new Options(); 
            options.setAction(http://WebXml.com.cn/getSupportCityString);  
            options.setTo(endpointReference); 
            
            ServiceClient sender = new ServiceClient(); 
            sender.setoptions(options); 
            
            //发送并得到结果,至此,调用成功,并得到了结果 
//            OMElement result = sender.sendReceive(buildParam(getSupportCityString,new String[]{theRegionCode},new String[]{北京}));   
//            OMElement med=buildParam(getSupportCityString,new String[]{北京});
//            System.out.println(med.toString());
            OMElement methods =getStrToOme(E://test.xml);
            OMElement result = sender.sendReceive(methods);

            //下面的输出结果为
            System.out.println(result.toString()); 
        } 
        catch (AxisFault ex) 
        { 
            ex.printstacktrace(); 
        } 

    }public static OMElement getStrToOme(String filename){
    	
    	String xmlStr;
        OMElement msg=null;
		try {
			xmlStr = FileUtils.readFiletoString(new File(filename));
			String encoding=UTF-8;
			msg=toOMElement(xmlStr,encoding);
	    	System.out.println(msg.toString());
	    	
	    	
		} catch (Exception e) {
			// Todo Auto-generated catch block
			e.printstacktrace();
		}
		return msg;
    }public static OMElement toOMElement(String xmlStr,String encoding) {
    	   OMElement xmlValue;
    	   try {
    	   xmlValue = new StAXOMBuilder(new ByteArrayInputStream(xmlStr
    	   .getBytes(encoding))).getDocumentElement();
    	   return xmlValue;
    	   } catch (Exception e) {
    	   return null;
    	   }
    }/**
     * @see 调用webservice得到天气预报支持的城市
     * @return
     */
    public static  OMElement buildParam(String method,String[] arg,String[] val) {
    	 OMFactory fac = OMAbstractFactory.getoMFactory();
    	 OMNamespace omNs = fac.createOMNamespace(http://WebXml.com.cn/,web);

           OMElement data = fac.createOMElement(method,omNs);
           for(int i=0;i<arg.length;i++){
           OMElement inner = fac.createOMElement(arg[i],omNs);
           inner.setText(val[i]);
           data.addChild(inner);
           }
           return data;
    
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐