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

Show last authors
1 = Libertya Web Services {{id name="libertya-web-services" /}}=
2
3 == Codificación y publicación {{id name="codificación-y-publicación" /}}==
4
5 == **Introducción** {{id name="introducción" /}}==
6
7 El presente documento detalla los pasos necesarios para crear/ampliar y publicar el conjunto de operaciones soportadas por LYWS / LYWSE.
8
9 == **Instalación Axis 1.4 en Jboss de Libertya** {{id name="instalación-axis-1.4-en-jboss-de-libertya" /}}==
10
11 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.
12
13 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)\\
14 1. 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).\\
15 1. 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 (*)\\
16 1. 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”).\\
17 1. (*) 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//.
18
19 == **Incorporación de LY y LYWS en Eclipse.** {{id name="incorporación-de-ly-y-lyws-en-eclipse." /}}==
20
21 1. Hacer checkout de Libertya y LYWS.\\
22 1. Incorporar ambos proyectos a Eclipse.\\
23 1. 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)).
24
25 == **Publicación de servicios LYWS y LYWSE en Axis** {{id name="publicación-de-servicios-lyws-y-lywse-en-axis" /}}==
26
27 === **Generar los External Tool Configuration (ETC)** {{id name="generar-los-external-tool-configuration-etc" /}}===
28
29 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**:
30
31 1. Nuevo External Tool Configuration. Ant Build → **BuildAll** (genera todos los binarios de LYWS)
32 11. Main → BuildFile: ~${workspace_loc:/org.libertya.ws/src/build.xml}\\
33 11. Targets → build-all\\
34 11. Classpath → OXP.jar, Ant Home, Additional Task & Support\\
35 1. Nuevo External Tool Configuration. Ant Build → **BuildAll (Extended), no clean** (genera todos los binarios de LYWSE, sin hacer clean)
36 11. Main → BuildFile: ~${workspace_loc:/org.libertya.ws/src/builde.xml}\\
37 11. Targets → compile, generateWSDL, generateWSDD, compileStubs\\
38 11. Classpath → OXP.jar, Ant Home, Additional Task & Support\\
39 1. Nuevo External Tool Configuration. Ant Build → **Clean** (limpia el contenido de los directorios)
40 11. Main → BuildFile: ~${workspace_loc:/org.libertya.ws/src/build.xml}\\
41 11. Targets → clean-all\\
42 11. Classpath → Ant Home, Additional Task & Support\\
43 1. Nuevo External Tool Configuration. Ant Build → **Clean (Extended)** (limpia el contenido de los directorios)
44 11. Main → BuildFile: ~${workspace_loc:/org.libertya.ws/src/builde.xml}\\
45 11. Targets → clean-all\\
46 11. Classpath → Ant Home, Additional Task & Support\\
47 1. Nuevo External Tool Configuration. Ant Build → **Deploy** (publica en Axis usando el wsdd de LYWS)
48 11. Main → BuildFile: ~${workspace_loc:/org.libertya.ws/src/build.xml}\\
49 11. Targets → deployWebservice\\
50 11. Classpath → Ant Home, Additional Task & Support\\
51 1. Nuevo External Tool Configuration. Ant Build → **Deploy (Extended)** (publica en Axis usando el wsdd de LYWSE)
52 11. Main → BuildFile: ~${workspace_loc:/org.libertya.ws/src/builde.xml}\\
53 11. Targets → deployWebservice\\
54 11. Classpath → Ant Home, Additional Task & Support\\
55 1. Nuevo External Tool Configuration. Ant Build → **Undeploy** (despublica LYWS en Axis usando el wsdd)
56 11. Main → BuildFile: ~${workspace_loc:/org.libertya.ws/src/build.xml}\\
57 11. Targets → undeployWebservice\\
58 11. Classpath → Ant Home, Additional Task & Support\\
59 1. Nuevo External Tool Configuration. Ant Build → **Undeploy (Extended)** (despublica LYWSE en Axis usando el wsdd)
60 11. Main → BuildFile: ~${workspace_loc:/org.libertya.ws/src/builde.xml}\\
61 11. Targets → undeployWebservice\\
62 11. Classpath → Ant Home, Additional Task & Support
63
64 **IMPORTANTE**
65
66 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:\\[[image:image1.png]]
67
68 Luego es necesario ampliar el ClassPath para la ETC BuildAll, agregando **OXP.jar** y **AxisJar.jar** como External Jars:\\[[image:image2.png]]
69
70 Para la ETC **BuildAll (extended), no clean** hay que incorporar **jbossall-client.jar**:
71
72 [[image:image3.png]]
73
74 === Para Deploy y Deploy (Extendend) se requiere **AxisJar.jar**: {{id name="para-deploy-y-deploy-extendend-se-requiere-axisjar.jar" /}}===
75
76 [[image:image4.png]]
77
78 === 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: {{id name="por-ultimo-es-conveniente-verificar-que-la-compilación-que-hace-ant-en-el-directorio-build-sea-java-8-y-no-java-1117.-para-eso-se-puede-por-ejemplo-utilizar-javap-reemplazando-alguna_clase-por-cualquier-clase-generada" /}}===
79
80
81 {{code language="bash"}}
82 javap -verbose
83 ./classes/wse/libertya/org/<alguna_clase>.class | grep "major"
84 {{/code}}
85
86 La salida mostrará una salida como:\\**major version: 52**
87
88 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.**
89
90 === **Codificar y publicar** {{id name="codificar-y-publicar" /}}===
91
92 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:
93
94 *. 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**.\\
95 *. 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**.\\
96 *. Si necesitamos crear una nueva operación, por ejemplo la operación de cierre de pedidos, debemos realizar los siguientes pasos:
97 **. En la clase **OrderDocumentHandler** deberemos implementar un nuevo método llamado por ejemplo **orderCloseByID()**.\\
98 **. En la interfaz **LibertyaWS** será necesario incorporar el nuevo método a implementar, siguiendo el ejemplo, deberá llamarse **orderCloseByID()**.\\
99 **. Luego habrá que implementar dicho método en la clase **LibertyaWSImpl**, el cual instanciará a OrderDocumentHandler e invocará a **orderCloseByID()**.\\
100 **. 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**.
101
102 Posteriormente, habrá que actualizar el Axis con la nueva versión. A continuación los pasos necesarios:
103
104 1. Ejecutar el ETC **BuildAll**. Al final debería decir **BUILD SUCCESFUL**. Esto generará varios archivos en el directorio **build**, tanto binarios como descriptores.\\
105 1. 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.\\
106 1. Compilar el proyecto **org.libertya.ws** a fin de validar si no hay errores. Esto generará varios archivos en el directorio **bin**.\\
107 1. Copiar el contenido de **build/classes** en **/ServidorOXP/jboss/server/openXpertya/deploy/axis.war/WEB-INF/classes**.\\
108 1. 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.\\
109 1. Iniciar el JBoss (**/ServidorOXP/utils/IniciarServidor.sh**).\\
110 1. 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**>>http://localhost:8080/axis/servlet/AxisServlet]], deberían ahora verse la nómina completa de servicios disponibles.
111
112 **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**.
113
114 === **Cliente LYWS** {{id name="cliente-lyws" /}}===
115
116 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.
117
118 === **Armado de paquete para release** {{id name="armado-de-paquete-para-release" /}}===
119
120 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.
121
122 == **Importante: Solución a error de clases al invocar un WS desde la ejecución de LYWS** {{id name="importante-solución-a-error-de-clases-al-invocar-un-ws-desde-la-ejecución-de-lyws" /}}==
123
124 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.
125
126 16:32:13,286 WARN [EngineConfigurationFactoryFinder] Factory org.apache.axis.configuration.EngineConfigurationFactoryDefault Ignored: missing required method: public static EngineConfigurationFactory newFactory(Object).
127
128 A fin de solucionarlo se realizaron los siguientes cambios:
129
130 1. Quitar (si es que existe) del **axis.war** el archivo **/WEB-INF/lib/axis.jar**\\
131 1. Nueva linea en **ServidorOXP/jboss/server/openXpertya/conf/jboss-service.xml** (este punto ya realizado en commit **r658** de **LY Core**)
132
133 <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!!! –>
134
135 == **Solución a error en deploy de servicios** {{id name="solución-a-error-en-deploy-de-servicios" /}}==
136
137 Al publicar nuevos servicios e ingresar a [[**http:~/~/localhost:8080/axis/servlet/AxisServlet**>>http://localhost:8080/axis/servlet/AxisServlet]] es posible obtener un error como el siguiente:
138
139 [[image: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**>>http://localhost:8080/axis/servlet/AxisServlet]]
140
141 Luego desde Eclipse se debe hacer un project clean, luego volver a realizar los pasos y republicar