我正在从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));
但似乎没有任何影响......如果缺少强制值,服务器端仍然会出现错误。
我希望它能够在客户端捕获并且永远不会到达服务器......
答案 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");