LYWS Dev: Codificacion y publicacion

Last modified by admin on 2026/07/18 17:45

Libertya Web Services

Codificación y publicación

Introducción

El presente documento detalla los pasos necesarios para crear/ampliar y publicar el conjunto de operaciones soportadas por LYWS / LYWSE.

Instalación Axis 1.4 en Jboss de Libertya

Estos pasos son unicamente necesarios para basarnos en un Axis 1.4 vacío. Se pueden omitir directamente utilizando el axis.war de LYWS comprendido en los releases de libertya, el cual cuenta con las operaciones ya implementadas.

  1. Descargar Axis 1.4 (axis-bin-1_4.zip) y descomprimir. Lo unico que nos intersa aquí es el directorio /webapps/axis, el cual contiene la aplicación web. Tal como se comenta previamente, simplemente se puede tomar la versión de LYWS más reciente y trabajar sobre ésta. La misma se aloja en SourceForge: https://sourceforge.net/projects/libertya/files/components/lyws/. Esta opción es ideal dado que ya cuenta con las librerías adicionales necesarias para todas las operaciones, como por ejemplo: commons-codec-1.9.jar)
  2. Copiar el directorio indicado en el paso anterior en /ServidorOXP/jboss/server/openXpertya/deploy, y renombrar axis por axis.war (extensión de aplicación web).
  3. Eliminar de axis.war/WEB-INF/lib los archivos commons-logging-1.0.4.jar y log4j-1.2.8.jar, dado que JBoss ya tiene sus propias versiones, y podría haber conflictos posteriores star
  4. Con esto ya tenemos el Axis listo. Si ahora ejecutamos /ServidorOXP/utils/IniciarServidor.sh, accediendo a http://localhost:8080/axis/ veríamos la pantalla inicial de Axis. Sin embargo todavía no hemos registrado ningún servicio (si estamos trabajando con un axis “limpio”).
  5. star SOLO PARA LIBERTYA r658 o posterior: Eliminar también el archivo axis.jar, dado que el mismo ya se encontrará precargado según lo indicado en jboss-service.xml. Ver apartado: Importante: Solución a error de clases al invocar un WS desde la ejecución de LYWS.

Incorporación de LY y LYWS en Eclipse.

  1. Hacer checkout de Libertya y LYWS.
  2. Incorporar ambos proyectos a Eclipse.
  3. Compilar y verificar que no se presenten errores. Es posible que LYWS todavía presente errores de compilación por archios todavía no existentes en el directorio build (tener en cuenta que el Java Build Path del proyecto, bajo Libraries se referencia al Class Folder build/classes el cual es generado mediante el ETC (ver luego)).

Publicación de servicios LYWS y LYWSE en Axis

Generar los External Tool Configuration (ETC)

