webservice是实现异构系统远程调用的技术,在java世界里有很多实现方式,如axis、xfire、cxf等。这里我们先用jdk自带的JAX-WS(Java API For XML-WebService) 来体验一下。
?
一 服务器建立
1.1 创建接口?
Web服务的接口通常称为SEI (Service Endpoint Interface)。
?
java代码:
- package?org.zttc.service;??
- ??
- import?javax.jws.WebService;??
- @WebService()??
- public?interface?IMyService?{??
- ??
- ????int?add(int?a,int?b);??
- int?minus( }??
1.2 创建实现类
Web服务的实现类通常称为SIB (Service Implementation Bean)
@WebService(endpointInterface="org.zttc.service.IMyService")??
class?MyServiceImpl?implements?IMyService?{??
????@Override??
????int?b)?{??
????????System.out.println(a+"+"+b+"="+(a+b));??
????????return?a+b;??
????}??
????????System.out.println(a+"-"+b+"="+(a-b));??
return?a-b;??
}??
1.3 创建服务
import?javax.xml.ws.Endpoint;??
class?MyServer?{??
static?void?main(String[]?args)?{??
????????String?address?=?"http://localhost:8888/ns";??
????????Endpoint.publish(address,?new?MyServiceImpl());??
运行本类,在浏览器中敲入?http://localhost:8888/ns?wsdl? 可以查看wsdl文件
二 客户端的使用
import?java.net.MalformedURLException;??
import?java.net.URL;??
import?javax.xml.namespace.QName;??
import?javax.xml.ws.Service;??
class?TestClient?{??
void?main(String[]?args)?{??
try?{??
??????????????
????????????URL?url?=?new?URL("http://localhost:8888/ns?wsdl");??
//通过Qname指明服务的具体信息??
????????????QName?sname?=?new?QName("http://service.zttc.org/",?"MyServiceImplService");??
//创建服务??
????????????Service?service?=?Service.create(url,sname);??
//实现接口??
????????????IMyService?ms?=?service.getPort(IMyService.class);??
????????????System.out.println(ms.add(12,33));??
??????????????
????????}?catch?(MalformedURLException?e)?{??
????????????e.printStackTrace();??
????????}??
????}??
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??????????? 指定包名
客户端代码
class?TestClient2?{??
void?main(String[]?args)?throws?MalformedURLException?{??
????????MyServiceImplService?msis?=?new?MyServiceImplService();??
????????IMyService?ms?=?msis.getMyServiceImplPort();??
????????System.out.println(ms.minus(29,0); background-color:inherit">11));??
四 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 定义参数名称
@WebResult(name="addResult")??
int?add(@WebParam(name="a")@WebParam(name="b") @WebResult(name="minusResult")??
int?minus(int?b);??
六 代码优先还是契约优先
6.1 传递一个对象类型
6.2 代码优先还是契约优先
6.3 SOA(service-oriented architecture)
服务类型 基于实体的服务 基于功能的服务 基于流程的服务
? 业务流程 (BPM) ERP? 不同业务系统之间的流程
? 工作流程(JBPM)??????? 同一系统内
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|