【发布时间】:2018-09-13 05:10:10
【问题描述】:
我是 Spring WS 的新手,并且正在实施一项服务。 为此,我正在使用 EndPoint 类,并且可以成功接收请求并发送响应。
SOAP 请求消息包含我成功提取的 SOAP 标头中的重要信息。有些信息也必须在 SOAP 响应标头中发送,但我无法编辑或修改 SOAP 响应标头。
我需要帮助来了解创建 SOAP 响应标头和 SOAP 响应消息的最佳方式和最佳实践。
你可以在下面找到我的 EndPoint 类:
@Endpoint
public class EndpointAccountInformationInquiry {
private static final String TARGET_NAMESPACE = "http://www.sample.com/inquiry/GetAccountInformation";
@Autowired
private ServiceAccountInformation service;
@PayloadRoot(localPart = "GetAccountInformationRq", namespace = TARGET_NAMESPACE)
public @ResponsePayload GetAccountInformationRs handleRequest(@RequestPayload GetAccountInformationRq request, MessageContext messageContext) throws JAXBException, TransformerException {
/*****************************************************************
* Parse the request header and body
* Also create response body and header
*****************************************************************/
SaajSoapMessage soapRequest = (SaajSoapMessage) messageContext.getRequest();
SoapHeader soapRequestHeader = soapRequest.getSoapHeader();
SaajSoapMessage soapResponse = (SaajSoapMessage) messageContext.getResponse();
SoapHeader soapResponseHeader = soapResponse.getSoapHeader();
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
MyHeaderClassRq myHeaderClassRq = null;
JAXBContext jaxbContext = JAXBContext.newInstance(MyHeaderClassRq.class);
Iterator<SoapHeaderElement> itr = soapRequestHeader.examineAllHeaderElements();
while (itr.hasNext()) {
SoapHeaderElement ele = itr.next();
myHeaderClassRq = (MyHeaderClassRq)jaxbContext.createUnmarshaller().unmarshal(ele.getSource());
transformer.transform(ele.getSource(), soapResponseHeader.getResult());
}
/*****************************************************************
* Call the handler function
* This handler function is asynchronous
*****************************************************************/
service.handleRequest(request, msgHdrRq);
/*****************************************************************
* Set the response body and header over here
*****************************************************************/
//TODO: I want to modify my response header over here....
GetAccountInformationRs response = new GetAccountInformationRs();
return response;
}
}
【问题讨论】:
标签: java soap spring-ws endpoint