以多种方式访问WebService

一、Java访问WebService
(1)使用Axis
import javax.xml.namespace.QName;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

public class AxisWebService {

	public static void main(String[] args) {
		try {
			String endpoint = "http://www.webservicex.net/globalweather.asmx?WSDL";
			String nameSpace = "http://www.webserviceX.NET"; 
			
			Service service = new Service();
			
			Call call = (Call) service.createCall();
			call.setTargetEndpointAddress(endpoint);
			call.setOperationName(new QName(nameSpace, "GetWeather"));

			call.addParameter(new QName(nameSpace,"CityName"),
					org.apache.axis.encoding.XMLType.XSD_STRING,
					javax.xml.rpc.ParameterMode.IN);

			call.addParameter(new QName(nameSpace,"CountryName"),
					org.apache.axis.encoding.XMLType.XSD_STRING,
					javax.xml.rpc.ParameterMode.IN);			
			
			call.setUseSOAPAction(true);
			call.setReturnType(org.apache.axis.Constants.XSD_STRING);
			call.setSOAPActionURI("http://www.webserviceX.NET/GetWeather");
			String result = (String) call.invoke(new Object[] {"chengdu","china"});
			
			System.out.println(result);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

(2)使用XFire
import java.net.MalformedURLException;
import java.net.URL;

import org.codehaus.xfire.client.Client;
public class XFireWebService {

	public static String invokeService(){
		String endpoint = "http://www.webservicex.net/globalweather.asmx?WSDL";
		Client client = null;

		try{
			client = new Client(new URL(endpoint));
			Object[] result = client.invoke("GetWeather", new Object[] {"chengdu","china"});
			
			return (String)result[0];
		}catch(Exception e){
	
		}
		return "";
	}
	
	public static void main(String[] args) {
		System.out.println(XFireWebService.invokeService());
	}
}

二、js访问WebService
(1)使用ActiveXObject
	function requestByGet(){ 
		var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
		//Webservice location.
		var URL="http://www.webservicex.net/globalweather.asmx/GetWeather?CityName=chengdu&CountryName=china";
		xmlhttp.Open("GET",URL, false); 
		xmlhttp.SetRequestHeader ("Content-Type","text/xml; charset=utf-8"); 
		xmlhttp.SetRequestHeader ("SOAPAction","http://http://www.webserviceX.NET/GetWeather"); 
		xmlhttp.Send(null); 
		var result = xmlhttp.status; 
		//OK
		if(result==200) { 
			alert(xmlhttp.responseText); 
		} 
		xmlhttp = null; 
	} 

	function requestByPost(city,country){
		var data;
		data = '<?xml version="1.0" encoding="utf-8"?>'; 
		data = data + '<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/">'; 
		data = data + '<soap:Body>'; 
		data = data + '<GetWeather xmlns="http://www.webserviceX.NET">'; 
		data = data + '<CityName>'+city+'</CityName>'; 
		data = data + '<CountryName>'+country+'</CountryName>';
		data = data + '</GetWeather>'; 
		data = data + '</soap:Body>'; 
		data = data + '</soap:Envelope>'; 

		var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
		var URL="http://www.webservicex.net/globalweather.asmx";
		xmlhttp.Open("POST",URL, false); 
		xmlhttp.SetRequestHeader ("Content-Type","text/xml; charset=utf-8"); 
		xmlhttp.SetRequestHeader ("SOAPAction","http://www.webserviceX.NET/GetWeather"); 
		xmlhttp.Send(data); 
		alert( xmlhttp.responseText); 
	}

(2)使用jQuery的ajax
	$(function(){
		 $.ajax({
			type: "GET",//GET or POST
			url: "http://www.webservicex.net/globalweather.asmx/GetWeather", ////Webservice location
			data: {CityName: 'chengdu', CountryName: 'china'},
			dataType: "xml",
			
			success: function(data, textStatus){
				var xml = data.xml.replace(/&lt;/g,"<").replace(/&gt;/g,">");
				alert(xml);
				//alert($(xml).find("Status").length);

				alert($(xml).find("Temperature").eq(0).text());
				$(xml).find("Status").each(function(i,obj){
					//alert(obj.innerText);
					alert($(this).text());
				});
			},

			error:function(XMLHttpRequest, textStatus, errorThrown){
				alert(textStatus);
			}
		 });		
	
	});

三、在oracle中调用WebService
(1)使用UTL_HTTP
CREATE OR REPLACE FUNCTION TEST_GET_WEATHER(
       cityname  IN  VARCHAR2,
       countryname  IN  VARCHAR2
)RETURN VARCHAR2

AS
	env VARCHAR2(32767);
	http_req utl_http.req;
	http_resp utl_http.resp;
	return_value xmltype;
	error_value xmltype;
	error_code VARCHAR(256);
	error_string VARCHAR2(32767);

  result_string varchar2(32767);
BEGIN
	env := '<?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>
			<GetWeather xmlns="http://www.webserviceX.NET">
			  <CityName>' || cityname || '</CityName>
			  <CountryName>' || countryname || '</CountryName>
			</GetWeather>
		</soap:Body>
	</soap:Envelope>
	';

	http_req := utl_http.begin_request('http://www.webservicex.net/globalweather.asmx?WSDL', 'POST', 'HTTP/1.0');
	utl_http.set_header(http_req,'Content-Type','text/xml');
	utl_http.set_header(http_req,'Content-Length',length(env));
	utl_http.set_header(http_req,'SOAPAction','http://www.webserviceX.NET/GetWeather');
	utl_http.write_text(http_req,env);

	http_resp := utl_http.get_response(http_req);
	utl_http.read_text(http_resp,env);
	utl_http.end_response(http_resp);

	return_value := xmltype.createxml(env).extract('/soap:Envelope/soap:Body/child::node()','xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"');
	error_value := return_value.extract('/soap:Fault','xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"');

	if( error_value is not null) THEN
	    error_string := error_value.extract('/soap:Fault/faultstring/child::text()','xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"').getstringval();
	    error_code := error_value.extract('/soap:Fault/faultcode/child::text()','xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"').getstringval();

	    raise_application_error(-20000,'error in authentification: ' || error_string || ' - ' || error_code);
	end if;

	result_string := return_value.getStringVal();
  dbms_output.put_line(result_string);

  result_string := replace(result_string, '&lt;', '<');
  result_string := replace(result_string, '&gt;', '>');
  result_string := replace(result_string, '&quot;', '"');

  return result_string;  
  
END;

(2)使用UTL_DBWS
例子: Consuming Web Services in Oracle 10g
说明:oracle自己的例子成功了,调用GetWeather的WebService,没成功。

猜你喜欢

转载自log-cd.iteye.com/blog/1345093