Перехват и запись входящего сообщения в конечную точку - PullRequest
0 голосов
/ 05 ноября 2019

Я хочу зарегистрировать входящий SOAP в моей настройке bean-компонентов, но я не знаю, как перехватить запрошенное тело.

Я узнал, если я добавлю ? DataFormat = MESSAGE в мой CxfEndpoint, он показывает ввод XML, но испортил dataFormat, который предоставляет addBookTransformer .

<from uri="cxf:bean:CxfEndpoint?dataFormat=MESSAGE" /> 

Это мои настройки

<cxf:cxfEndpoint id="CxfEndpoint"
    address="/host/addBook"
    endpointName="a:addBookEndpoint"
    serviceName="a:addBookService"
    wsdlURL="wsdl/add-book.wsdl"
    serviceClass="com.library.AddBookEndpoint"
    xmlns:a="http://library.com"/>

<bean id="addBookTransformer" class="com.library.bookshelf.AddBookTransformer"/>

<camelContext xmlns="http://camel.apache.org/schema/spring">
    <route id="addBook" streamCache="true">
        <from uri="cxf:bean:CxfEndpoint" />
        <process ref="addBookTransformer" />
        <log message="${body}"/>
    </route>
</camelContext>

Есть ли способ получить и зафиксировать данные входящего почтового запроса?

Ответы [ 2 ]

2 голосов
/ 05 ноября 2019

Вы можете сделать прослушку для этого

<camelContext xmlns="http://camel.apache.org/schema/spring">
    <route id="addBook" streamCache="true">
        <from uri="cxf:bean:CxfEndpoint" />
        <process ref="addBookTransformer" />
        <wireTap uri="direct:tap"/>
        <to uri="mock:result"/>
        <log message="${body}"/>
    </route>
</camelContext>

Копия обмена отправляется на direct:tap, который вы можете прочитать и обработать, сколько захотите.

Например, мы могли бы простовойти в сообщение, как это. Вы также можете добавить другой процессор.

<route id="wiretapped" streamCache="true">
     <from uri="direct:tap" />
     <log message="${body}"/>
</route>

Вот документация для этого.

0 голосов
/ 05 ноября 2019

То, что вы ищете, является очень хорошо известным требованием. Шаблон, который обеспечивает решение, является Фильтром и существует как концепция в самых ранних версиях спецификации J2EE. В те времена, когда мы (динозавры) писали сервлеты, вы могли добавить фильтр к вашему сервлету, который перехватывает оба: запрос до того, как он попадет в ваш сервлет, и ответ после того, как он сгенерирован вашим сервлетом, но до того, как он будет отправлен на сторону клиента. ,В вашем фильтре вы можете регистрировать информацию, перенаправлять ее в другое место назначения, отказывать в ней или делать все что угодно. Та же концепция остается неизменной. Вам нужно определить фильтр для всех или некоторых ваших конечных точек и в вашем фильтре выполнить регистрацию. Если вы работаете с загрузкой Spring, вот статья, которая описывает, как добавить фильтры для конечных точек в Spring Boot: Как определить фильтр загрузки Spring?

...