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

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

 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

  1. package org.zttc.service;  
  2.   
  3. import javax.jws.WebParam;  
  4. import javax.jws.WebResult;  
  5. import javax.jws.WebService;  
  6.   
  7. @WebService()  
  8. public interface IMyService {  
  9.       
  10.     @WebResult(name="addResult")  
  11.     public int add(@WebParam(name="a")int a,@WebParam(name="b")int b);  
  12.       
  13.     @WebResult(name="minusResult")  
  14.     public int minus(@WebParam(name="a")int a,@WebParam(name="b")int b);  
  15.       
  16.     @WebResult(name="loginUser")  
  17.     public User login(@WebParam(name="username")String username,@WebParam(name="password")String password);  
  18.   
  19. }  

1.2 创建实现类(SBI)

MyServiceImpl.java

  1. package org.zttc.service;  
  2.   
  3. import javax.jws.WebService;  
  4.   
  5. @WebService(endpointInterface="org.zttc.service.IMyService")  
  6. public class MyServiceImpl implements IMyService {  
  7.   
  8.     @Override  
  9.     public int add(int a, int b) {  
  10.         System.out.println(a+"+"+b+"="+(a+b));  
  11.         return a+b;  
  12.     }  
  13.   
  14.     @Override  
  15.     public int minus(int a, int b) {  
  16.         System.out.println(a+"-"+b+"="+(a-b));  
  17.         return a-b;  
  18.     }  
  19.   
  20.     @Override  
  21.     public User login(String username, String password) {  
  22.         System.out.println(username+" is logining");  
  23.         User user = new User();  
  24.         user.setId(1);  
  25.         user.setUsername(username);  
  26.         user.setPassword(password);  
  27.         return user;  
  28.     }  
  29.   
  30. }  

1.3发布服务

MyServer.java

  1. package org.zttc.service;  
  2.   
  3. import javax.xml.ws.Endpoint;  
  4.   
  5. public class MyServer {  
  6.   
  7.     public static void main(String[] args) {  
  8.         String address = "http://localhost:8888/ns";  
  9.         Endpoint.publish(address, new MyServiceImpl());  
  10.     }  
  11.   
  12. }  

注:我们在开始设计IMyService接口时,代码中并没有@WebService(),@WebResult(name="addResult")...等注解,这些注解是在发布服务的时候我们后来添加的;另外,MyServiceImpl.java中的@WebService(endpointInterface="org.zttc.service.IMyService")也是发布服务时添加的注解配置

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

  1. 在浏览器输入; 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

  1. package org.zttc.service;  
  2.   
  3. import java.net.MalformedURLException;  
  4. import java.net.URL;  
  5.   
  6. import javax.xml.namespace.QName;  
  7.   
  8. public class TestClient2 {  
  9.   
  10.     /** 
  11.      * @param args 
  12.      * @throws MalformedURLException  
  13.      */  
  14.     public static void main(String[] args) throws MalformedURLException {  
  15.         //创建访问wsdl服务地址的url  
  16.         URL url = new URL("http://localhost:7777/ns?wsdl");  
  17.         //通过Qname指明服务的具体信息  
  18.         QName sname = new QName("http://service.zttc.org/""MyServiceImplService");  
  19.         MyServiceImplService msis = new MyServiceImplService(url,sname);  
  20.         IMyService ms = msis.getMyServiceImplPort();  
  21.         System.out.println(ms.minus(29,11));  
  22.     }  
  23.   

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值