Как изменить сгенерированный запрос SOAP? - PullRequest
9 голосов
/ 02 августа 2011

Я нахожусь на этапе, когда я создал выходной перехватчик, и я получаю OuputStream из сообщения SOAP.Но как я могу изменить конверт SOAP прямо перед отправкой в ​​конечную точку?Я хотел бы удалить некоторые элементы xml.

Ответы [ 3 ]

3 голосов
/ 20 февраля 2012

Обратитесь по этой ссылке для описания фаз перехватчика

https://web.archive.org/web/20131003140105/http://fusesource.com/docs/esb/4.2/cxf_interceptors/CXFInterceptPhasesAppx.html

3 голосов
/ 02 августа 2011

Одним из способов может быть получение документа и запуск его через XSLT-преобразование.

Вы можете получить документ в handleMessage вашего перехватчика, вызвав

@Override
public void handleMessage(SoapMessage message) throws Fault{
    SOAPMessage saaj = message.getContent(SOAPMessage.class);
    Document doc = saaj.getSOAPPart(); // This actually returns a SOAPPart instance but it does implement the w3c Document interface

    //play around with the document, doc is a reference so any changes made to that instance
    //will be forwarded to the rest of the chain
}

осторожно, хотя этоесли у вас есть защита, такая как подпись XML, которая должна быть выполнена для содержимого мыла, вы должны убедиться, что ваш перехватчик встречается ДО применения подписи, в противном случае вы лишите их законной силы.

Чтобы поиграться с синхронизацией перехватчика, выМожно указать этап, на котором он будет работать.CXF также должен соблюдать порядок, в котором вы будете их настраивать, если они будут выполняться на одной и той же фазе.

, но не поверьте мне на слово ... проверьте их для получения дополнительной информации

отладка с помощью исходного кода CXF также очень помогла мне понять, как это работает

---- РЕДАКТИРОВАТЬ ----

(спасибо Даниэль: -)

Чтобы это работало, вам нужно настроить SAAJOutInterceptor в вашем стеке.Вы можете добавить его вручную или просто сделать его частью вашего перехватчика. Вот пример перехватчика, который в значительной степени делает то, что вы хотите.

1 голос
/ 18 октября 2012

Я разместил ответ здесь https://stackoverflow.com/a/12948702/792313 Он основан на замене всего тела.

...