`
wjm901215
  • 浏览: 147557 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JAX-WS一个很简单的RPC风格的Web Service同步调用

    博客分类:
  • java
阅读更多

Web Service技术,无疑会越来越被广泛应用的,可以非常好的实现异构应用程序之间的相互通信。JAX-WS是SUN推出的一种实现Web Service的工具。下面是我学习用JAX-WS实现的一个很简单Web Service例子。

服务端:

新建Java Project

1、 创建服务接口Endpoint

[java] view plaincopy
  1. package leon.rpcws.iface;  
  2.   
  3. import javax.jws.WebMethod;  
  4. import javax.jws.WebService;  
  5. import javax.jws.soap.SOAPBinding;  
  6. import javax.jws.soap.SOAPBinding.Style;  
  7.    
  8. @WebService  
  9. @SOAPBinding(style = Style.RPC)  
  10. public interface IHello{  
  11.    
  12.     @WebMethod   
  13.     String sayHello(String name);  
  14. }  

2、 接口的实现类

[java] view plaincopy
  1. package leon.rpcws.impl;  
  2.   
  3. import javax.jws.WebService;  
  4. import leon.rpcws.iface.IHello;  
  5.   
  6. @WebService(endpointInterface = "leon.rpcws.iface.IHello")  
  7. public class HelloImpl implements IHello {  
  8.   
  9.     @Override  
  10.     public String sayHello(String name) {  
  11.         return "Hello JAX-WS. Welcome, "+name;  
  12.     }  
  13. }  

3、发布

[java] view plaincopy
  1. package leon.rpcws;  
  2.   
  3. import javax.xml.ws.Endpoint;  
  4.   
  5. import leon.rpcws.impl.HelloImpl;  
  6.   
  7. public class HelloPublisher {  
  8.     public static void main(String[] args) {  
  9.         Endpoint.publish("http://10.225.112.86:9999/ws/hello"new HelloImpl());  
  10.         System.out.println("published.");  
  11.     }  
  12. }  

以上3个类,就可以完成一个很简单的Web Service服务端的创建和发布。运行HelloPublisher,console打印出published.同时红色方块亮起,表示发布成功。

打开浏览器,访问:http://10.225.112.86:9999/ws/hello?wsdl
可以查看到发布的wsdl文件:



OK,服务端发布成功。

客户端:

再新建一个Java Project作为客户端

1、 将服务端的IHello接口打成jar包,提供给客户端工程,本实验中,我为了方便,在客户端创建了包和接口名完全一样的IHello接口。

2、 创建客户端调用类

[java] view plaincopy
  1. package rpctest;  
  2.   
  3. import java.net.URL;  
  4.   
  5. import javax.xml.namespace.QName;  
  6. import javax.xml.ws.Service;  
  7. import leon.rpcws.iface.IHello;  
  8.   
  9. public class TestRPC {  
  10.     public static void main(String[] args) throws Exception {  
  11.         //1: argument service URI, refer to wsdl document above  
  12.         //2: argument is service name, refer to wsdl document above  
  13.   
  14.         URL url = new URL("http://10.225.112.86:9999/ws/hello?wsdl");  
  15.         QName qname = new QName("http://impl.rpcws.leon/""HelloImplService");  
  16.         Service service = Service.create(url, qname);  
  17.         IHello hello = service.getPort(IHello.class);  
  18.    
  19.         System.out.println(hello.sayHello("Leon Su"));  
  20.     }  
  21. }  

控制台正确的打印出:Hello JAX-WS. Welcome, Leon Su
表示成功了。

另外在JDK6中集成了两个工具wsgen和import,在JDK根目录\bin下可以查看到的,这是两个很有用的工具,可以大大提高开发效率的。下面我们使用wsimport在客户端生成辅助类来调用服务端的Web Service。

1、新建一个Java Project以后,是一个“空的”的工程,什么都没有,我们也不需要服务端给我们提供SEI(Service Endpoint Interface),服务端只需要知道怎么能访问到wsdl文件就可以啦。事实上,WS从理论上也是的,客户端只需要得到服务端的wsdl文件,就足够调用服务端的WS了。

  客户端访问服务端的wsdl地址:http://10.225.112.86:9999/ws/hello?wsdl

2、打开Windows的DOS命令行,进入客户端的根目录,然后运行一下命令:

       wsimport -keep http://10.225.112.86:9999/ws/hello?wsdl 

    成功执行后,发现他给我们在客户端工程根目录下创建了一个leon\rpcws\impl目录,而且生成了两个类:HelloImplService.javaIHello.java将这两个类源文件剪切到客户端工程的源文件目录下(默认src),注意要带包剪切,也就是说两个类的包为:packageleon.rpcws.impl;

这两个类就是我们访问服务端WS的辅助类了,现在可以如下访问了:

[java] view plaincopy
  1. package leon.rpcws.test;  
  2.   
  3. import leon.rpcws.impl.HelloImplService;  
  4. import leon.rpcws.impl.IHello;  
  5.   
  6. public class HelloClient{  
  7.     public static void main(String[] args) {  
  8.         HelloImplService helloService = new HelloImplService();  
  9.         IHello hello = helloService.getHelloImplPort();  
  10.         System.out.println(hello.sayHello("Leon Su"));  
  11.     }  
  12. }  

服务端的WS发布启动,运行这个HelloClient,同样能成功的调用服务端的WS。

发现,这样访问也是很好看的哈!

好了,这就是一个简单的Web Service,这里只是同步调用,而且都是Java 类,Java Project。没有依托Web 容器。

如果要集成到Web 工程,那么就要添加配置文件,并且有种做法是把Web Service绑定成为Servlet。

分享到:
评论

相关推荐

    jax-ws webservice demo

    基于jax-ws 实现的web service client和server端的demo程序。 注:如果使用的是 myeclipse 时 server 部署到tomcat 启动的时候会报错 解决办法:找到myeclipse安装目录下的 plugins 目录里 查找 webservices-rt.jar,...

    JAX-WS自学笔记

    本人自学JAX-WS笔记和简单例子,文档标题结构如下: JAX-WS使用教程 1、JAX-WS概述 2、创建Web Service 2.1 从java开始 2.1.1 运行wsgen 2.1.2 生成的WSDL和XSD 2.1.3 目录结构 2.2 从WSDL开始 2.2.1 ...

    jax-ws 方式发布web Service 后台用Hibernate实现,前端.NET通过引用服务方式实现

    rar中包含整个项目的源码和数据库生成脚本,采用jax-ws发布Web Service服务,支持java客户端和.Net客户端调用,数据库采用oracle10g,里面有创建数据库脚本文件createTable_Oracle10g.sql,由于Hibernate映射表中会...

    JAX-WS Web service

    JAX-WS Web service 开发初步

    学习JAX-WSWebService开发

    学习JAX-WSWebService开发相关文档及Myeclipse开发方法。

    metro-jax-ws-master

    The Java API for XML Web Services (JAX-WS) is a Java programming language API for creating web services, particularly SOAP services. JAX-WS is one of the Java XML programming APIs. It's a part of the ...

    webService部署tomcat需要的jax-ws jar包

    webService部署tomcat需要的jax-ws 的完整jar包

    Jax-ws所需要的JAR包

    亲测可用,Jax-ws所需要的JAR包,拷贝到tomcat安装路径的lib里,实现了webservice发布到tomcat,赞!

    JAX-WS 2.2 RI所有相关jar包

    JAX-WS 2.2 RI 所包含的JAR包集合,包含25个JAR包,列表如下: FastInoset.jar gmbal-api-only.jar ha-api.jar javax.annotation.jar javax.mail_1.4.jar jaxb-api.jar jaxb-impl.jar jaxb-xjc.jar jaxws-api...

    MyEclipse8_0中使用 JAX-WS 部署 WebService 实例

    MyEclipse8_0中使用 JAX-WS 部署 WebService 实例 - 外衣 - 博客频道 - CSDN_NET.mht

    Jax-WS 简单实例

    Jax-WS的简单实例 Jax-WS的简单实例

    JAX-WS_WebService.rar

    JAX-WS方式开发和部署webservice应用,JAX-WS方式开发和部署webservice应用,JAX-WS方式开发和部署webservice应用,JAX-WS方式开发和部署webservice应用,JAX-WS方式开发和部署webservice应用

    JAX-WS2.0 API

    JAX-WS2.0 API

    WebService之JAX-WS自学笔记

    自己自学JAX-WS的心得,内含较为详细的讲解了简单的例子。文档目录如下: JAX-WS自学笔记 本人自学JAX-WS笔记和简单例子,文档标题结构如下: JAX-WS使用教程 1、JAX-WS概述 2、创建Web Service 2.1 从java...

    如何基于JAX-WS开发一个WebService实例

    NULL 博文链接:https://liuyunlong1229.iteye.com/blog/1678559

    jax-ws webservice简单demo

    jax-ws webservice完整demo,包含所有jax-ws 2.2jar包。

    使用JAX-WS(JWS)发布WebService

    使用JAX-WS(JWS)发布WebService 使用myeclipse开发java的webservice的两种方式 方式一: (此方式只能作为调试,有以下bug:jdk1.6u17?以下编译器不支持以Endpoint.publish方式发布document方式的soap,必须在...

    jax-rs jax-ws所需包,亲测可用

    javax.xml.ws.Service 报错需要的包,亲测可以用,直接下载在ide里buildpath一下就可以,四个jar包 ,整合了其他的jar所以配置简单

    JAX-WS开发的文件生成与部署相关全视频过程

    如果基于一个JAX-WS进行WebService开发,有很多教程,但是具体怎么更自动地生成一些文件,实现客户端与服务端的交互,都讲得不大清楚,为了让大家更方便地部署,我将服务端、客户端文件的生成与部署全过程以及测试...

    JAX-WS 2.2 完整jar包

    JAX-WS 2.2 RI 所包含的JAR包集合,包含25个JAR包,列表如下: FastInoset.jar gmbal-api-only.jar ha-api.jar javax.annotation.jar javax.mail_1.4.jar jaxb-api.jar jaxb-impl.jar jaxb-xjc.jar jaxws-api...

Global site tag (gtag.js) - Google Analytics