У меня есть два приложения Spring: клиент и сервер.На серверном приложении есть сервисы, на клиентском - логика представления.Оба приложения должны взаимодействовать через веб-службы, но это не сработало из-за ошибки
Ошибка обработки запроса;Вложенное исключение: org.springframework.remoting.jaxws.JaxWsSoapFaultException: Ошибка при создании bean-компонента с именем scopedTarget.jcrSession: Session Session не активен для текущего потока;рассмотрите возможность определения прокси-объекта с заданной областью действия для этого компонента, если вы собираетесь ссылаться на него из одноэлементного объекта;Вложенное исключение - java.lang.IllegalStateException: не найден привязанный к потоку запрос: Вы ссылаетесь на атрибуты запроса вне фактического веб-запроса или обрабатываете запрос вне первоначально получающего потока?Если вы действительно работаете в веб-запросе и по-прежнему получаете это сообщение, ваш код, вероятно, выполняется за пределами DispatcherServlet / DispatcherPortlet: в этом случае используйте RequestContextListener или RequestContextFilter, чтобы выставить текущий запрос.
Onсерверное приложение Я использую сеанс JCR (сессионный компонент)
<bean name="jcrSession" factory-bean="sessionFactory" factory-method="login" scope="session" destroy-method="logout" >
<aop:scoped-proxy/>
</bean>
в web.xml серверного приложения. У меня есть
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
Когда я получаю доступ к файлам WSDL, созданным серверным приложением вбраузер, все ок.Когда я использую сервисы приложения сервера локально (например, в контроллере на приложении сервера), все также в порядке.Итак, почему эта ошибка возникает, когда я пытаюсь получить доступ к службам через веб-службы из удаленного приложения?
Update1 jcrSession
создается классом SessionFactory
.Затем этот jcrSession
автоматически подключается к объектам DAO с использованием пружин @Autowired
.
Example of simplified `JcrSessionFactory`:
public class JcrSessionFactory {
private Repository repository;
private Credentials credentials;
private Session session;
public Session login() {
session = repository.login(credentials);
return session;
}
public void logout() {
session.logout();
}
}
Кроме того, произошла та же ошибка, когда я пытался автоматически подключить службу в том же приложении и использовать ее в методе, аннотированном @PostConstruct
илив реализации InitializingBean
в методе afterPropertiesSet()