El proyecto org.libertya.ws contiene un archivo build.xml que ayuda a la publicación de los servicios. Es necesario configurar la forma de ejecución sobre el mismo mediante algunos Ant Build:

  1. Nuevo External Tool Configuration. Ant Build → BuildAll (genera todos los binarios de LYWS)
    1. Main → BuildFile: ${workspace_loc:/org.libertya.ws/src/build.xml}
    2. Targets → build-all
    3. Classpath → OXP.jar, Ant Home, Additional Task & Support
  2. Nuevo External Tool Configuration. Ant Build → BuildAll (Extended), no clean (genera todos los binarios de LYWSE, sin hacer clean)
    1. Main → BuildFile: ${workspace_loc:/org.libertya.ws/src/builde.xml}
    2. Targets → compile, generateWSDL, generateWSDD, compileStubs
    3. Classpath → OXP.jar, Ant Home, Additional Task & Support
  3. Nuevo External Tool Configuration. Ant Build → Clean (limpia el contenido de los directorios)
    1. Main → BuildFile: ${workspace_loc:/org.libertya.ws/src/build.xml}
    2. Targets → clean-all
    3. Classpath → Ant Home, Additional Task & Support
  4. Nuevo External Tool Configuration. Ant Build → Clean (Extended) (limpia el contenido de los directorios)
    1. Main → BuildFile: ${workspace_loc:/org.libertya.ws/src/builde.xml}
    2. Targets → clean-all
    3. Classpath → Ant Home, Additional Task & Support
  5. Nuevo External Tool Configuration. Ant Build → Deploy (publica en Axis usando el wsdd de LYWS)
    1. Main → BuildFile: ${workspace_loc:/org.libertya.ws/src/build.xml}
    2. Targets → deployWebservice
    3. Classpath → Ant Home, Additional Task & Support
  6. Nuevo External Tool Configuration. Ant Build → Deploy (Extended) (publica en Axis usando el wsdd de LYWSE)
    1. Main → BuildFile: ${workspace_loc:/org.libertya.ws/src/builde.xml}
    2. Targets → deployWebservice
    3. Classpath → Ant Home, Additional Task & Support
  7. Nuevo External Tool Configuration. Ant Build → Undeploy (despublica LYWS en Axis usando el wsdd)
    1. Main → BuildFile: ${workspace_loc:/org.libertya.ws/src/build.xml}
    2. Targets → undeployWebservice
    3. Classpath → Ant Home, Additional Task & Support
  8. Nuevo External Tool Configuration. Ant Build → Undeploy (Extended) (despublica LYWSE en Axis usando el wsdd)
    1. Main → BuildFile: ${workspace_loc:/org.libertya.ws/src/builde.xml}
    2. Targets → undeployWebservice
    3. Classpath → Ant Home, Additional Task & Support

IMPORTANTE

Las versiones más recientes de Eclipse requieren Java 11 o superior, entonces en el External Tool Configuration se debe indicar una JRE distinta, por ejemplo:
image1.png

Luego es necesario ampliar el ClassPath para la ETC BuildAll, agregando OXP.jar y AxisJar.jar como External Jars:
image2.png

Para la ETC BuildAll (extended), no clean hay que incorporar jbossall-client.jar:

image3.png

Para Deploy y Deploy (Extendend) se requiere AxisJar.jar:

image4.png

Por ultimo es conveniente verificar que la compilación que hace ant en el directorio build sea Java 8 y no Java 11/17. Para eso se puede por ejemplo utilizar javap, reemplazando <alguna_clase> por cualquier clase generada:

javap -verbose
./classes/wse/libertya/org/<alguna_clase>.class | grep "major"

La salida mostrará una salida como:
major version: 52

Y habrá que corroborar a qué versión de bytecode corresponde, por ejemplo:
JRE 8 (Java 1.8) usa la versión de bytecode 52.
JRE 17 (Java 17) usa la versión de bytecode 61.

Codificar y publicar

En este punto se deberá codificar la lógica necesaria correspondiente según requerimientos. Esto implicar realizar las modificaciones necesarias sobre las clases del proyecto LYWS. Por ejemplo:

  • Si necesitamos realizar alguna modificación a la operación de creación de entidades comerciales, debemos modificar el método bPartnerCreate() de la clase BPartnerCRUDHandler.
  • Si necesitamos realizar alguna modificación a la operación de eliminación de facturas, debemos modificar el método invoiceDelete() de la clase InvoiceDocumentHandler.
  • Si necesitamos crear una nueva operación, por ejemplo la operación de cierre de pedidos, debemos realizar los siguientes pasos:
    • En la clase OrderDocumentHandler deberemos implementar un nuevo método llamado por ejemplo orderCloseByID().
    • En la interfaz LibertyaWS será necesario incorporar el nuevo método a implementar, siguiendo el ejemplo, deberá llamarse orderCloseByID().
    • Luego habrá que implementar dicho método en la clase LibertyaWSImpl, el cual instanciará a OrderDocumentHandler e invocará a orderCloseByID().
    • Para dar compatibilidad con LYWSE se deberá ampliar también la interfaz LibertyaWSE y la clase LibertyaWSEImpl con la nueva operacion. En esta última clase será necesario armar el wrapper para conectar con OrderDocumentHandler.

