JAX-WS2.0 入门

接口定义:

@WebService(name = "UserService",targetNamespace = Constants.WS_NAMESPACE) public interface UserWebService { @WebResult(name = "user"public UserDTO getUser(@WebParam(name = "userId") Integer userId) throws FaultException;}
  • @WebService 必须,(name="UserService")可选,配置Service的名称,默认为类名。targetNamespace可选,默认为http:// package的倒序,可在一个自己的Constants里定义统一的namespace.
  • 默认接口的所有方法均输出为WebService。
  • @WebResult 可选,配置方法的返回值在WSDL的名称,CXF默认为result。
  • @WebParam 可选,配置参数在WSDL的名称,CX比较笨F默认为arg0,arg1....
  • @WebMethod 可选,有一个方法有此注释,则其他无注释的方法非WebService。

接口实现:

@WebService(endpointInterface = "org.springside.examples.miniservice.ws.user.UserWebService",targetNamespace = Constants.WS_NAMESPACE)public class UserWebServiceImpl
  • @WebService(endpointInterface="")  必须,指定实现的接口。

小结:

    接口与实现类都需要@WebService(targetNamespace = Constants.WS_NAMESPACE),接口还需要属性name,实现需要属性endpointInterface。

    针对笨笨,不会自动反射参数名的CXF,每个方法的参数都需要重新标注。

三、JAXB2.0入门

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

四、直接处理原始XML请求的Provider接口

JAX-WS的API有两个层次,除了常见DataBinding后调用最终Java方法外,还可以使用客户端的Dispatch与服务端Providerlinkext7.gif接口,绕过DataBinding处理,直接处理XML。

JAX-WS新增的这个功能是为复杂Web服务贴身订造的。被绕过的DataBinding,可以自行调用JAXB2.0的api完成。至于WSDL,可以写死,也可以在一个serverlet里用wsdl4j动态编写。

在Spring配置文件里,将implementor指向你的Providerlinkext7.gif,指定WSDL,然后编写Provider<T>实现invoke(T)函数。

@WebServiceProvider(portName="stockQuoteReporterPort" serviceName="stockQuoteReporter")@ServiceMode(value="Service.Mode.PAYLOAD")public class  stockQuoteReporterProvider implements Provider<DOMSource>public stockQuoteReporterProvider(){  }public DOMSource invoke(DOMSource request){    DOMSource response = new DOMSource();    ...    return response;  }}

这里ServiceMode有两种模式,PAYLOAD(soap-body)或MESSAGE(完整soap信息)

又见范型,<DOMSource>指明了数据的类型,可选DOM/SAX/StreamSource。也可以是Service.Mode.MESSAGE下的完整SOAPMessage或JMS的DataSource。

最后,需要自行拼装返回的XML结果,记得那些NameSpace不要错。

五,利用Cookie保持session

     IE会自行处理cookie,而WebService的客户端,就需要如下代码记录Cookie并在下一次请求时发送。

BindingProvider bp = (BindingProvider)port;bp.getRequestContext().put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true);

   CXF和Metro里面都是这么段代码,BindingProvider是JAX-WS中的类

转载于:https://www.cnblogs.com/littleice/archive/2010/09/05/1818571.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值