我正在尝试找到一种方法,使用拦截器将标头添加到soap fault中。有没有替代解决方案。
基本上我的肥皂请求如下。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sch="http://kp.web.com/schema/" xmlns:sch1="http://kp.web.com/Shared/schema/">
<soapenv:Header>
<sch:clientHeader>
<sch1:consumerId>12</sch1:consumerId>
</sch:clientHeader>
</soapenv:Header>
<soapenv:Body>
<sch:addRequest>
<sch:field1>-3</sch:field1>
<sch:field2>-1</sch:field2>
</sch:addRequest>
</soapenv:Body>
</soapenv:Envelope>
成功消息。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" >
<soap:Header>
<serverHeader xmlns:ns2="http://kp.web.com/schema/" xmlns="http://kp.web.com/Shared/schema/">
<ns2:consumerId>12</ns2:consumerId>
<ns2:completionCode>100</ns2:completionCode>
</serverHeader>
</soap:Header>
<soap:Body>
<addResponse xmlns="http://kp.web.com/schema/" xmlns:ns2="http://kp.web.com/Shared/schema/">
<result>-4</result>
</addResponse>
</soap:Body>
</soap:Envelope>
发生故障时
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>Faulted you sent -1 and -1</faultstring>
<detail>
<faultResponse xmlns:ns2="http://kp.web.com/schema/" xmlns="http://kp.web.com/Shared/schema/">400</faultResponse>
</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>
我希望故障响应是这样的。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sch="http://kp.web.com/schema/" xmlns:sch1="http://kp.web.com/Shared/schema/">
<soap:Header>
<serverHeader>
<ns2:consumerId>12</ns2:consumerId>
<ns2:completionCode>100</ns2:completionCode>
</serverHeader>
</soap:Header>
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>Faulted you sent -1 and -1</faultstring>
<detail>
<faultResponse xmlns:ns2="http://kp.web.com/schema/" xmlns="http://kp.web.com/Shared/schema/">400</faultResponse>
</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>
我可以使用持有人还是有任何解决方案。我不能使用拦截器,因为我需要发回消费者ID。在拦截器中,我没有请求细节。
答案 0 :(得分:1)
您可以使用SOAP Message Handlers and Handler Chains。另一种方法是使用Filters。 我使用Handler Chains来修改SOAP标头。
此link可能会有所帮助。
答案 1 :(得分:1)
你仍然可以使用拦截器。有两种方法可以从拦截器获取所需的数据:
1)在业务逻辑中,如果在(@Resource)中注入了WebServiceContext,则可以设置以后应该能够从消息中获取的属性。 (或者来自message.getExchange()。getInMessage())
2)从邮件中,您可以获取Exchange,然后获取inMessage。从该消息中,您可以获取解组的内容(inMessage.getContent(List.class))并传递到您的类中。
希望有所帮助。