I managed to run JaxWs 2.2.6 on Weblogic 10.3.5. I know that you are working on 10.3.3, but this solution should also work.
I followed the steps from this METRO discussion: http://www.java.net/node/695058#comment-772902
Not all steps from there are really required. So, here is a description of what I did.
Steps for a war file
1) Package your web service as a war file
2) in the military file, you need the sun-jaxws.xml file in the WEB-INF directory (for more information see here: http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/2.0/jaxws/jaxws-war.html )
3) put the wsdl and xsd file in the WEB-INF / wsdl section
4) register WSServlet and WSServletContextListener in web.xml
(for some help see here http://java.dzone.com/articles/jax-ws-deployment-five-minute )
<listener> <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class> </listener> <servlet> <servlet-name>MyWebService</servlet-name> <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>MyWebService</servlet-name> <url-pattern>/MyWebService</url-pattern> </servlet-mapping>
5) Put at least one service file in WEB-INF/classes/META-INF/services
I used javax.xml.ws.spi.Provider
and as the contents in the file (provider type class): com.sun.xml.ws.spi.ProviderImpl
you can get this file from jaxws-rt.jar
post other utility files here (for example, for different XeceresParserFactory)
reason : Weblogic generates a runtime file named: _wl_cls_gen.jar . And here he searches for service files in the first place. When weblogic detects a service file, all other files are loaded from jar files, as expected. at least that’s how it behaves
6) Create weblogic.xml set <prefer-web-inf-classes>false</prefer-web-inf-classes> to false
<?xml version="1.0" encoding="UTF-8"?> <weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.2/weblogic-web-app.xsd"> <context-root>/LogisticsWebservice</context-root> <container-descriptor> <prefer-web-inf-classes>false</prefer-web-inf-classes> </container-descriptor> </weblogic-web-app>
The structure of the military file:
WEB-INF |-> classes |-> META-INF |-> services |-> javax.xml.ws.spi.Provider |-> lib |-> alle projektspezifischen jars außer die Abhängigkeiten für JaxWS |-> wsdl |-> MyWebService.wsdl |-> MyObjects.xsd |-> sun-jaxws.xml |-> web.xml |-> weblogic.xml
Steps for Ear File
1) Pack your war file in the ear file
2) Put the JaxWs lookup class in APP-INF/classes you can use existing class files from JaxWs-rt.jar
3) Put jaxws-rt, all dependencies and xerces-2.9.1 and xalan-2.7.1 in APP-INF/lib
4) Create application.xml file
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE application PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN" "http://java.sun.com/dtd/application_1_3.dtd"> <application> <display-name>MyWebService</display-name> <module id="MyWebService"> <web> <web-uri>MyWebService.war</web-uri> <context-root>/MyWebService</context-root> </web> </module> </application>
5) Create a weblogic-application.xml file
<?xml version="1.0" encoding="UTF-8"?> <weblogic-application xmlns="http://xmlns.oracle.com/weblogic/weblogic-application" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-application http://xmlns.oracle.com/weblogic/weblogic-application/1.2/weblogic-application.xsd"> <application-param> <param-name>webapp.encoding.default</param-name> <param-value>UTF-8</param-value> </application-param> <prefer-application-packages> <package-name>com.ctc.*</package-name> <package-name>com.sun.xml.*</package-name> <package-name>com.sun.istack.*</package-name> <package-name>com.sun.msv.datatype.*</package-name> <package-name>com.sun.msv.driver.*</package-name> <package-name>com.sun.msv.grammar.*</package-name> <package-name>com.sun.msv.reader.*</package-name> <package-name>com.sun.msv.relaxns.*</package-name> <package-name>com.sun.msv.scanner.*</package-name> <package-name>com.sun.msv.util.*</package-name> <package-name>com.sun.msv.verifier.*</package-name> <package-name>com.sun.msv.writer.*</package-name> <package-name>com.sun.org.apache.xml.internal.*</package-name> <package-name>com.sun.wsit.*</package-name> <package-name>javax.jws.*</package-name> <package-name>javax.xml.bind.*</package-name> <package-name>javax.xml.soap.*</package-name> <package-name>javax.xml.stream.*</package-name> <package-name>javax.xml.ws.*</package-name> <package-name>javax.xml.activation.*</package-name> <package-name>javax.xml.annotation.*</package-name> <package-name>javax.xml.mail.*</package-name> <package-name>javax.xml.security.*</package-name> <package-name>javax.xml.registry.*</package-name> <package-name>javax.xml.rpc.*</package-name> <package-name>javax.xml.crypto.*</package-name> <package-name>org.apache.xerces.*</package-name> <package-name>javanet.staxutils.*</package-name> <package-name>jp.gr.xml.*</package-name> <package-name>org.codehaus.stax2.*</package-name> <package-name>org.glassfish.gmbal.*</package-name> <package-name>org.iso_relax.*</package-name> <package-name>org.jcp.xml.dsig.*</package-name> <package-name>org.jvnet.*</package-name> <package-name>org.relaxng.*</package-name> </prefer-application-packages> <prefer-application-resources> <resource-name>META-INF/services/*</resource-name> </prefer-application-resources> </weblogic-application>
Attention : banks located in the ear file under APP-INF/lib should not be in the military file under WEB-INF/lib
Ear File Structure:
|-> APP-INF |-> classes |-> com |-> sun |-> xml |-> ws |-> util |-> ServiceFinder.class |-> ServiceFinder$1.class |-> ServiceFinder$ComponentExWrapper.class |-> ServiceFinder$CompositeIterator.class |-> ServiceFinder$LazyIterator.class |-> lib |-> activation-1.1.jar |-> gmbal-api-only-3.1.0-b001.jar |-> ha-api-3.1.8.jar |-> istack-commons-runtime-2.4.jar |-> javax.annotation-3.1.1.jar |-> jaxb-api-2.2.4.jar |-> jaxb-impl-2.2.5.jar |-> jaxws-api-2.2.8.jar |-> jaxws-rt-2.2.6.jar |-> jsr181-api-1.0-MR1.jar |-> management-api-3.0.0-b012.jar |-> mimepull-1.8.jar |-> policy-2.3.1.jar |-> relaxngDatatype-20020414.jar |-> resolver-20050927.jar |-> saaj-api-1.3.4.jar |-> saaj-impl-1.3.18.jar |-> serializer-2.7.1.jar |-> stax-api-1.0-2.jar |-> stax-ex-1.7.jar |-> stax2-api-3.1.1.jar |-> streambuffer-1.4.jar |-> txw2-20110809.jar |-> woodstox-core-asl-4.1.2.jar |-> xalan-2.7.1.jar |-> xercesImpl-2.9.1.jar |-> xml-apis-1.3.04.jar |-> META-INF |-> application.xml |-> weblogic-application.xml |-> MyWebService.war
Now deploy your ear file to weblogic.
when you open the wsdl file http://localhost:7001/MyWebService/MyWebService?wsdl , you should see this comment:
I hope this somehow / was somehow useful.
for some debugging data, I added this to my ServiceImpl class:
private static String getImplementationInfo(String componentName, @SuppressWarnings("rawtypes") Class componentClass) { CodeSource source = componentClass.getProtectionDomain().getCodeSource(); return MessageFormat.format( "{0} implementation: {1} loaded from: {2}", componentName, componentClass.getName(), source == null ? "Java Runtime" : source.getLocation()); } public MyWebServiceResponse sayHello(MyWebServiceRequest request) throws MyWebServiceFault if (LOG.isDebugEnabled()) { com.sun.xml.ws.util.Version jaxwsVersion = com.sun.xml.ws.util.Version.RUNTIME_VERSION; LOG.debug("JaxWS major=" + jaxwsVersion.MAJOR_VERSION + "; buildVersion=" + jaxwsVersion.BUILD_VERSION + "; buildId=" + jaxwsVersion.BUILD_ID + "; svnRev" + jaxwsVersion.SVN_REVISION); LOG.debug(getImplementationInfo("JaxWS", com.sun.xml.ws.util.Version.class)); LOG.debug(getImplementationInfo("JaxB", com.sun.xml.bind.Util.class)); LOG.debug(getImplementationInfo("DocumentBuilderFactory", DocumentBuilderFactory.newInstance().getClass())); LOG.debug(getImplementationInfo("XPathFactory", XPathFactory.newInstance().getClass())); LOG.debug(getImplementationInfo("TransformerFactory", TransformerFactory.newInstance().getClass())); LOG.debug(getImplementationInfo("SAXParserFactory", SAXParserFactory.newInstance().getClass())); }
Regards Alex
PS: As a new user, I'm # m allowed to post only 2 hyperlinks, please excuse me ...