我正在使用带有Spring WS的Jaxb 2,并且我有一个拦截器,它被定向到特定的有效负载,它工作正常。
这里我的要求是从拦截器的handleRequest方法中读取请求参数。我知道这应该是相当直接的。但是无法想出一种方法来读取请求参数。目前我的handleRequest方法如下所示。
@Override
public boolean handleRequest(MessageContext messageContext, Object endpoint)
throws Exception {
boolean proceed = true;
SaajSoapMessage saajSoapMessage =
(SaajSoapMessage) messageContext.getRequest();
SOAPMessage soapMessage = saajSoapMessage.getSaajMessage();
Document doc = saajSoapMessage.getDocument();
Element element = doc.getElementById("request");
}
我的Endpoint类的相关部分是
@PayloadRoot(namespace = NAMESPACE, localPart = "confirOrderRequest")
public @ResponsePayload ConfirmOrderResponse handleConfirmOrder(
@RequestPayload ConfirmOrderRequest confirmOrderRequest) {
...........
}
这里我的要求是获取拦截器handleRequest方法中ConfirmOrderRequest
附带的orderId,有没有办法直接执行此操作,还是需要为此进行一些XML解析?
答案 0 :(得分:3)
@VitualTroll,它对我有所帮助,谢谢!
但对这个问题的回答是不正确的(至少在我的情况下)。我的新handleRequest()
方法的正文如下所示。希望这将为其他人节省一些时间。这里的jaxb2Marshaller是我的春豆。
@Autowired
private Jaxb2Marshaller jaxb2Marshaller;
@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();
...........
.......
}
.....
}