java关于webservice的标准

来源:互联网 发布:spss如何预测未来数据 编辑:程序博客网 时间:2024/06/09 19:39

最近在搞一个利用CXF来发布RESTful风格的webservice,但被一些规范搞的有了点晕,什么jsr175,jsr181,还有jsr311...,我X,我工作几作,对这些还一无所知,可能在工作中已经用到,但确实不了解,所以下了番功能,在互联网上摸索总结一下:

  •   什么是JSR ?
Java Specification Request 定义Java规范,jsr需要先提交给jcp组织,通过后会通过专家组制定规范最后发布
     JSR(Java 规范请求)是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人          都可以提交JSR(Java 规范请求),以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准,

     如:Java Servlet规范(Servlet 2.4,JSR-154)中,定义了一系列核心的抽象概念(WEB程序处理过程中需要考虑 的各种对象)来让Java程序员编写WEB程序,包括 session,request,response等等。当程序员在编写程序的时 候可以很方便安全地与这些对象进行通讯。

JSR223描述的是这些 Java对象如何向用其它脚本语言编写的WEB页面开放,使其它语言也可以访问这些对象。 当前这个规范将被用于PHP,不过这种概念是独立于脚本语言的,也就是说在将来可能被应用于PHP之外的 其 它脚本语言。一句话,JSR223的目的是将脚本语言集成到Java平台之上。

  • JSR175介绍
import javax.jws.WebMethod;
import javax.jws.WebService;
@WebService(name="StringChangerPort", targetNamespace="http://www.test.com")
public class StringChanger {
  @WebMethod()
  public String testName(String name)
 {
 ……
  }
}
这个类的源代码和普通的JAVA代码没太多区别,但和普通JAVA代码不同的是这里面还包含了很多以@开头的代码,或者称为注释,也就是在Java 5中的新语法,JSR-175。JSR-175规范只是定义这种语法规则,而用这种语法来如何将这个类生成一个Web Service接口,则需要由JSR-181规范来决定。所以这些JSR-175的注释才真正决定了这个Web Service的行为和外观。
也许你会觉得这种语法比较奇怪,有些像普通java方法的语法,只是前面多了一个@。实际在JSR175规范的早期,该语法并不是像现在这样的。如果按早期写法,@WebService()会该写为:
/**
* @WebService(......)
*/
后来出于简化,成了现在的样子。

JSR 181是什么?

是BEA提出的用于加速Web Services开发的一种基于注释驱动的编程模式,并被批准纳入到J2EE 1.5标准。JSR181提供了一种简单的Web Service开发编程模型和标准的编译及部署方式。只需要编写JSR-175风格的注释就可以制定WSDL,消息产生属性,安全认证方式,以及特定的消息头。 
Javax.jws
Javax.jws.soap
BEA公司提出的WebService注释规范(JSR-181)
与它相关的技术:JAX-WS,JAXB,StAX,SAAJ,XML Registries,XML Digital Signature,Security in Web Tier
 注释不能避免的问题:
1.类型匹配:因为JSR-175规范注释只能是基本类型,String,Enums,比如URL,只能是字符串,要程序员自己保证该字符串是URL格式的
2.保证注释和代码匹配:比如@OneWay注释的方法就不能有返回值
3.注释之间必须匹配:比如@OneWay出现的方法上必须要有@WebMethod注释出现
 WS实现类必须满足的条件
1.实现类必须public,outer ,必须不是final、abstract
2.必须有公共默认Constructor
3.必须没有finalize方法
4.在class级别必须有@WebService指出该类是WS类
5.若类引用一个服务endpoint interface可以使用@WebService.endpointInterface,这样该类就必须实现此接口所有方法,该类除了@WebService和@HandlerChain注释之外其他所有JSR-181的注释都不能使用,而且@WebService必须不能有name属性
6.若类中没有@WebMethod注释而且没有实现endpoint interface,则所有除开从Object类中继承的public方法都被暴露成WebMethod(除开从继承来的@WebMethod.exclude也不会被暴露)

 WS 接口必须满足的条件
1.接口必须是public,outer
2.必须包含@WebService
3.可以直接或间接继承java.rmi.Remote,但不必须
4.接口中所有方法包含从父接口继承的方法都被暴露成WebMethod
5.接口可以包含其他JSR-181注释以定制Java到WSDL的映射
6.@WebService中不能设置portName,serviceName,endpointInterface的值
 WS 方法必须满足的条件
1.方法必须是public
2.方法的参数,返回值,异常必须符合JAX-WS2.0 3.6中定义的要求
3.方法可以抛出RemoteException异常,不是必须
 @SOAPBinding使用
1.使Web Service使用SOAP协议
2.可以使用在TYPE和METHOD上,作用于METHOD上其属性style必须是DOCUMENT,若是RPC则会报错
3.parameterStyle=BARE/WRAPPED
4.style=DOCUMENT/RPC
5.use=ENCODED/LITERAL
 WebService 类Mapping
1. @WebService.endpointInterface  WSDL:portType
2. @WebService.targetNamespace   WSDL:definations  targetNamespace
3. @WebService.serviceName         WSDL:service
4. wsdl:service 必须包含wsdl:port
5. wsdl:port必须和wsdl:portType 相同,但可能有不同的绑定
6. @WebService.portName     wsdl:port
7. wsdl:binding 没有对应的注释
8. @WebMethod.operationName          WSDL:operation

  • jsr311
JAX-RS: Java API for RESTful Web Services是一个Java编程语言应用程序接口,支持按照 表象化状态转变 (REST)架构风格创建Web服务Web服务[1]. JAX-RS使用了Java SE 5引入的Java 标注来简化Web服务客户端和服务端的开发和部署。

JAX-RS提供了一些标注将一个资源类,一个POJOJava类,封装为Web资源。标注包括:
@Path,标注资源类或方法的相对路径
@GET,@PUT,@POST,@DELETE,标注方法是用的HTTP请求的类型
@Produces,标注返回的MIME媒体类型
@Consumes,标注可接受请求的MIME媒体类型
@PathParam,@QueryParam,@HeaderParam,@CookieParam,@MatrixParam,@FormParam,分别标注方法的参数来自于HTTP请求的不同位置,例如@PathParam来自于URL的路径,@QueryParam来自于URL的查询参数,@HeaderParam来自于HTTP请求的头信息,@CookieParam来自于HTTP请求的Cookie。

JAX-RS的实现包括[2]:
Apache CXF,开源的Web服务框架。
Jersey, 由Sun提供的JAX-RS的参考实现。
RESTEasy,JBoss的实现。
Restlet,由Jerome Louvel和Dave Pawson开发,是最早的REST框架,先于JAX-RS出现。
Apache Wink,一个Apache软件基金会孵化器中的项目,其服务模块实现JAX-RS规范

原创粉丝点击