WSDL WebService的创建和使用实例

一. WSDL WebService的创建:
1.创建【Web Service Project】:
WSDL WebService的创建和使用实例_第1张图片

WebServices Framework要选JAX-WS:
WSDL WebService的创建和使用实例_第2张图片

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:
WSDL WebService的创建和使用实例_第3张图片

Strategy选择第二个(Create web service from Java class):
WSDL WebService的创建和使用实例_第4张图片

勾选【Generate WSDL in project】:
WSDL WebService的创建和使用实例_第5张图片

点击【Finish】后,系统会在WEB-INF/wsdl下生成两个文件:
WSDL WebService的创建和使用实例_第6张图片

WebServiceService.wsdl:这个文件是用来描述Web Service内容的



  
    
      
    
  
  
    
  
  
    
  
  
    
      
      
    
  
  
    
    
      
      
        
      
      
        
      
    
  
  
    
      
    
  


WebServiceService_schema1.xsd:用来说明Web Service的命令及其参数
比如:sample里面的WebService是【printData】,有一个String类型的参数【arg0】,返回值一个String类型的值。



  

  

  
    
      
    
  

  
    
      
    
  


将WebService项目部署到Tomcat即可。
部署方法略


二. WSDL WebService的调用:
方法1:创建Web Service Client来调用:
1.创建【Java Project】:
WSDL WebService的创建和使用实例_第7张图片

2. 点击工具栏的New Web Service Client:
WSDL WebService的创建和使用实例_第8张图片

WSDL WebService的创建和使用实例_第9张图片

3.选择【WSDL URL】:
WSDL WebService的创建和使用实例_第10张图片

4.点击【Next】完成创建后,在src/com/webservice下,自动生成相关文件。(WebServiceTest.java除外,这个是自己创建的调用文件)
WSDL WebService的创建和使用实例_第11张图片

5.创建【WebServiceTest.java】
WSDL WebService的创建和使用实例_第12张图片

代码如下:
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 params,String result)throws Exception{  
        //拼接参数  
        String param = getParam(params);  
        String soapResponseData = "";  
        //拼接SOAP  
        StringBuffer soapRequestData = new StringBuffer("");  
        soapRequestData.append("");  
        soapRequestData.append("");  
        soapRequestData.append("");  
        soapRequestData.append(param);  
        soapRequestData.append("");  
        soapRequestData.append("" + "");  
        PostMethod postMethod = new PostMethod(wsdl);  
        // 然后把Soap请求数据添加到PostMethod中  
        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 params){  
        String param = "";  
        if(params!=null){  
            Iterator it  = params.keySet().iterator();  
            while(it.hasNext()){  
                String str = it.next();  
                param+="<"+str+">";  
                param+=params.get(str);  
                param+="";  
            }  
        }  
        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("");  
            String str = soapAttachment.substring(begin+1, end);  
            str = str.replaceAll("<", "<");  
            str = str.replaceAll(">", ">");  
            return str;  
        }else{  
            return "";  
        }  
    }  
      
    /** 
     * @param args 
     */  
    public static void main(String[] args) {   
        try {  
            Map param = new HashMap();  
            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:Welcome to use WebService, sun
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

你可能感兴趣的:(Java)