Apache CXF Writing a service with Spring notes

This example will lead you through creating your first service with Spring. You'll learn how to:
    * Set up your build for CXF
    * Writing a simple JAX-WS service 【设计与开发 JAX-WS 2.0 Web 服务】
    * Set up the HTTP transport


具体参考 http://cxf.apache.org/docs/writing-a-service-with-spring.html

可以采用以下两种方法之一开发 Web 服务:
* 契约优先:从 WSDL 契约着手,生成 Java 类来实现服务。
* 代码优先:从 Java 类着手,使用 Annotation 来生成 WSDL 文件和 Java 接口。
[Developing a Service-Java First Development]

JAX-WS2.0 入门   (JAX-WS : Java API for XML Web Services)
接口定义:

1.@WebService(name = "UserService",targetNamespace = Constants.WS_NAMESPACE)   
2. public interface UserWebService {   
3. @WebResult(name = "user")   
4. public UserDTO getUser(@WebParam(name = "userId") Integer userId);   
5.}  


* @WebService 必须,(name="UserService")可选,配置Service的名称,默认为类名。targetNamespace可选,默认为 http:// package的倒序,可在一个自己的Constants里定义统一的namespace. 如http://www.iteye.com
* 默认接口的所有方法均输出为WebService。
* @WebResult 可选,配置方法的返回值在WSDL的名称,CXF默认为result。
* @WebParam 可选,配置参数在WSDL的名称,CX比较笨F默认为arg0,arg1....
* @WebMethod 可选,有一个方法有此注释,则其他无注释的方法非WebService。

接口实现:
1.@WebService(endpointInterface = "com.javaeye.test.ws.user.UserWebService",targetNamespace = Constants.WS_NAMESPACE)   
2.public class UserWebServiceImp  


* @WebService(endpointInterface="")  必须,指定实现的接口。

* 在ServiceImpl中,最好命名@ServiceName 和 @PortName,否则默认以此类名来命名Service,如UserWebServiceImp,比较难看。
小结:
    接口与实现类都需要@WebService(targetNamespace = Constants.WS_NAMESPACE),接口还需要属性name,实现需要属性endpointInterface。
    CXF不会自动反射方法的参数名,每个方法的参数都需要重新标注。



JAXB2.0入门   (JAXB : Java Architecture  for XML Binding)

1.@XmlType(name = "User")   
2.public class UserDTO {   
3.}  


* JAXB的智能化较高,基本上不需要手工映射。
* 默认的@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER )根据公共getter/setter与公共属性反射
  (XmlAccessType.PROPERTY根据getter/setter反射,XmlAccessType.FIELD 根据成员变量反射)
* 如果有需要注释@XMLElement,@XMLAttribute,需配合XmlAccessorType定义,默认的PUBLIC_MEMBER,需要在getter/setter上定义,如果要写在成员变量上定义,则XmlAccessType改为FIELD。
* 用@XmlType定义 DTO名,否则名称默认小写。@XmlType(name = "User") 指定WSDL上的类型名称。
* @XmlTransient 可以注释某个字段,取消该字段的反射。

其他:

JAX-RPC 2.0 renamed to JAX-WS 2.0

jnn 写道
JAX-WS2.0 (JSR 224 )是Sun新的web services协议栈,是一个完全基于标准的实现。在binding层,使用的是the Java Architecture for XML Binding (JAXB, JSR 222 ),在parsing层,使用的是the Streaming API for XML (StAX, JSR 173 ),同时它还完全支持schema规范。
引自:JAX-WS

【转载地址】
http://alimama.iteye.com/blog/841896

【总结】
http://tonylian.iteye.com/blog/680916

猜你喜欢

转载自hck.iteye.com/blog/1754315