我的一个SOAP Web服务的使用者无法读取SOAP错误(模式验证),因此他希望我们发送" Ok = false"而是使用失败的架构验证消息进行响应。
我不确定我们是否可以通过任何方式自定义拦截器来生成错误响应,而不是SOAP错误。
我现在使用拦截器来产生故障,如下所示
@org.apache.cxf.interceptor.InInterceptors(interceptors = {"com.xxx.piano.services.interceptors.RequestParserInterceptor",
"com.xxx.piano.services.interceptors.RequestInterceptor"})
@SchemaValidation(type = SchemaValidation.SchemaValidationType.IN)
@org.apache.cxf.interceptor.OutFaultInterceptors(classes = RequestParsingValidator.class)
截至今天,我遇到了如下错误
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>[City is empty !] </faultstring>
</soap:Fault>
</soap:Body>
</soap:Envelope>
虽然我想要以下内容:
<ns3:XXXServiceTypeResponse>
<OK>false</OK>
<Error>
<Message>Duplicate Product Individual Identifier.</Message>
<TechnicalDescription>Postal Code Missing</TechnicalDescription>
<ErrorCode>E0022</ErrorCode>
</Error>
<ns3:ResponseID>01202662-0010-0001-0001-4617844469</ns3:ResponseID>
</ns3:XXXServiceTypeResponse>
请帮忙。
答案 0 :(得分:0)
使用拦截器可以自定义响应,但我不建议返回WSDL中不存在的消息,即客户端和服务器之间的合同。
相反,它会提出答案有错误代码而不是生成肥皂错误。通过这种方式,您的客户端也可以自动生成其编程语言的代码。
每条消息都有状态(ok),错误详细信息以及状态正确时的常规响应
<ns3:XXXServiceTypeResponse>
<OK>false</OK>
<Error>
<Message>Duplicate Product Individual Identifier.</Message>
<TechnicalDescription>Postal Code Missing</TechnicalDescription>
<ErrorCode>E0022</ErrorCode>
</Error>
<ns3:ResponseID>01202662-0010-0001-0001-4617844469</ns3:ResponseID>
<ns3:ResponseIfOk />
</ns3:XXXServiceTypeResponse>