【问题标题】:disable soap validation of a soap client using the default jaxws-ri implementation of the jdk 8使用 jdk 8 的默认 jaxws-ri 实现禁用soap客户端的soap验证
【发布时间】:2019-08-06 07:01:15
【问题描述】:

我的环境是一个带有spring boot的maven项目。 我正在使用 wsimport 从 WSDL 生成 JAX-WS 代码。 当我收到肥皂响应时,我想禁用肥皂验证。我正在使用 jdk8 的 jax-WS 的默认实现。代码如下所示:

// (1) 现在构建webservice客户端

MyWS_Service service = new MyWS_Service(null, new QName("http://...", "MyWS"));
MyWS port = service.getMyWSSOAP();

BindingProvider bindingProvider = (BindingProvider) port;

//(2) 禁用验证

       bindingProvider.getRequestContext().put("set-jaxb-validation-event-handler", "false");
// set endpoint
    bindingProvider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http//...endpointaddress");

//(3) 执行请求

respObj = port.myRequest(myRequestObj);

我在谷歌搜索,我发现了一个禁用验证的选项:

(3) bindingProvider.getRequestContext().put("set-jaxb-validation-event-handler", sc.getSocketFactory());

但我似乎 jdk8 的 jax-WS 的默认实现不接受这个选项,但是它被 apache cxf 接受。那么,如何在 jdk8 的 jax-ws 的默认实现中停用验证?有没有办法在我的项目中加载 cxf 实现,所以我使用上一个选项来停用验证?有没有办法自定义 xml 验证?

【问题讨论】:

    标签: java web-services soap jax-ws jax-ws-customization


    【解决方案1】:

    我没有找到禁用 jaxb xml 验证的解决方案,但我找到了将 apache cxf 集成到我的项目的方法,解决方案很简单,我只是将其添加到我的项目中

        <!--apache cxf implementation -->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>${apache.cxf.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>${apache.cxf.version}</version>
        </dependency>
    

    并且我强制绑定提供者禁用验证

    bindingProvider.getRequestContext().put("set-jaxb-validation-event-handler", "false");
    

    事实上,jdk 类javax.xml.ws.spi.FactoryFinder#find 将在 CLASSPATH 中搜索 javax.xml.ws.spi.Provider 文件的存在,如果不可用则回退到默认的 Sun 实现。

    我的灵感来自这个链接: force jax-ws apache cxf implementation

    所以这些都是步骤:

    1. 使用 wsimport 生成存根

    2. 将 cxf-rt-frontend-jaxws-*.jar 添加到类路径(通过 mvn 添加 cxf-rt-frontend-jaxws 工件)以强制 apache cxf 实现

    3. 禁用验证 bindingProvider.getRequestContext().put("set-jaxb-validation-event-handler", "false");

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-22
      • 2010-09-16
      • 2017-09-14
      • 1970-01-01
      • 2014-12-30
      • 1970-01-01
      相关资源
      最近更新 更多