Friday

Configure apache CXF project to deploy on Weblogic server 10.3.2.0

Last week we have migrated our one of web service project on apache CXF. Apache CXF provides simplified security package to authentication and authorization for web services. As usual we decided to use Weblogic as our favorite application server to deploy and run migrated service. This blog post is consist of a few tips to configure properly Apache CXF project to deploy on Weblogic server. Most of all tips i have got from the following link JAX-WS, CXF and SAAJ on Oracle Weblogic 10.3, but it was not sufficient to deploy successfully, a few additional task needed to deploy Apcahe CXF on Weblogic. This current post is all about this tips.

First of all we must configure and prepare Apache CXF project to deploy.
1) Add the following fragment of xml configuration to you weblogic.xml
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>

which will force weblogic to use library from WEB-INF/lib. By default Apache CXF uses geronimo jax-ws implementations to execute webservices.
2) Add javax.jws.* package name into prefer-application-packages as follows:
<wls:prefer-application-packages>
<wls:package-name>antlr.*</wls:package-name>
<wls:package-name>org.apache.*</wls:package-name>
<wls:package-name>org.joda.time.*</wls:package-name>
<wls:package-name>javax.jws.*</wls:package-name>
</wls:prefer-application-packages>

3) Exclude a few libraries from WEB-INF/lib:
saaj-api and it's implementation saaj-impl. Because of conflict with weblogic saaj-api-1.1.jar. You can exclude these two jars through maven dependencies exclusion feature or through maven-war-plugin.
to avoid this following error
"weblogic.xml.jaxp.RegistrySAXParserFactory cannot be cast to javax.xml.parsers.SAXParserFactory"
you should also exclude xml-apis-*.jar from WEB-INF/lib directory.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webResources>
<resource>
<directory>src/main/webapp</directory>
<filtering>true</filtering>
</resource>
</webResources>
<attachClasses>true</attachClasses>
<packagingExcludes>WEB-INF/lib/saaj-api*.jar, WEB-INF/lib/xml-apis-*.jar</packagingExcludes>
</configuration>
</plugin>

After archiving into ear archive it's time to configure Weblogic system properties to deploy.
In a few words you should add the following system property
"-Djavax.xml.soap.MessageFactory=com.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl" into Weblogic startup script or setDomainEnv.sh.
This will enable the JSE6 saaj implementation for Weblogic server.
Post a Comment