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()); } }