webservice学习笔记(一) - 基于JAX-WS的入门示例

webservice是实现异构系统远程调用的技术,在java世界里有很多实现方式,如axis、xfire、cxf等。这里我们先用jdk自带的JAX-WS(Java API For XML-WebService) 来体验一下。

 

一 服务器建立

1.1 创建接口 

Web服务的接口通常称为SEI (Service Endpoint Interface)。

 

java代码:
  1. package org.zttc.service;  
  2.   
  3. import javax.jws.WebService;  
  4.   
  5. @WebService()  
  6. public interface IMyService {  
  7.   
  8.     public int add(int a,int b);  
  9.   
  10.     public int minus(int a,int b);  
  11.   
  12. }  

 

1.2 创建实现类

Web服务的实现类通常称为SIB (Service Implementation Bean)

 

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. }  

 

 

1.3 创建服务

 

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. }  

 

运行本类,在浏览器中敲入 http://localhost:8888/ns?wsdl  可以查看wsdl文件

 

二 客户端的使用

 

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. import javax.xml.ws.Service;  
  8.   
  9. public class TestClient {  
  10.     public static void main(String[] args) {  
  11.         try {  
  12.             //创建访问wsdl服务地址的url  
  13.             URL url = new URL("http://localhost:8888/ns?wsdl");  
  14.             //通过Qname指明服务的具体信息  
  15.             QName sname = new QName("http://service.zttc.org/""MyServiceImplService");  
  16.             //创建服务  
  17.             Service service = Service.create(url,sname);  
  18.             //实现接口  
  19.             IMyService ms = service.getPort(IMyService.class);  
  20.             System.out.println(ms.add(12,33));  
  21.             //以上服务有问题,依然依赖于IMyServie接口  
  22.         } catch (MalformedURLException e) {  
  23.             e.printStackTrace();  
  24.         }  
  25.     }  
  26. }  

 

 

QName 的创建参数来自WSDL文件

<definitions targetNamespace="http://service.zttc.org/" name="MyServiceImplService">

 

三 wsimport的使用

 

cmd> wsimport -d d:/webservice/01 -keep -verbose http://localhost:8888/ns?wsdl

 

-d            指定生成的目录

-keep       保持源文件

-verbose  显示生成的详细过程

-p            指定包名

 

客户端代码

 

java代码:
  1. package org.zttc.service;  
  2.   
  3. import java.net.MalformedURLException;  
  4.   
  5. public class TestClient2 {  
  6.   
  7.     public static void main(String[] args) throws MalformedURLException {  
  8.         MyServiceImplService msis = new MyServiceImplService();  
  9.         IMyService ms = msis.getMyServiceImplPort();  
  10.         System.out.println(ms.minus(29,11));  
  11.     }  
  12.   
  13. }  

 

 

四 wsdl简单讲解

 

4.1 types

用来定义访问的类型,描述方法名、参数、返回值

http://localhost:8888/ns?xsd=1

 

4.2 message

SOAP(simple object access protocol)消息,一个方法一般对应两个,接收消息与发送消息。


4.3 portType

指明服务器的接口,并且通过operation绑定相应的in和out的消息:其中in表示参数,out表示返回值


4.4 binding

指定传递消息所使用的格式。早期会用soap encoding ,现在是literal


4.5 service

指定服务所发布的名称等基本信息

 

五 soap的使用和TCPMon

5.1 在eclipse中可以查看soap消息格式

J2EE视图->Launch the Web Services Explorer->WSDL网址

 

5.2 TCPMon

Listen Port #

客户端访问的接口,等于客户端首先将消息提交给TCPMon之后,再由TCPMon转发给服务器 

Listener

   Target Hostname

   Target Port #

服务器的地址,TCPMon转发的地址

 

5.3 定义参数名称

 

java代码:
  1. @WebResult(name="addResult")  
  2. public int add(@WebParam(name="a")int a,@WebParam(name="b")int b);  
  3.   
  4. @WebResult(name="minusResult")  
  5. public int minus(@WebParam(name="a")int a,@WebParam(name="b")int b);  

 

六 代码优先还是契约优先

6.1 传递一个对象类型

6.2 代码优先还是契约优先

6.3 SOA(service-oriented architecture)

服务类型
基于实体的服务
基于功能的服务
基于流程的服务

  业务流程 (BPM) ERP  不同业务系统之间的流程

  工作流程(JBPM)        同一系统内

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值