原文链接
一. WSDL WebService的创建: 1.创建【Web Service Project】: WebServices Framework要选JAX-WS: 2.写一个简单的测试 用例:
package com.webservice; public class WebService{ public String printData(String printerName){ String strRet = "Welcome to use WebService, " + printerName; System.out.println("Print from WebService:" + strRet); return strRet; } }
3.发布Web Service:
点击工具栏的New Web Service:
Strategy选择第二个(Create web service from Java class):
勾选【Generate WSDL in project】:
点击【Finish】后,系统会在WEB-INF/wsdl下生成两个文件:
WebServiceService.wsdl:这个文件是用来描述Web Service内容的
<? xml version = "1.0" encoding = "UTF-8" ?> < definitions xmlns = "http://schemas.xmlsoap.org/wsdl/" xmlns:soap = "http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns = "http://webservice.com/" xmlns:wsu = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd = "http://www.w3.org/2001/XMLSchema" name = "WebServiceService" targetNamespace = "http://webservice.com/" > < types > < xsd:schema > < xsd:import namespace = "http://webservice.com/" schemaLocation = "WebServiceService_schema1.xsd" /> </ xsd:schema > </ types > < message name = "printData" > < part element = "tns:printData" name = "parameters" /> </ message > < message name = "printDataResponse" > < part element = "tns:printDataResponse" name = "parameters" /> </ message > < portType name = "WebServiceDelegate" > < operation name = "printData" > < input message = "tns:printData" /> < output message = "tns:printDataResponse" /> </ operation > </ portType > < binding name = "WebServicePortBinding" type = "tns:WebServiceDelegate" > < soap:binding style = "document" transport = "http://schemas.xmlsoap.org/soap/http" /> < operation name = "printData" > < soap:operation soapAction = "" /> < input > < soap:body use = "literal" /> </ input > < output > < soap:body use = "literal" /> </ output > </ operation > </ binding > < service name = "WebServiceService" > < port binding = "tns:WebServicePortBinding" name = "WebServicePort" > < soap:address location = "http://localhost:8080/WebService/WebServicePort" /> </ port > </ service > </ definitions >
WebServiceService_schema1.xsd:用来说明Web Service的命令及其参数
比如:sample里面的WebService是【printData】,有一个String类型的参数【arg0】,返回值一个String类型的值。
<? xml version = "1.0" encoding = "UTF-8" ?> < xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema" xmlns:tns = "http://webservice.com/" targetNamespace = "http://webservice.com/" version = "1.0" > < xs:element name = "printData" type = "tns:printData" /> < xs:element name = "printDataResponse" type = "tns:printDataResponse" /> < xs:complexType name = "printData" > < xs:sequence > < xs:element minOccurs = "0" name = "arg0" type = "xs:string" /> </ xs:sequence > </ xs:complexType > < xs:complexType name = "printDataResponse" > < xs:sequence > < xs:element minOccurs = "0" name = "return" type = "xs:string" /> </ xs:sequence > </ xs:complexType > </ xs:schema >
将WebService项目部署到Tomcat即可。 (部署方法略)
二. WSDL WebService的调用: 方法1:创建Web Service Client来调用:
1.创建【Java Project】:
2.
点击工具栏的New Web Service Client:
3.选择【WSDL URL】:
4.点击【Next】完成创建后,在src/com/webservice下,自动生成相关文件。(WebServiceTest.java除外,这个是自己创建的调用文件)
5.创建【WebServiceTest.java】
代码如下:
package com.webservice; public class WebServiceTest{ public static void main(String[] args){ WebServiceService wssPrintData = new WebServiceService(); WebServiceDelegate wsdPrintData = wssPrintData.getWebServicePort(); System.out.println(wsdPrintData.printData("sun" )); } }
6.【WebServiceTest.java】右键→Run As→Java Application
输出结果:
Welcome to use WebService, sun
方法2:用HttpClient调用:
package com.httpclientforwsdl; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.InputStreamRequestEntity; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.methods.RequestEntity; public class WebServiceHttpClientTest{ public synchronized static String accessService(String wsdl,String ns,String method,Map<String,String> params,String result) throws Exception{ String param = getParam(params); String soapResponseData = "" ; StringBuffer soapRequestData = new StringBuffer( "" ); soapRequestData.append("<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">" ); soapRequestData.append("<soap:Body>" ); soapRequestData.append("<ns1:" +method+ " xmlns:ns1=\"" +ns+ "\">" ); soapRequestData.append(param); soapRequestData.append("</ns1:" +method+ ">" ); soapRequestData.append("</soap:Body>" + "</soap:Envelope>" ); PostMethod postMethod = new PostMethod(wsdl); byte [] b= null ; InputStream is=null ; try { b = soapRequestData.toString().getBytes("utf-8" ); is = new ByteArrayInputStream(b, 0 , b.length); RequestEntity re = new InputStreamRequestEntity(is, b.length, "text/xml; charset=UTF-8" ); postMethod.setRequestEntity(re); HttpClient httpClient = new HttpClient(); int status = httpClient.executeMethod(postMethod); System.out.println("status:" +status); if (status== 200 ){ soapResponseData = getMesage(postMethod.getResponseBodyAsString(),result); } } catch (Exception e) { e.printStackTrace(); } finally { if (is!= null ){ is.close(); } } return soapResponseData; } public static String getParam(Map<String,String> params){ String param = "" ; if (params!= null ){ Iterator<String> it = params.keySet().iterator(); while (it.hasNext()){ String str = it.next(); param+="<" +str+ ">" ; param+=params.get(str); param+="</" +str+ ">" ; } } return param; } public static String getMesage(String soapAttachment,String result){ System.out.println("message:" +soapAttachment); if (result== null ){ return null ; } if (soapAttachment!= null && soapAttachment.length()> 0 ){ int begin = soapAttachment.indexOf(result); begin = soapAttachment.indexOf(">" , begin); int end = soapAttachment.indexOf( "</" +result+ ">" ); String str = soapAttachment.substring(begin+1 , end); str = str.replaceAll("<" , "<" ); str = str.replaceAll(">" , ">" ); return str; }else { return "" ; } } public static void main(String[] args) { try { Map<String,String> param = new HashMap<String,String>(); param.put("arg0" , "sun" ); String wsdl="http://localhost:8080/WebService/WebServicePort?wsdl" ; String ns = "http://webservice.com/" ; String method="printData" ; String response =accessService(wsdl,ns,method,param,"return" ); System.out.println("main:" +response); } catch (Exception e) { e.printStackTrace(); } } }
显示结果:
status:200 七月 15, 2016 3:43:27 下午 org.apache.commons.httpclient.HttpMethodBase getResponseBody 警告: Going to buffer response body of large or unknown size. Using getResponseBodyAsStream instead is recommended. message:<?xml version="1.0" ?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><ns2:printDataResponse xmlns:ns2="http://webservice.com/"><return>Welcome to use WebService, sun</return></ns2:printDataResponse></S:Body></S:Envelope> main:Welcome to use WebService, sun
相关文章:
WSDL WebService和RestFul WebService的个人理解: http://blog.csdn.net/sunroyi666/article/details/51939802
RestFul WebService的创建和使用实例:
http://blog.csdn.net/sunroyi666/article/details/51918675
WSDL WebService和RestFul WebService的Sample代码: http://download.csdn.net/detail/sunroyi666/9577143