1 Reply Latest reply on Jun 16, 2008 11:50 AM by ben.lidgey

    @PostConstruct never invoked

    gturner

      I have a JAX-WS 2.0 RI based project deployed on JBoss 4.0.4.GA that I am upgrading to JBoss 4.2.1.GA with JBossWS 2.0.1.GA.

      An endpoint packaged in a war makes use of @PostConstruct, as well as some Handlers that make use of @PostConstruct as well. @PostContruct on the web service class is never invoked, however @PostConstruct on on of the Handlers does get invoked. I'll try experimenting with removing the handlers, and see if it's something like JBossWS will only invoker one @PostConstruct method per web service.

      The following port interface was generated from the WSDL:

      @WebService(name="ImportPort", targetNamespace="urn:HVODWebService")
      @HandlerChain(file="ImportPort_handler.xml")
      @SOAPBinding(parameterStyle=SOAPBinding.ParameterStyle.BARE)
      public interface ImportPort {
      
       @WebMethod
       @WebResult(name="ImportResponse",
       targetNamespace="urn:HVODWebServiceTypes",
       partName="response")
       public ImportResponse submitJob(@WebParam(name="ImportRequest",
       targetNamespace="urn:HVODWebServiceTypes",
       partName="request")
       ImportRequest request)
       throws ServiceFault;
      
      }
      


      The following implementation makes use of @PostConstruct, but never gets invoked:
      @WebService(endpointInterface="com.xo.nextgen.hvodwebservice.wsdl.ImportPort")
      public class ImportWebService implements ImportPort {
      
       @Resource
       private WebServiceContext context;
      
       @PostConstruct
       public void initialize() {
       ...
       }
      
       @PreDestroy
       public void destroy() {
       ...
       }
      
       public ImportResponse submitJob(ImportRequest request)
       throws ServiceFault {
       ...
       }
      
      }
      


      The following handler.xml is used to inject two Handlers:
      <?xml version="1.0" encoding="UTF-8"?>
      <javaee:handler-chains xmlns:javaee="http://java.sun.com/xml/ns/javaee">
       <javaee:handler-chain>
       <javaee:handler>
       <javaee:handler-name>SchemaValidation</javaee:handler-name>
       <javaee:handler-class>com.xo.nextgen.hvodwebservice.wsdl.handler.SchemaValidationHandler</javaee:handler-class>
       </javaee:handler>
       <javaee:handler>
       <javaee:handler-name>FaultNotification</javaee:handler-name>
       <javaee:handler-class>com.xo.nextgen.hvodwebservice.wsdl.handler.FaultNotificationHandler</javaee:handler-class>
       </javaee:handler>
       </javaee:handler-chain>
      </javaee:handler-chains>
      


      The following Handler interestingly does have it @PostConstruct method invoked:
      public class SchemaValidationHandler
       implements LogicalHandler<LogicalMessageContext> {
      
       @PostConstruct
       public void initialize() throws WebServiceException {
       ...
       }
      
       @PreDestroy
       public void destroy() {
       }
      
      
       public boolean handleMessage(LogicalMessageContext context) {
       ...
       }
      
       public boolean handleFault(LogicalMessageContext context) {
       ...
       }
      
       public void close(MessageContext context) {
       ...
       }
      
      }
      


      Also the exact same behavior occurs with JBoss 4.2.1.GA with it's native JBossWS 1.2.

        • 1. Re: @PostConstruct never invoked
          ben.lidgey

          I am also seeing this behaviour with JAX-WS 2.0 web services deployed to JBoss 4.2.2.

          @PostConstruct and @PreDestroy are called when the web service is run "manually" by defining an Endpoint in a main method, but not when deployed.

          Does anyone know why this is?