加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

webservice之实现一个基于JWS的webservice项目

发布时间:2020-12-16 21:45:44 所属栏目:安全 来源:网络整理
导读:?JAX-WS( Java6 引进) ?是SOAP协议的一个Java的 实现规范 , 这个新规范是为了简化基于SOAP的Java开发 。JAX-WS规范其实就是一组XMLweb services的 JAVA API ,JAX-WS允许开发者可以选择 RPC-oriented 或者 message-oriented 来实现自己的 web services 。


?JAX-WS(Java6引进)?是SOAP协议的一个Java的实现规范这个新规范是为了简化基于SOAP的Java开发。JAX-WS规范其实就是一组XMLweb services的JAVA API,JAX-WS允许开发者可以选择RPC-oriented或者message-oriented来实现自己的web services通过使用 Java? API for XMLWeb Services (JAX-WS) 技术设计和开发 Web 服务,可以带来很多好处,能简化 Web 服务的开发和部署,并能加速 Web 服务的开发。
在 JAX-WS中,一个远程调用可以转换为一个基于XML的协议,比如SOAP。在使用JAX-WS过程中,开发者不需要编写任何生成和处理SOAP消息的代码。JAX-WS的运行时实现会将这些API的调用转换成为对应的SOAP消息。

一 、实现一个基于JWS的webservice项目(直接使用JWS api 实现,不借助任何webservice框架)

(1)在服务器端,用户只需要通过Java语言定义远程调用所需要实现的接口SEI(service endpoint interface),并提供相关的实现类SIB(Service implementation Bean)

(2)通过调用JAX-WS的“服务发布接口-api”就可以将其发布为WebService接口
(3)在客户端,用户可以通过JAX-WS的API创建一个代理(用本地对象来替代远程的服务)来实现对于远程服务器端的调用。wsimport命令用于生成本地代理(即本地对象)。

?(4)创建客户端类测试webservice接口。

?设计流程如下:

当然 JAX-WS 也提供了一组针对底层消息进行操作的API调用,你可以通过Dispatch 直接使用SOAP消息或XML消息发送请求或者使用Provider处理SOAP或XML消息。
通过web service所提供的互操作环境,我们可以用JAX-WS轻松实现JAVA平台与其他编程环境(.net、php等)的互操作。 另外,JAX-WS同时支持基于SOAP的Web服务和REST风格的Web服务。

二、项目实例

1.设计服务器端,首先创建一个java项目,项目名称为:service_start

1.1 创建接口(SEI)

IMyService.java

[java]? view plain ?copy
  1. package?org.zttc.service;??
  2. ??
  3. import?javax.jws.WebParam;??
  4. import?javax.jws.WebResult;??
  5. import?javax.jws.WebService;??
  6. @WebService()??
  7. public?interface?IMyService?{??
  8. ??????
  9. ????@WebResult(name="addResult")??
  10. ????int?add(@WebParam(name="a")int?a,@WebParam(name="b")int?b);??
  11. ??????
  12. ????@WebResult(name="minusResult")??
  13. ????int?minus(int?b);??
  14. @WebResult(name="loginUser")??
  15. public?User?login(@WebParam(name="username")String?username,100);background-color:inherit;">@WebParam(name="password")String?password);??
  16. }??

1.2 创建实现类(SBI)

MyServiceImpl.java

@WebService(endpointInterface="org.zttc.service.IMyService")??
  • class?MyServiceImpl?implements?IMyService?{??
  • ??
  • @Override??
  • int?add(int?b)?{??
  • ????????System.out.println(a+"+"+b+"="+(a+b));??
  • ????????return?a+b;??
  • ????}??
  • int?minus( ????????System.out.println(a+"-"+b+"="+(a-b));??
  • return?a-b;??
  • public?User?login(String?username,?String?password)?{??
  • ????????System.out.println(username+"?is?logining");??
  • ????????User?user?=?new?User();??
  • ????????user.setId(1);??
  • ????????user.setUsername(username);??
  • ????????user.setPassword(password);??
  • return?user;??
  • }??
  • 1.3发布服务

    MyServer.java

    import?javax.xml.ws.Endpoint;??
  • class?MyServer?{??
  • static?void?main(String[]?args)?{??
  • ????????String?address?=?"http://localhost:8888/ns";??
  • ????????Endpoint.publish(address,?new?MyServiceImpl());??
  • }??
  • 注:我们在开始设计IMyService接口时,代码中并没有@WebService(),@WebResult(name="addResult")...等注解,这些注解是在发布服务的时候我们后来添加的;另外,MyServiceImpl.java中的@WebService(endpointInterface="org.zttc.service.IMyService")也是发布服务时添加的注解配置。

    1.3 在浏览器通过webservice uri测试服务是否发布成功

    在浏览器输入;?http://localhost:8888/ns?wsdl??

    得到wdsd格式的xml文件则说明发布成功。


    2.客户端设计,新创建一个项目,项目名称为:service_start_client (模拟异构(或不同)系统的交互)

    2.1. 生成代理类-wsimport命令用于生成本地代理(即本地对象)。

    2.1.1 使用wsimport命令根据webservice uri ?生成本地代理类

    在d:/webservice目录下新建/01文件夹用于存放生成的本地代理类。


    2.1.2 将生成的本地代理类(包括生成的包路径)拷贝到service_start_client项目的src目录下。

    2.2. 客户端测试

    TestClient2.java

    import?java.net.MalformedURLException;??
  • import?java.net.URL;??
  • import?javax.xml.namespace.QName;??
  • class?TestClient2?{??
  • ????/**?
  • ?????*?@param?args?
  • ?????*?@throws?MalformedURLException??
  • ?????*/??
  • void?main(String[]?args)?throws?MalformedURLException?{??
  • ????????//创建访问wsdl服务地址的url??
  • ????????URL?url?=?new?URL("http://localhost:7777/ns?wsdl");??
  • //通过Qname指明服务的具体信息??
  • ????????QName?sname?=?new?QName("http://service.zttc.org/",?"MyServiceImplService");??
  • ????????MyServiceImplService?msis?=?new?MyServiceImplService(url,sname);??
  • ????????IMyService?ms?=?msis.getMyServiceImplPort();??
  • ????????System.out.println(ms.minus(29,11));??
  • }??
  • (编辑:李大同)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

      推荐文章
        热点阅读