Posteriormente, habrá que actualizar el Axis con la nueva versión. A continuación los pasos necesarios:

  1. Ejecutar el ETC BuildAll. Al final debería decir BUILD SUCCESFUL. Esto generará varios archivos en el directorio build, tanto binarios como descriptores.
  2. Ejecutar el ETC BuildAll (Extended), no clean. Al final debería decir BUILD SUCCESFUL. Esto generará varios archivos en el directorio build, tanto binarios como descriptores.
  3. Compilar el proyecto org.libertya.ws a fin de validar si no hay errores. Esto generará varios archivos en el directorio bin.
  4. Copiar el contenido de build/classes en /ServidorOXP/jboss/server/openXpertya/deploy/axis.war/WEB-INF/classes.
  5. Copiar el contenido de bin/ en /ServidorOXP/jboss/server/openXpertya/deploy/axis.war/WEB-INF/classes, sobreescribiendo cualquier archivo previamente copiado en el punto anterior.
  6. Iniciar el JBoss (/ServidorOXP/utils/IniciarServidor.sh).
  7. Ejecutar el ETC Deploy. Al final debería decir BUILD SUCCESSFUL. Lo mismo con Deploy (Extended). Si vamos a http://localhost:8080/axis/servlet/AxisServlet**, deberían ahora verse la nómina completa de servicios disponibles.

IMPORTANTE: La modificación de la lógica de las operaciones existentes no requiere la re-publicación del servicio, dado que el número de operaciones no es modificado, ni los argumentos de invocación (primeros dos ejemplos). Es suficiente con actualizar los binarios del axis.war para contar con la nueva lógica. Sin embargo en caso de modificacar los argumentos de alguna operación o bien al incorporar nuevas operaciones (tercer ejemplo), será necesario (además de actualizar los binarios) realizar la re-publicación mediante la ejecución del ETC Deploy.

Cliente LYWS

La manera más sencilla de validar la funcionalidad de LYWS es simplemente ejecutando el cliente ya implementado org.libertya.ws.client.LibertyaWSClient. Posiblemente sea necesario ajustar el mismo en función de los cambios realizados en los servicios.

Armado de paquete para release

Este paso simplemente implica comprimir el directorio axis.war una vez realizados los cambios correspondientes (modificaciones al código, compilación, actualización de binarios, publicación). Dicho zip luego será parte de un release de Libertya y será deployado en los ServidorOXP donde sea necesario.

Importante: Solución a error de clases al invocar un WS desde la ejecución de LYWS

Se presenta un error cuando se intenta acceder a un WS externo durante la ejecucución de un servicio de LYWS. Específicamente se dispara una excepción debido a que existen varias clases “iguales” en varios directorios lib.

16:32:13,286 WARN [EngineConfigurationFactoryFinder] Factory org.apache.axis.configuration.EngineConfigurationFactoryDefault Ignored: missing required method: public static EngineConfigurationFactory newFactory(Object).

A fin de solucionarlo se realizaron los siguientes cambios:

  1. Quitar (si es que existe) del axis.war el archivo /WEB-INF/lib/axis.jar
  2. Nueva linea en ServidorOXP/jboss/server/openXpertya/conf/jboss-service.xml (este punto ya realizado en commit r658 de LY Core)

<classpath archives=“OXP.jar” codebase=“../../../lib”/>
<classpath archives=“OXPSLib.jar” codebase=“../../../lib”/>
<classpath archives=“itext_1.5.4.jar” codebase=“../../../lib”/>
<classpath archives=“JasperReports.jar” codebase=“../../../lib”/>
<classpath archives=“AxisJar.jar” codebase=“../../../lib”/> <—–NUEVA LINEA!!! –>

Solución a error en deploy de servicios

Al publicar nuevos servicios e ingresar a http://localhost:8080/axis/servlet/AxisServlet** es posible obtener un error como el siguiente:

image5.png
Para resolverlo se debe hacer un build en limpio. Para eso es necesario tomar la versión más nueva de LYWS (sin las nuevas operaciones) y reemplazar en ServidorOXP/jboss/server/openXpertya/deploy
Se puede verificar accediendo a http://localhost:8080/axis/servlet/AxisServlet**

Luego desde Eclipse se debe hacer un project clean, luego volver a realizar los pasos y republicar