Uploaded image for project: 'CXF'
  1. CXF
  2. CXF-3959

CXF JAX-WS: @PostConstruct methods invoked twice in Spring-based projects

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.4.2, 2.5
    • 2.4.5, 2.5.1
    • JAX-WS Runtime
    • 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

        1. cxf-postconstruct-bug.zip
          11 kB
          Rolf Schäuble

        Issue Links

          Activity

            People

              dkulp Daniel Kulp
              rschaeuble Rolf Schäuble
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: