在客户端启用SOAP模式验证?

时间:2014-04-28 15:18:32

标签: java-ee soap xsd jax-ws cxf

我正在从JEE6-client调用SOAP Web服务,例如:

import javax.xml.ws.Service;
...
Class<T> serviceClass;
...
Service service = Service.create(url, new QName(namespaceURI, serviceName));
T servicePort = (T) service.getPort(serviceClass);

如何在客户端上启用架构验证(在将SOAP请求发送到服务器之前)?

我可以在java代码中执行此操作,还是需要xml-config等?

编辑 - 我也试过这个修改:

boolean inbound = true;
boolean outbound = true;
T servicePort = (T) service.getPort(serviceClass, new SchemaValidationFeature(inbound, outbound));

但似乎没有任何影响......如果缺少强制值,服务器端仍然会出现错误。

我希望它能够在客户端捕获并且永远不会到达服务器......

1 个答案:

答案 0 :(得分:3)

根据documentation为客户端启用架构验证,您需要将jaxws属性:schema-validation-enabled设置为true。示例XML配置:

<jaxws:client name="{http://apache.org/hello_world_soap_http}SoapPort"
    createdFromAPI="true">
    <jaxws:properties>
        <entry key="schema-validation-enabled" value="true" />
    </jaxws:properties>
</jaxws:client>

或者是java代码等价:

((BindingProvider)port).getRequestContext().put("schema-validation-enabled", "true");