Web Service annotated with @PostConstruct - wrong order w.r.t Listener
mwnorman Jun 28, 2010 3:18 PMI have a Web Service:
//javase imports
import java.io.InputStream;
import java.io.StringReader;
import org.xml.sax.InputSource;
//java eXtension imports
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.servlet.ServletContext;
import javax.xml.namespace.QName;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPFactory;
import javax.xml.soap.SOAPFault;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
import javax.xml.transform.dom.DOMSource;
import javax.xml.ws.Provider;
import javax.xml.ws.ServiceMode;
import javax.xml.ws.WebServiceProvider;
import javax.xml.ws.soap.SOAPFaultException;
import static javax.xml.ws.Service.Mode.MESSAGE;@WebServiceProvider( wsdlLocation = "WEB-INF/wsdl/eclipselink-dbws.wsdl", serviceName = "simpleService", portName = "simpleServicePort", targetNamespace = "urn:simpleService" ) @ServiceMode(MESSAGE) public class SimpleProvider implements Provider<SOAPMessage> { @PostConstruct public void init() { System.out.println("*****************init"); ClassLoader parentClassLoader = Thread.currentThread().getContextClassLoader(); InputStream eclipseLinkStream = parentClassLoader.getResourceAsStream( "/META-INF/eclipselink-dbws-or.xml"); if (eclipseLinkStream != null) { System.out.println("/META-INF/eclipselink-dbws-or.xml = " + eclipseLinkStream.toString()); } ServletContext sc = ProviderListener.SC; if (sc == null) { System.out.println("servlet context is null"); } else { InputStream schemaStream = sc.getResourceAsStream("/WEB-INF/wsdl/eclipselink-dbws-schema.xsd"); System.out.println("WEB-INF/wsdl/eclipselink-dbws-schema.xsd = " + schemaStream.toString()); } }
...
I also have a ServletContextListener:
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class ProviderListener implements ServletContextListener { public static ServletContext SC = null; public ProviderListener() { super(); } public void contextInitialized(ServletContextEvent sce) { System.out.println("*****************ServletContext initialized"); SC = sce.getServletContext(); } public void contextDestroyed(ServletContextEvent sce) { // no-op } }
When I deploy to Glassfish, WebLogic and WebSphere, the order of execution is: Listener, then @PostConstruct
However, when I deploy to JBoss 5.10 (w Metro), the order is @PostConstruct then Listener.
Is this a known issue, or is there a workaround?
Thanks in advance,
Mike Norman