У меня есть JAX-WS WebService, который использует Spring 3 IOC.Я кодировал Spring Aspect для обработки любых исключений и обеспечения их правильной обработки в классе WebService до завершения вызова.В рамках моего аспекта я хотел бы получить доступ к локали пользователя (определенной в моем заголовке SOAP), однако я не уверен, как это сделать.
Я знаю, что могу получить локаль в обработчике, ноэто не помогает мне в моем аспекте.Я пытался внедрить WebServiceContext, но это всегда ноль.
Небольшое копание указало мне на https://issues.apache.org/jira/browse/CXF-2674, что, кажется, указывает на то, что:
- Spring намеренно не делаетвнедрить объект WebServiceContext
- , WebServiceContext - это тонкая оболочка для SOAPMessageContext
Однако, если я попытаюсь вместо этого автоматически связать SOAPMessageContext, это также завершится неудачно со следующим сообщением об ошибке:
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.xml.ws.handler.soap.SOAPMessageContext com.cws.cs.lendingsimulationservice.error.ServiceErrorInterceptor.webServiceContext; nested exception is java.lang.IllegalArgumentException: Can not set javax.xml.ws.handler.soap.SOAPMessageContext field com.cws.cs.lendingsimulationservice.error.ServiceErrorInterceptor.webServiceContext to java.util.LinkedHashMap
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:502) [spring-beans-3.0.5.RELEASE.jar:]
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:84) [spring-beans-3.0.5.RELEASE.jar:]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:282) [spring-beans-3.0.5.RELEASE.jar:]
... 21 more
Caused by: java.lang.IllegalArgumentException: Can not set javax.xml.ws.handler.soap.SOAPMessageContext field com.cws.cs.lendingsimulationservice.error.ServiceErrorInterceptor.webServiceContext to java.util.LinkedHashMap
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:146) [:1.6.0_29]
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:150) [:1.6.0_29]
at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:63) [:1.6.0_29]
at java.lang.reflect.Field.set(Field.java:657) [:1.6.0_29]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:498) [spring-beans-3.0.5.RELEASE.jar:]
... 23 more
Я полагаю, что должен быть способ, которым я могу получить доступ к этой информации изнутри аспекта, но не могу понять, как.
Если я пытаюсь ввести объект SOAPMessage
вместо этого я получаю сообщение об ошибке org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [javax.xml.soap.SOAPMessage] found for dependency
.
Может кто-нибудь указать мне правильное направление, пожалуйста?
Спасибо,
Эрик