2017-01-18 6 views
1

В Spring Integration, используя входящий шлюз, знаете ли вы, как сохранить каждый запрос SOAP WS для разделенных файлов?Spring Integration inbound-gateway Как сохранить запрос soap к файлу?

В настоящее время я застрял на:

<!-- inbound --> 
<ws:inbound-gateway id="inbound-gateway" request-channel="SOAPRequestChannel" reply-channel="SOAPResponseChannel"/> 
<int:channel id="SOAPRequestChannel"> 
    <int:interceptors> 
     <int:wire-tap channel="SOAPRequestChannelForLog"/> 
    </int:interceptors> 
</int:channel> 
<int:channel id="SOAPResponseChannel" /> 
<int:channel id="SOAPRequestChannelForLog" /> 

<int:logging-channel-adapter id="logger" expression="payload" level="INFO" channel="SOAPRequestChannelForLog"/> 

Но это только регистрировать все запросы в 1 файле.

ИЛИ Мне нужно написать еще один класс, например LogToFile, который имеет способ сохранить этот запрос в файле, заменить int: logging-channel-adapter на int: service-activator? Поддерживает ли Spring безотлагательное протоколирование каждого запроса SOAP? Я прочитал справочный документ, но не смог найти ничего.

ИЛИ есть лучший способ?^_^

С уважением,

+1

Я узнал о поддержке Spring PayloadLoggingInterceptor & SoapEnvelopeLoggingInterceptor, прочитав книгу Spring Web Service 2 Поваренная книга сначала, затем проверьте ссылочный документ. Там есть^_^ –

+0

Пожалуйста, сформируйте правильный ответ на вопрос и примите его. Это поможет другим людям найти решение, и вопрос исчезнет с моей панели инструментов. Или просто удалите его :-) –

+0

Привет @Artem Bilan, на самом деле, это еще не решение, так как PayloadLoggingInterceptor использует log4j2 для регистрации полезной нагрузки. В настоящее время я не знаю, как настроить log4j2 для регистрации каждого запроса/ответа отдельно. Во всяком случае, я поставил временный ответ. –

ответ

1

Прежде всего PayloadLoggingInterceptor основан на org.apache.commons.logging.Log и это уже ваша ответственность приложения, которое целевая систему протоколирования использовать , Да, Log4j2 является одним из них. Нужно только иметь надлежащий мост от Commons Logging до целевого имплемента. Похоже, что это готово для Log4j ...

Если вы хотите сохранить каждый запрос в собственном файле, подумайте о том, чтобы использовать для этой цели <int-file:outbound-channel-adapter>.

Вам просто нужно, чтобы построить собственное содержание на основе входящего сообщения:

Transformer transformer = createNonIndentingTransformer(); 
StringWriter writer = new StringWriter(); 
transformer.transform(source, new StreamResult(writer)); 
String message = writer.toString(); 

Где source является payload сообщения после <ws:inbound-gateway>.

И вам просто нужно выяснить file name на основе этого сообщения или какой-либо другой среды.

+0

ой, я не знал, что есть int-файл: outbound-channel^_^ –

+1

Преобразованный 'int-file: outbound-channel-adapter' в ссылку для его документации –

1

Я Обнаруженное пружинной опорой PayloadLoggingInterceptor & SoapEnvelopeLoggingInterceptor читая книгу Spring Web Service 2 Cookbook на первом, а затем проверить ссылочный документ. Именно там^

Я совмещу с тем, как log4j2 войти в отдельные файлы, как описано здесь Log4j2: How to write logs to separate files for each user?

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

  • Нет связанных вопросов^_^