2008-10-27 11 views
7

Utilizo un eje para autogenerar artefactos del servicio web que luego convierto en objetos usados ​​en nuestra aplicación. ¿Hay un patrón sensato para hacer esto? Hemos escrito métodos de transformación para producir nuestros objetos desde los objetos creados por el eje, otras veces hemos escrito un conjunto intermedio de clases de transformadores que transforman los objetos del eje en nuestros objetos de aplicación. ¿Hay alguna forma común de abordar esto?Patrones: Conversión de clases de Java a partir de los objetos del eje

Respuesta

0

Nos hemos topado con problemas similares en el pasado. Recientemente, para un servicio web complejo para el que Axis generó artefactos, terminamos con 157 clases Java con nombres como "MaintainOffersRequestTypeReqReqDataMaintEnhancementCancellationReason".

Concluimos escribiendo clases que transforman estos objetos generados por Axis en objetos comerciales, similar a su última idea. No sé si es la mejor manera, pero sin duda es una solución viable.

3

Si entiendo correctamente, desea utilizar la función WSDL2Java de Axis para generar código de un WSDL y luego asignarlo a su modelo de objeto de aplicación existente. En ese caso, es posible que desee considerar el uso de Axis con el enlace JiBX.

0

Si utiliza Axis 1, sus clases de negocio tienen el mismo nombre calificado que la clase de datos de Axis, y se aplican algunas otras condiciones, puede usar sus clases de negocio en lugar de las de Axis sin necesidad de configuración. Lo hemos hecho muchas veces.

Para Axis 2, hemos tenido problemas con enlaces de datos distintos de ADB (el valor predeterminado), por lo que utilizamos Apache Commons Beanutils extensivamente para copiar datos de ida y vuelta entre las clases de Axis y nuestras clases de negocio.

1

Si el objetivo es traducir el "eje generado" a sus objetos comerciales puede probar una herramienta como dozer (http://dozer.sourceforge.net/) que es un "mapeador" para copiar de una implementación de objetos a otra implementación. No sé cómo usarlo (creo que tienes que explicar la traducción en archivos xml) y luego debería funcionar (no me usé pero algunos colegas lo usaron para un propósito similar y pareció funcionar)

1

Supongo que hay un sentido común manera de hacerlo. Resume un poco tu mente e imagina capas.

  1. Obtiene una biblioteca con el IO básico y quizás la funcionalidad de sesión básica y/o credenciales.
  2. Crea una capa de conversión. Aquí colocará todo el código necesario para construir sus objetos dependientes de la aplicación. Termina esta capa con una interfaz agradable para tu aplicación.

La capa de conversión se puede realizar de múltiples maneras.

  • Si la conversión es simple, puede combinar la primera y segunda capa casi todo en uno. Extienda el POJOS para proporcionar funcionalidad de transformación. Esto le proporcionará, al menos dos códigos, la funcionalidad y las extensiones automáticamente generadas

  • Si hablamos de enormes XML que deben convertirse a múltiples objetos de aplicaciones pequeñas. Ok, deje la primera capa tal como es y en el segundo uso:

    • patrón Comando: para encapsular las transformaciones.
    • Si la transformación también se vuelve desordenada: Cadena de responsabilidad le ayudará a generar un árbol de transformaciones.

espero que esto ayude a

Cuestiones relacionadas