java调用WebService(客户端)

java调用WebService(客户端) 看下了网上大部分都是写java来编写WS服务端,写了下JAVA的调用端。

WebService可以有Get、 Post、Soap、Document四种方式调用,以下是四种方式的参照说明。 name 属性 说明 HttpGet 添加HTTP GET协议 在追加到HTTP请求URL的查询字符串中传递的方法参数,格式为:?name1=value1&name2=value2...。返回值被当做简单的XML文档放入HTTP响应的正文中(没有<soap:Envelope>)。 HTTPPost 添加HTTP POST协议 在HTTP请求的正文中传递的方法参数,格式为:name1=value1&name2=value2...。返回值被当做简单的XML文档放入HTTP响应的正文中(没有< soap:Envelope>)。 HTTPSoap 添加Http Soap协议 Soap消息在HTTP请求的正文中发送;Soap响应在HTTP响应的正文中发送。 Documentation 添加特殊的Documentation协议 当在启用了此协议的情况下直接请求.asmx页时,Asp.Net运行Helper页创建HTML文档页,该文档页被传递到提出请求的客户端

对于SOAP协议多写了个CXF的调用(对于CXF必须有以下包:)

以下是调用代码

 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;

import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;

/**
 * 功能描述:WebService调用
 * 
 */
public class ClientTest {

	/**
	 * 功能描述:HTTP-GET
	 * 
	 */
	public String get() {
		URL url;
		BufferedReader bin = null;
		StringBuilder result = new StringBuilder();
		try {
			String urlTemp = "http://www.webxml.com.cn//WebServices/WeatherWebService.asmx/getSupportCity?byProvinceName="
					+ URLEncoder.encode("福建", "UTF-8");// URLEncoder用来参数编码
			url = new URL(urlTemp);
			InputStream in = url.openStream(); // 请求
			bin = new BufferedReader(new InputStreamReader(in, "UTF-8"));
			String s = null;
			while ((s = bin.readLine()) != null) {
				result.append(s);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (null != bin) {
				try {
					bin.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return result.toString();
	}

	/**
	 * 功能描述:HTTP-POST
	 * 
	 */
	public String post() {
		OutputStreamWriter out = null;
		StringBuilder sTotalString = new StringBuilder();
		try {
			URL urlTemp = new URL(
					"http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportCity");
			URLConnection connection = urlTemp.openConnection();
			connection.setDoOutput(true);
			out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");
			StringBuffer sb = new StringBuffer();
			sb.append("byProvinceName=福建");
			out.write(sb.toString());
			out.flush();
			String sCurrentLine;
			sCurrentLine = "";
			InputStream l_urlStream;
			l_urlStream = connection.getInputStream();// 请求
			BufferedReader l_reader = new BufferedReader(new InputStreamReader(
					l_urlStream));
			while ((sCurrentLine = l_reader.readLine()) != null) {
				sTotalString.append(sCurrentLine);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (null != out) {
				try {
					out.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return sTotalString.toString();
	}

	/**
	 * 功能描述: 请求 HTTP-SOAP
	 * 
	 */
	public String getSoapInputStream() {
		try {
			String soap = "<?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><getSupportCity xmlns=\"http://WebXml.com.cn/\"><byProvinceName></byProvinceName></getSupportCity></soap:Body></soap:Envelope>";
			URL url = new URL(
					"http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl");
			URLConnection conn = url.openConnection();
			conn.setUseCaches(false);
			conn.setDoInput(true);
			conn.setDoOutput(true);

			conn.setRequestProperty("Content-Length", Integer.toString(soap
					.length()));
			conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
			conn.setRequestProperty("SOAPAction",
					"http://WebXml.com.cn/getSupportCity");

			OutputStream os = conn.getOutputStream();
			OutputStreamWriter osw = new OutputStreamWriter(os, "utf-8");
			osw.write(soap);
			osw.flush();
			osw.close();
			StringBuilder sTotalString = new StringBuilder();
			String sCurrentLine = "";
			InputStream is = conn.getInputStream();
			BufferedReader l_reader = new BufferedReader(new InputStreamReader(
					is));
			while ((sCurrentLine = l_reader.readLine()) != null) {
				sTotalString.append(sCurrentLine);
			}
			return sTotalString.toString();
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * 功能描述:使用CXF 请求 HTTP-SOAP
	 * 
	 */
	public String soap() {
		JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory
				.newInstance();
		String url = "http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl";// http://www.fjyxd.com:17001/DefDispatcher/dispatche?wsdl
		Client clientTemp = clientFactory.createClient(url);
		Object[] arg;
		String result = "";
		try {
			arg = clientTemp.invoke("qqCheckOnline", "8698053");// 查询8698053在线状态,QQ号码
			// String,默认QQ号码:8698053。返回数据:String,Y
			// = 在线;N = 离线;E
			// = QQ号码错误;A =
			// 商业用户验证失败;V =
			// 免费用户超过数量
			result = (String) arg[0];
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;
	}

	/**
	 * 功能描述:调用
	 * 
	 */
	public static void main(String[] args) {
		ClientTest ct = new ClientTest();
		System.out.println("HTTP-GET结果:" + ct.get());
		System.out.println("HTTP-POST结果:" + ct.post());
		System.out.println("HTTP-SOAP结果:" + ct.getSoapInputStream());
		System.out.println("CXF HTTP-SOAP结果:" + ct.soap());
	}

}

posted @ 2013-01-10 09:54  java程序代码  阅读(649)  评论(0编辑  收藏  举报