2013-09-06 5 views
1

Я использую Jaxb 2 с Spring WS, и у меня есть перехватчик, который направлен на конкретную полезную нагрузку, и он отлично работает.Получение параметров запроса из Spring WS Interceptor

Здесь мое требование состоит в том, чтобы прочитать параметры запроса из метода 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) { 

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

Вот мое требование, чтобы получить OrderId, который поставляется с ConfirmOrderRequest в методе handleRequest перехватчика, есть способ сделать это напрямую , или мне нужно сделать синтаксический анализ XML для этого?

+0

это может помочь http://stackoverflow.com/questions/17735583/how-to-parse-soap-message-into-jaxb-classes – VirtualTroll

ответ

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

     ........... 
     ....... 
    } 
    ..... 
} 
Смежные вопросы