根据文档,我需要在拦截器的handleRequest(..)
方法中返回false。但是我的问题是我如何用jaxb2设置特定的响应?我知道应该使用messageContext.setResponse(..)
方法。但是这里不知道如何将jaxb2请求转换为MessageContext接受的WebServiceMessage。
为了更详细地阐述我的问题,我将使用早先在Stack Over Flow上提到的一些相关问题的例子here。
从给定的示例场景说,假设我想从拦截器发送已处理的订单响应以获取特定的订单ID?
@Override
public boolean handleRequest(MessageContext messageContext, Object endpoint) throws Exception {
boolean proceed = true;
SaajSoapMessage saajSoapMessage = (SaajSoapMessage) messageContext.getRequest();
SoapBody requestBody = saajSoapMessage.getSoapBody();
Object obj = jaxb2Marshaller.unmarshal(requestBody.getPayloadSource());
if (obj instanceof ConfirmOrderRequest ) {
ConfirmOrderRequest cor = (ConfirmOrderRequest ) obj;
String orderId = cor.getOrderId();
...........
.......
}
.....
}
假设我的jaxb2响应类是ConfirmOrderResponse。
答案 0 :(得分:1)
它基本上与阅读相反(虽然我没有测试过这段代码):
@Inject
SaajSoapMessageFactory mf;
...
SaajSoapMessage message = mf.createWebServiceMessage();
messageContext.setResponse(message);
MarshallingUtils.marshal(jaxbMarshaller, cor, message)
在实际端点上执行此操作会更容易,而不是在拦截器中执行此操作。