Завершение вызова аннотированной конечной точки Spring-WS с аннотацией @ Endpoint - PullRequest
0 голосов
/ 14 июля 2011

(Java 6, Spring 3, Spring-WS 2, JAXB2, Tomcat 6)

У меня есть требование записать XML-запрос и ответ в таблицу базы данных. Я хотел бы иметь возможность создать запись при получении XML-запроса и обновить такую ​​же запись, когда XML-ответ (или ошибка) готов. Есть ли способ сделать это с помощью Spring-WS 2?

Я хочу обернуть вызов конечной точки перед удалением XML-кода, чтобы я мог сохранить XML-запрос, вызвать конечную точку и, наконец, сохранить XML-ответ. Я бы использовал уникальный идентификатор, возвращаемый из БД после сохранения XML-запроса, чтобы определить запись, которую необходимо обновить с помощью XML-ответа.

Вся помощь очень ценится!

Ответы [ 2 ]

0 голосов
/ 21 июля 2011

Вы можете использовать Spring-WS EndpointInterceptors .

Реализация перехватчика.

Необходимо реализовать интерфейс org.springframework.ws.server.EndpointInterceptor, в котором предоставляются методы для обработки событий запроса и ответа.

Получив доступ к объекту MessageContext, вы можете получить сообщения с запросами и ответами (методы getRequest и getResponse).Вы также можете использовать метод setProperty для хранения информации в момент запроса, которая доступна в ответе для корреляции информации (например, идентификатор записи для обновления в БД, например).

Настройкаперехватчик.

Перехватчик может быть настроен для конкретного запроса или глобально для всех веб-служб.Я копирую некоторые настройки из документации:

<sws:interceptors>
 <bean class="samples.MyGlobalInterceptor"/>
<sws:payloadRoot namespaceUri="http://www.example.com">
 <bean class="samples.MyPayloadRootInterceptor"/>
</sws:payloadRoot>
 <sws:soapAction value="http://www.example.com/SoapAction">
  <bean class="samples.MySoapActionInterceptor1"/>
  <ref bean="mySoapActionInterceptor2"/>
 </sws:soapAction>
</sws:interceptors>

<bean id="mySoapActionInterceptor2" class="samples.MySoapActionInterceptor2"/>
0 голосов
/ 14 июля 2011

Да, вы можете зарегистрировать запрос на мыло и ответ, скопировав следующую строку в файл log4j.properties.

log4j.rootCategory=INFO, stdout
log4j.logger.org.springframework.ws.client.MessageTracing.sent=TRACE
log4j.logger.org.springframework.ws.client.MessageTracing.received=DEBUG

log4j.logger.org.springframework.ws.server.MessageTracing=DEBUG

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%p [%c{3}] %m%n

Более подробную информацию можно получить по этой ссылке http://static.springsource.org/spring-ws/sites/2.0/reference/html/common.html

...