lunes, 17 de junio de 2013

Despliegue de un cliente Axis en WebLogic

Recientemente un cliente necesitaba consumir un servicio Web en Axis que adicionalmente está protegido con una política WSS4J (token x509), dada la no interoperabilidad con Oracle Web Service Manager para esta política se desarrolló una aplicación cliente que pudiera consumir el servicio. Ahora el desafío era hacer el deploy de dicha aplicación en Oracle WebLogic Server, esta aplicación estaría expuesta como servicio Web para que pudiese ser utilizada desde un proceso BPEL.

En este caso utilizamos JDeveloper para configurar nuestra applicación, es de gran ayuda para crear los descriptores de despliegue que se requieren. Los puntos clave para lograr el deploy son:

1. Dar prioridad a las librerias requeridas en el descriptor de despliegue weblogic.xml. Si no existe lo creamos dentro del directorio WEB-INF de nuestra web application.

<?xml version = '1.0' encoding = 'UTF-8'?>
<weblogic-web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-web-app http://www.bea.com/ns/weblogic/weblogic-web-app/1.0/weblogic-web-app.xsd"
                  xmlns="http://www.bea.com/ns/weblogic/weblogic-web-app">
  <container-descriptor>
    <prefer-web-inf-classes>true</prefer-web-inf-classes>
  </container-descriptor>
</weblogic-web-app>

2. Especifiar los paquetes que debe utilizar, en este caso los de Axis y no los de WebLogic, así como los parsers de XML requeridos por el mismo axis. Creamos o modificamos el descriptor weblogic-application.xml, por ejemplo:

<?xml version = '1.0' encoding = 'UTF-8'?>
<weblogic-application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                      xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-application http://www.bea.com/ns/weblogic/weblogic-application/1.0/weblogic-application.xsd"
                      xmlns="http://www.bea.com/ns/weblogic/weblogic-application">
  <xml>
    <parser-factory>
      <saxparser-factory>org.apache.xerces.jaxp.SAXParserFactoryImpl</saxparser-factory>
      <document-builder-factory>org.apache.xerces.jaxp.DocumentBuilderFactoryImpl</document-builder-factory>
      <transformer-factory>org.apache.xalan.processor.TransformerFactoryImpl</transformer-factory>
    </parser-factory>
  </xml>
  <prefer-application-packages>
    <package-name>org.w3c.dom.*</package-name>
    <package-name>org.xml.sax.*</package-name>
    <package-name>com.ctc.wstx.*</package-name>
    <package-name>com.sun.activation.*</package-name>
    <package-name>com.sun.org.apache.*</package-name>
    <package-name>oracle.core.lmx.*</package-name>
    <package-name>oracle.core.lvf.*</package-name>
    <package-name>oracle.jdbc.*</package-name>
    <package-name>oracle.jdbc.connector.*</package-name>
    <package-name>oracle.jdbc.driver.*</package-name>
    <package-name>oracle.jdbc.internal.*</package-name>
    <package-name>oracle.jdbc.oci.*</package-name>
    <package-name>oracle.jdbc.oracore.*</package-name>
    <package-name>oracle.jdbc.pool.*</package-name>
    <package-name>oracle.jdbc.util.*</package-name>
    <package-name>oracle.jdbc.xa.*</package-name>
    <package-name>oracle.jpub.runtime.*</package-name>
    <package-name>oracle.net.ano.*</package-name>
    <package-name>oracle.net.jndi.*</package-name>
    <package-name>oracle.net.ns.*</package-name>
    <package-name>oracle.net.nt.*</package-name>
    <package-name>oracle.net.resolver.*</package-name>
    <package-name>oracle.security.o3logon.*</package-name>
    <package-name>oracle.sql.*</package-name>
    <package-name>oracle.sql.converter.*</package-name>
    <package-name>org.apache.*</package-name>
    <package-name>org.springframework.*</package-name>
  </prefer-application-packages>
</weblogic-application>

3. Hacer el deploy de la aplicación (EAR) no del proyecto, para que se lleve el weblogic-application.xml. Y no olvidemos especificar que el empaquetado del proyecto (WAR) incluya las librerías requeridas.

4. Opcionalmente, si el servicio Web que va a consumir nuestro cliente esta protegido con WSS4J, registramos el proveedor de seguridad en el JDK que utiliza nuestro servidor WebLogic (esto requiere reiniciar el servidor).

     - Colocar la libreria bcprov-jdk15-132.jar en $JDK_HOME/jre/lib/ext

      - Modificar el archivo java.security localizado en $JDK_HOME/jre/lib/security. Agregar la clase org.bouncycastle.jce.provider.BouncyCastleProvider como provider. Por ejemplo:

security.provider.10=org.bouncycastle.jce.provider.BouncyCastleProvider

     Con esta configuración evitamos el siguiente error:
org.apache.axis2.AxisFault: WSHandler: Encryption: error during message processingorg.apache.ws.security.WSSecurityException: An unsupported signature or encryption al
gorithm was used (unsupported key transport encryption algorithm: No such algorithm: http://www.w3.org/2001/04/xmlenc#rsa-1_5)


Aqui les dejos algunos sitios que me ayudaron a realizar el deploy:
http://techasilo.blogspot.mx/2007/04/call-to-web-service-has-become-nerve-of.html
http://blog.guident.com/2011/12/deploying-axis2-applications-on-oracle-weblogic-server/
http://mail-archives.apache.org/mod_mbox/ws-wss4j-dev/200609.mbox/%3c4e3ba4880609010756i59e0a5b6s12d875f0b2263c1f@mail.gmail.com%3e

No hay comentarios:

Publicar un comentario