2009-11-16 4 views
1

Мы работаем над одним проектом, в котором мы используем JaxWSProxyFactoryBean, предоставляемый средой CXF, для вызова веб-сервисов. Я использую конфигурацию SPRING для создания клиентов, а не для использования API непосредственно в коде. Я также устанавливаю свойство maintain_session, чтобы убедиться, что сеанс поддерживается клиентами WS.JaxWSProxyFactoryBean sharing HTTP-сеанс

< JAXWS: идентификатор клиента = адрес "userAuthenticationServiceClient1" = "$ {application.deployment.url}/UserAuthentication" ServiceClass = "com.authentication.webservice.IUserAuthenticationService" абстрактные = "истина" > < JAXWS: Свойства > < ввод ключа = "javax.xml.ws.session.maintain" > < тип значения = "java.lang.Boolean" > истинная </значение > </входа > </JAXWS: свойства > </JAXWS: клиент >

Но я обнаружил, что сеанс не сохраняется в различных случаях WebServices. Чтобы сделать его более понятным Если есть прокси-клиенты, такие как wc1, wc2, wc3. Все операции, вызываемые в wc1, будут иметь свой сеанс, а wc2 создаст новый сеанс. Может ли кто-нибудь сообщить мне, какие настройки мне нужно сделать, чтобы все клиенты ws разделили сессию?

ответ

2

Действительно, для этого не существует «автоматического» способа. Каждый прокси-сервер службы полностью отделен от других. Тем не менее, вы можете «вручную» скопировать куки сессии с одного прокси-сервера на другой с помощью:

HTTPConduit conduit1 = (HTTPConduit)ClientProxy.getClient(p1).getConduit(); HTTPConduit conduit2 = (HTTPConduit)ClientProxy.getClient(p2).getConduit(); conduit2.getCookies().putAll(conduit1.getCookies());

Это необходимо скопировать все куки от одного к другому.

+0

эй даниэль, спасибо, что ответил на мое сообщение. Но его невозможно использовать выше API, так как я уже упоминал, что я использую управляемые bean-элементы SPRING. Ни один из созданных мной классов не знает, вызывают ли они какой-либо веб-сервис, поскольку инъецируются экземпляры, созданные jaxws: client. Я хотел иметь общий способ сделать это, не информируя свои классы о том, где они живут :) – CuriousMind

+0

Ah. В этом случае единственное, что я могу придумать, - написать пару перехватчиков, чтобы это сделать. Перехватчик «In», который записывал бы все файлы cookie сеанса и «Out», чтобы добавлять/обновлять файлы cookie сеанса. Настройте их для всех объектов . –