JDK1.6生成webservice及访问

转自https://i-blog.csdnimg.cn/blog_migrate/8a62ca0035cc0a6c875a94b01447624d.png


webService是一种跨语言的系统间交互标准。在Java中使用webservice根据服务器端的服务根据描述生成WSDL文件,并将应用与此WSDL文件一起放入HTTP服务器中,借助服务工具根据WSDL文件生成客户端STUB代码。此代码的作用是将产生的对象请求信息封装成标准的SOAP格式数据,并发送到服务器端,服务器端根据接收到的SOAP格式数据进行转换,并最终通过反射调用响应类的响应方法。

 

jdk 6中集成了WEB service的支持,通过WebService 的annotation来暴露服务的实现,并通过Endpoint.publish将服务发布到指定的地址,客户端通过wsimport来访问响应地址的wsdl文件,生成调用服务器端服务的stub类信息,客户端即可通过生成的类来调用服务器的服务了。

 

具体示例如下:

 

1.对外暴露的接口

  1. package helloworld;  
  2.   
  3. public interface TestWebService {  
  4.   
  5.     public String echo();  
  6. }  


2.服务器端的实现类,并通过@WebService来指定对外提供服务的服务名称,客户端生成的类目和包名

  1. package helloworld;  
  2.   
  3. import javax.jws.WebService;  
  4. import javax.xml.ws.Endpoint;  
  5.   
  6.   
  7. @WebService(name="MyTestWS",serviceName="MyWebService",targetNamespace="http://localhost/client")  
  8. public class WebServiceImpl implements TestWebService{  
  9.   
  10.     public String echo() {  
  11.         return "webservice return msg";  
  12.     }  
  13.       
  14.     public static void main(String[] args) {  
  15.         Endpoint.publish("http://localhost:8080/MyWebService"new WebServiceImpl());  
  16.     }  
  17. }  



 

3.然后运行服务器的WebServiceImpl的main函数,暴露服务并将服务注册到一个http服务地址上,客户端通过jdk的bin下面的wsimport命令来获取服务器的wsdl文件并生成客户端的stub类信息打开dos窗口找到项目路径运行一下代码

  1. wsimport -keep http://localhost:8080/MyWebService?wsdl  


此处可改为 wsimport -keep -p com.localhost.client http://localhost:8080/MyWebService?wsdl com.localhost.client是自己定义的包默认用targetNamespace="http://localhost/client"

将出现编译好的java文件粘贴到项目中

4.然后在你的路径上就会生成下面几个类



注:test.java 是测试类

5.然后我们编写客户端的调用代码

  1. package localhost.client;  
  2.   
  3. public class test {  
  4.   
  5.     /** 
  6.      * @param args 
  7.      */  
  8.     public static void main(String[] args) {  
  9.         // TODO Auto-generated method stub  
  10.         MyWebService myservice  = new MyWebService();  
  11.         System.out.println(myservice.getMyTestWSPort().echo());  
  12.     }  
  13.   
  14. }  


6.执行客户端的调用代码,输出如下:

配置web.xml

  1. <listener>   
  2.   
  3.       <listener-class>   
  4.   
  5.                com.sun.xml.ws.transport.http.servlet.WSServletContextListener   
  6.   
  7.       </listener-class>   
  8.   
  9.  </listener>   
  10.   
  11.   
  12.   
  13.   
  14.   
  15.  <servlet>   
  16.   
  17.       <servlet-name>TestService</servlet-name>   
  18.   
  19.       <servlet-class>   
  20.   
  21.               com.sun.xml.ws.transport.http.servlet.WSServlet   
  22.   
  23.       </servlet-class>   
  24.   
  25.  </servlet>   
  26.   
  27.         
  28.   
  29.  <servlet-mapping>   
  30.   
  31.       <servlet-name>TestService</servlet-name>   
  32.   
  33.       <url-pattern>/hello</url-pattern>   
  34.   
  35.  </servlet-mapping>   

在lib下建立sun-jaxws.xml

代码

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <endpoints xmlns='http://java.sun.com/xml/ns/jax-ws/ri/runtime' version='2.0'>     
  3.     <endpoint name="TestService" implementation="helloworld.WebServiceImpl" url-pattern="/hello" />  
  4. </endpoints>  

将项目放到tomcat下访问

http://localhost/javawebservice/hello?wsdl

出现页面


将MyWebService代码改为

  1. package localhost.client;  
  2.   
  3. import java.net.MalformedURLException;  
  4. import java.net.URL;  
  5. import java.util.logging.Logger;  
  6. import javax.xml.namespace.QName;  
  7. import javax.xml.ws.Service;  
  8. import javax.xml.ws.WebEndpoint;  
  9. import javax.xml.ws.WebServiceClient;  
  10. import javax.xml.ws.WebServiceFeature;  
  11.   
  12.   
  13. /** 
  14.  * This class was generated by the JAX-WS RI. 
  15.  * JAX-WS RI 2.1.6 in JDK 6 
  16.  * Generated source version: 2.1 
  17.  *  
  18.  */  
  19. @WebServiceClient(name = "MyWebService", targetNamespace = "http://localhost/client", wsdlLocation = "http://localhost/MyWebService?wsdl")  
  20. public class MyWebService  
  21.     extends Service  
  22. {  
  23.   
  24.     private final static URL MYWEBSERVICE_WSDL_LOCATION;  
  25.     private final static Logger logger = Logger.getLogger(localhost.client.MyWebService.class.getName());  
  26.   
  27.     static {  
  28.         URL url = null;  
  29.         try {  
  30.             URL baseUrl;  
  31.             baseUrl = localhost.client.MyWebService.class.getResource(".");  
  32.             url = new URL(baseUrl, "http://localhost/javawebservice/hello?wsdl");  
  33.         } catch (MalformedURLException e) {  
  34.             logger.warning("Failed to create URL for the wsdl Location: 'http://localhost/MyWebService?wsdl', retrying as a local file");  
  35.             logger.warning(e.getMessage());  
  36.         }  
  37.         MYWEBSERVICE_WSDL_LOCATION = url;  
  38.     }  
  39.   
  40.     public MyWebService(URL wsdlLocation, QName serviceName) {  
  41.         super(wsdlLocation, serviceName);  
  42.     }  
  43.   
  44.     public MyWebService() {  
  45.         super(MYWEBSERVICE_WSDL_LOCATION, new QName("http://localhost/client""MyWebService"));  
  46.     }  
  47.   
  48.     /** 
  49.      *  
  50.      * @return 
  51.      *     returns MyTestWS 
  52.      */  
  53.     @WebEndpoint(name = "MyTestWSPort")  
  54.     public MyTestWS getMyTestWSPort() {  
  55.         return super.getPort(new QName("http://localhost/client""MyTestWSPort"), MyTestWS.class);  
  56.     }  
  57.   
  58.     /** 
  59.      *  
  60.      * @param features 
  61.      *     A list of {@link javax.xml.ws.WebServiceFeature} to configure on the proxy.  Supported features not in the <code>features</code> parameter will have their default values. 
  62.      * @return 
  63.      *     returns MyTestWS 
  64.      */  
  65.     @WebEndpoint(name = "MyTestWSPort")  
  66.     public MyTestWS getMyTestWSPort(WebServiceFeature... features) {  
  67.         return super.getPort(new QName("http://localhost/client""MyTestWSPort"), MyTestWS.class, features);  
  68.     }  
  69.   
  70. }  

再次调用test方法返回


下载本文所需要用到的所有包jaxws.jar

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值