基于JAX-WS调用Web Service的Java客户端

基于JAX-WS调用Web Service的Java客户端一般采用两种方式:proxy方式以及dispatch方式。
proxy方式,proxy的步骤主要如下图所示:

一,proxy方式的调用代码片段一般如下:

URL wsdlURL = new URL("file:///D:/JAVAWorkspace/Test/WSClient/src/wsdl/prjCXFWeb.wsdl");
QName serviceQName = new QName("http://test.cxf.bt.com/", "WSCXFProviderService");
QName portQName = new QName("http://test.cxf.bt.com/", "WSCXFProviderPort");
Service service = Service.create(wsdlURL, serviceQName);
WSCXFProvider port = (WSCXFProvider) service.getPort(portQName, WSCXFProvider.class);
try{
    System.out.println(port.testWS("message"));
}catch(SOAPFaultException e){
    System.out.println(e.getFault().getFaultCode());
    System.out.println(e.getFault().getFaultString());
}
1,用工具通过WSDL文件产生一个SEI(service endpoint interface),一个java的interface,能够对应该web service提供的功能。这个interface的类名会对应到WSDL的portType名称,方法会和operation对应,方法的参数会和message以及types对应。CXF和Axis都提供这样的工具:wsdl2java。【上面的WSCXFProvider就是SEI】
2,初始化Service,指定wsdL URL和service的QName,service的QName的前一部分是命名空间,后一部分是名称,与WSDL文件中的<wsdl:service name="WSCXFProviderService">部分对应。然后通过getPort得到一个实现了SEI的实例,这个实例被叫做Proxy。它的QName与 wsdl文件中的<wsdl:port name="WSCXFProviderPort"部分对应。
3,通过SEI调用web service,传给SEI的参数是加上JAXB annotation的java类(简单类型和String不用标记)。
4,传入的参数被序列化为SOAP消息的payload(body部分的xml),这是因为service.getPort是通过proxy机制创建的,调用这个proxy的方法时,和它关联的InvocationHandler的invoke方法也会执行,invoke方法会通过JAXB把java参数序列化为XML。然后会把soap request发到服务器端。
5,返回response是后与4类似,InvocationHandler负责把XML利用JAXB反序列化为java对象。

二,Dispatch方式:dispatch有payload方式和message方式。
在payload方式中,客户端需要关心的是 SOAP消息中的body部分,可以通过把带有JAXB注解的Java对象或者XML source两种方法传递给dispatch来调用Web service。
1,payload方式通过JAXB Java对象:
示例代码:
// create Service
U
  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值