Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
2.4.2, 2.5
-
None
-
Unknown
Description
Under the following circumstances, @PostConstruct methods on classes exported as JAX-WS WebService are invoked twice:
- The application uses Spring as IoC container
- Spring's support for JSR 250 annotations is active (using the CommonAnnotationBeanPostProcessor bean or <context:annotation-config/>
- The exported bean is declared as Spring bean in the application context
- The <jaxws:endpoint> declaration refers to the declared bean (<jaxws:endpoint implementor="#beanName"/>
The last point is important:
- <jaxws:endpoint implementor="the.bean.class.name"/> does not not show the wrong behavior
- <bean id="theBean" class="the.bean.class.name"/>
<jaxws:endpoint implementor="#theBean'"/> does show the wrong behaviur
I have built an example application (based on CXF's java_first_spring_support sample) that shows the problem. It contains two classes:
1. PostConstructCalledOnce: this class is exported using the <jaxws:endpoint implementor="the.bean.class.name"/> synxtax
2. PostConstructCalledTwice.java: this class is exported using the <jaxws:endpoint implementor="#theBean'"/>
Both classes contain a postConstruct method; both method print the class's name to the console. When the application is started ("mvn -Pserver"), it can be observed that PostConstructCalledOnce#postConstruct is called once and PostConstructCalledTwice#postConstruct is called twice.
Desired behavior: both postConstruct methods should only be invoked once.
Workaround:
1. Annotate the affected classes with CXF's @NoJSR250Annotations annotation
2. Use the <jaxws:endpoint implementor="the.bean.class.name"/> syntax. Problem: This way, Spring is not able to wrap the bean with a proxy (e.g. for transaction support)
Attachments
Attachments
Issue Links
- is broken by
-
CXF-8666 Spring6 for JSR 250 annotations isn't disabled for jakarta.xml.ws.WebServiceContext
- Closed