JBoss 6.0 Final is shipped with JBoss WS (Apache CXF stack by default), I know that I can replace the default implementation with the respective JBoss WS Native or Metro versions from JBossWS downloads site.
The problem is, I've a client jar library (binaries only unfortunately) which consumes some proprietary SOAP Web Services. When I use the client API from a Web Application deployed to JBoss I'm getting a lot of intermittent SOAP Faults (tested with both Apache CXF and JBoss Native stacks).
Since the same Web Services seems to work fine when running from a standalone jar file (with no third party JAX-WS implementations), I was thinking about disabling the JBoss WS stack in favor of the native JAX-WS RI stack provided with Java SE 6.
I know that JBoss Metro WS stack should be close enough to what is shipped with Java SE 6, but I would really appreciate if I could go with the native Java SE version.
So, is this feasible? Can someone point the way?
Here is a procedure to remove JBossWS-CXF client and server stack from JBoss 6.1.0.Final.
Replace <configuration>
by the server configuration you use, probably default
.
common/deploy/jbossws-console.war lib/endorsed/jbossws-cxf-factories.jar server/<configuration>/deploy/jbossws-console-activator-jboss-beans.xml server/<configuration>/deployers/jbossws.deployer/ server/<configuration>/deployers/jbossws-jaxrpc.deployer/
server/<configuration>/deployers/switchboard-jboss-beans.xml
<entry> <key>javax.xml.ws.WebServiceContext</key> <value><inject bean="org.jboss.switchboard.WebServiceContextResourceProvider"/></value> </entry> ... and ... <inject bean="org.jboss.switchboard.WebServiceRefResourceProvider"/>
As a result, the WebService server stack is no longer available, neither the jbossws console.
To be sure to use JAX-WS Metro implementation from your JavaSE version running JBoss, you have also to remove from Class-Path any jar related to CXF and JAX-WS:
lib/endorsed/jboss-jaxws-api_2.2_spec.jar lib/endorsed/stax-api.jar lib/endorsed/jboss-jaxb-api_2.2_spec.jar common/lib/jboss-jaxb-api_2.2_spec.jar common/lib/jboss-jaxws-api_2.2_spec.jar common/lib/jboss-jaxrpc-api_1.1_spec.jar common/lib/cxf-*.jar lib/wstx-lgpl.jar lib/jaxb-impl.jar lib/jaxb-xjc.jar
At that point, JBoss 6.1 even starts faster.
For further researchers, I wanted to share my additional steps on how to remove all old JAXB and CXF from JBoss 6.1 and add new versions of them (it's enhanced Yves Martin answer):
To be removed:
common/deploy/jbossws-console.war
server/<configuration>/deploy/jbossws-console-activator-jboss-beans.xml
server/<configuration>/deployers/jbossws.deployer/
server/<configuration>/deployers/jbossws-jaxrpc.deployer/
client/cxf-*.jar
client/jaxws-*.jar
client/jaxb-impl.jar
client/jaxb-xjc.jar
client/wstx-lgpl.jar
client/jbossws-*.jar
client/stax-api.jar
client/activation.jar
lib/wstx-lgpl.jar
lib/jaxb-impl.jar
lib/jaxb-xjc.jar
common/lib/jboss-jaxb-api_2.2_spec.jar
common/lib/jboss-jaxws-api_2.2_spec.jar
common/lib/jboss-jaxrpc-api_1.1_spec.jar
common/lib/cxf-*.jar
common/lib/jaxws-*.jar
common/lib/jbossws-*.jar (except common/lib/jbossws-spi.jar)
lib/endorsed/activation.jar
lib/endorsed/jboss-jaxb-api_2.2_spec.jar
lib/endorsed/jbossws-cxf-factories.jar
lib/endorsed/jboss-jaxws-api_2.2_spec.jar
lib/endorsed/stax-api.jar
From the configuration file at: server//deployers/switchboard-jboss-beans.xml
remove following lines:
<entry>
<key>javax.xml.ws.WebServiceContext</key>
<value><inject bean="org.jboss.switchboard.WebServiceContextResourceProvider"/></value>
</entry>
<inject bean="org.jboss.switchboard.WebServiceRefResourceProvider"/>
If you want to upgrade JAXB + CXF to 2.6.3, add these libraries:
lib/jaxb-xjc-2.1.13.jar
lib/endorsed/activation-1.1.1.jar
lib/endorsed/jaxb-api-2.2.6.jar
lib/endorsed/jaxws-api-2.2.6.jar
lib/endorsed/stax2-api-3.1.1.jar
lib/endorsed/saaj-api-1.3.4.jar
lib/endorsed/cxf-api-2.6.3.jar
common/lib/cxf-api-2.6.3.jar
If you have Java 6 project, new JAXB will infer with this one from JRE, so we have to endorse the new version. Here's how to do it for maven:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<maxmem>512m</maxmem>
<compilerArguments>
<endorseddirs>${project.build.directory}/endorsed</endorseddirs>
</compilerArguments>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<forkMode>once</forkMode>
<argLine>-Djava.endorsed.dirs=${project.build.directory}/endorsed</argLine>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>${jax.version}</version>
</artifactItem>
<artifactItem>
<groupId>javax.xml.ws</groupId>
<artifactId>jaxws-api</artifactId>
<version>${jax.version}</version>
</artifactItem>
</artifactItems>
<outputDirectory>${project.build.directory}/endorsed</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${cxf.version}</version>
<configuration>
<fork>once</fork>
<additionalJvmArgs>-Djava.endorsed.dirs=${project.build.directory}/endorsed</additionalJvmArgs>
<!-- rest of the normal codegen configuration options -->
</configuration>
<dependencies>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>${jax.version}</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-xjc</artifactId>
<version>${jax.version}</version>
</dependency>
</dependencies>
</plugin>
On your IDE you have to tell it to compile using new JAXB libraries. In case of IDEA you can do it here:
IDEA -> Settings -> Compiler -> Java Compiler
in "Additional command line parameters" add:
-endorseddirs /<your_absolut_path_to_project>/target/endorsed/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With