JAX-WS 内容协议的选择

JAX-WS支持SOAP1.1,SOAP1.2和HTTP。在之前所写的所有文章中,从没有涉及到跟协议相关的内容。但是JAX-WS默认使用的是SOAP1.1协议。所以之前的所有例子,均是在使用SOAP1.1.

我们也可以使用SOAP1.2,SOAP1.2跟SOAP1.1相比

  • SOAP1.2建立在XML infoset上,SOAP1.1建立在XML1.0.

  • SOAP1.2不再需要SOAPAction http heander

  • SOAP1.2的http contentType为application/soap+xml, 而SOAP1.1使用text/xml.

  • 官网上列出了9点,比较抽象,暂时还用不到。http://www.w3.org/2003/06/soap11-soap12.html 

如果使用HTTP内容协议,JAXWS就变成了restful service。

声明内容协议绑定的方式有2种,且优先级由低到高为:

  1. 在SEI实现类上使用@BindingType

  2. 在sun-jaxws.xml中声明binding

下面,使用官方提供的例子,演示一遍开启soap1.2协议的webservice。

服务器端

SEI实现类

package com.mycompany;

import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService
public class AddNumbers {
    
    @WebMethod(operationName="add")
    public int addNumbers(int number1, int number2) {
        return number1 + number2;
    }
}

sun-jaxws.xml

<?xml version="1.0" encoding="UTF-8"?>
<endpoints xmlns='http://java.sun.com/xml/ns/jax-ws/ri/runtime' version='2.0'>
    <endpoint
        name='soap'
        implementation='com.mycompany.AddNumbers'
        port='{http://mycompany.com/}soap'
        binding="http://www.w3.org/2003/05/soap/bindings/HTTP/"
        url-pattern='/soap'/>
</endpoints>

不需要运行wsgen命令,直接打包成math.war,部署到tomcat。

客户端

首先运行wsimport,产生客户端。由于wsgen默认是产生soap1.1的service,忽略soap1.2,需要添加命令参数 -extension 才可以产生soap1.2的service。

然后使用App中的main函数调用生成的客户端。

public class App {
    public static void main( String[] args ) throws IOException  {
        AddNumbers math = new AddNumbersService().getSoap();
        math.add(1, 2);
    }
}

监听网络查看消息

发出请求

<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
  <S:Body>
    <ns2:add xmlns:ns2="http://mycompany.com/">
      <arg0>1</arg0>
      <arg1>2</arg1>
    </ns2:add>
  </S:Body>
</S:Envelope>

返回应答

<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
  <S:Header/>
  <S:Body>
    <ns2:addResponse xmlns:ns2="http://mycompany.com/">
      <return>3</return>
    </ns2:addResponse>
  </S:Body>
</S:Envelope>

从上面可以看出,SOAP消息实体包在namespace 

http://www.w3.org/2003/05/soap-envelope

之中,这表明使用的是soap1.2.

转载于:https://my.oschina.net/xpbug/blog/261350

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值