获取请求参数,从春WS拦截(Getting Request parameters from Spri

2019-10-18 14:25发布

我使用JAXB 2使用Spring的WS,和我有针对特定负载的拦截器,它工作正常。

在这里我的要求是从我的拦截器的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");
}

在我的端点类的相关部分是

@PayloadRoot(namespace = NAMESPACE, localPart = "confirOrderRequest")
public @ResponsePayload ConfirmOrderResponse handleConfirmOrder(
    @RequestPayload ConfirmOrderRequest confirmOrderRequest) {

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

在这里我的要求是让附带了将订单ConfirmOrderRequest在拦截器的handleRequest方法,有没有办法直接做到这一点,或者我需要做一些XML解析是什么?

Answer 1:

@VitualTroll,它帮助我一些,谢谢!

但对这个问题的回答是不正确的(至少在我的情况)。 我的新的身体handleRequest()方法会如下所示。 希望这会节省一些时间,有人在未来的人。 这里jaxb2Marshaller是我的Spring bean。

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

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


文章来源: Getting Request parameters from Spring WS Interceptor