axis,axis 2呼び出し.netのwebservice


今日1人の友达がjava呼び出し.netのwebservice机能を寻ねて、2时间振り回して、すべて振り回して、贴って、使う友达が回り道を少なくすることを望みます
1、axis呼び出し.netのwebservice

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、axis 2呼び出し.netのwebservice
   axis 2呼び出しはそんなに書く必要はありません.次の手順に従って、一歩一歩、簡単には想像できません.
   1、axis 2をダウンロードする(apache公式サイトにwww.apache.orgをダウンロードする)
   2、私がダウンロードしたのはaxis 2-1.5-bin.zipで、現在のフォルダに解凍します
   3、binディレクトリに入る(F:studyjavaserviceaxis 2axis 2-1.5bin)
   4、cmdを開き、ステップ3のbinディレクトリに入り、wsdl 2 java.bat-uriを入力するhttp://www.webxml.c
om.cn/WebServices/WeatherWebServices.asmx?wsdl、折り返し
   5、binディレクトリの下でsrcディレクトリを生成し、srcディレクトリの下の2つのクラスをeclipse開発ディレクトリの下に試験する
   6、テストクラスTestを構築し、コードは以下の通りである.

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の1つの方法で、以下の通りです.

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>

axis 2でjavaコードを生成すると、自動的に対応するオブジェクトが生成されます.webserviceが渡すパラメータは、このオブジェクトに値を付ける操作で完了できます.上記のように、広州の天気を調べるには、city.settheCityName(「広州」)に設定します.
ポイント
.net webserviceではArrayOfStringが返され、javaにはこのオブジェクトがないため、axis 2は自動的にこのオブジェクトを生成し、String[]str=array.getString()などの対応する配列に変換すればよい.axisバージョンでは、戻りタイプが使用されていますが、戻りタイプ設定の他にStringなどのエラーが発生し、VECTOR、すなわちcall.setReturnType(XMLType.SOAP_VECTOR)にしか設定できません.文字列が1つしか返されない場合は、STRINGを直接使用できます.これにより、正しい戻りを確認できます.
2つのバージョンを比較して、やはりaxis 2の使用が便利だと思います