News

This week The apache Ignite book becomes one of the top books of leanpub

This week The apache Ignite book becomes one of the top books of leanpub.

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.

4 comments :

Ramiro Parra Juy said...

How to configure weblogic file webservices.xml to identify these services in the console? Do you have any examples? Thanks

Shamim Ahmed Bhuiyan said...

Hello Ramiro,
no i haven't any example to configure webservices.xml. sorry

Ahtesham Choudhary said...

Below is the error I faced when I followed your instructions.

java.lang.Exception: Exception received from deployment driver. See Error Log view for more detail.
Caused by: weblogic.management.DeploymentException: Neither nor can be specified when is turned on in weblogic.xml

question 1> What did you do if you faced this issue during your deployments?

question 2> Did you do anything additional that you have not mention on your blog?

Thanks in advance.
Ahtesham

Shamim Bhuiyan said...

Hello Ahtesham,
It was a few years ago and i havn't remember all the details.
From your stack trace, seems something wrong with deployment descriptor.