我在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解析?

最佳答案

@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();

      ...........
      .......
    }
  .....
 }

10-05 19:02