Skip to content

Hub de generación automática de código: 6 proyectos Maven con plugins para transformar JSON Schema, XSD, WSDL y OpenAPI en código Java. Incluye bidireccional JSON↔Java, XML↔Java (JAXB), clientes SOAP (CXF) y REST (Swagger Codegen). Contract-first development.

Notifications You must be signed in to change notification settings

Cortadai/code-generation-tools

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 

Repository files navigation

🔨 Herramientas de Generación de Código

6 proyectos Maven demostrando generación automática de código desde varios formatos de esquemas y APIs.

📚 Lista de Proyectos

JSON ↔ Java Bidireccional

  • json2Java
    Generar POJOs Java desde esquemas JSON

    • Plugin: jsonschema2pojo
    • Entrada: Esquemas JSON → Salida: Clases Java con anotaciones Jackson
    • Caso de uso: Contratos de API, validación de datos, prototipado rápido
  • java2Json
    Generar esquemas JSON desde clases Java

    • Plugin: Generador de esquema JSON personalizado
    • Entrada: Clases Java → Salida: Definiciones de esquema JSON
    • Caso de uso: Documentación de API, desarrollo contract-first

XML ↔ Java Bidireccional

  • xsd2Java
    Generar clases Java desde XML Schema Definition

    • Plugin: jaxb2-maven-plugin
    • Entrada: Archivos XSD → Salida: Clases Java anotadas con JAXB
    • Caso de uso: Servicios SOAP, procesamiento XML, integración de sistemas legacy
    • Tecnología: JAXB (Java Architecture for XML Binding)
  • java2XSD
    Generar esquemas XSD desde clases Java

    • Plugin: Generación de esquema JAXB
    • Entrada: Clases Java → Salida: Definiciones XSD
    • Caso de uso: Contratos de web services, validación XML, integración empresarial

WSDL y OpenAPI → Java

  • wsdl2Java
    Generar código cliente SOAP Java desde WSDL

    • Plugin: cxf-codegen-plugin (Apache CXF)
    • Entrada: Archivo WSDL → Salida: Clases cliente SOAP Java
    • Caso de uso: Consumo de servicios SOAP, integración de sistemas legacy
    • Ejemplo: Cliente de web service NumberConversion
  • swagger2Java
    Generar código Java desde especificaciones Swagger/OpenAPI

    • Plugin: swagger-codegen-maven-plugin
    • Entrada: Specs Swagger/OpenAPI → Salida: Código cliente REST Java
    • Caso de uso: Desarrollo API-first, generación de cliente REST, generación de SDK
    • Ejemplo: Generación de cliente API Petstore

🔄 Diagrama de Transformación

Esquema JSON ──json2Java──→ Clases Java (POJOs)
                              ↕
                           java2Json
                              ↓
                         Esquema JSON

Esquema XSD ───xsd2Java───→ Clases Java (JAXB)
                              ↕
                           java2XSD
                              ↓
                           Esquema XSD

Esquema WSDL ──wsdl2Java──→ Cliente SOAP Java
                         (Apache CXF)

OpenAPI/Swagger swagger2Java→ Cliente REST Java
                             (Swagger Codegen)

🛠️ Tecnologías Utilizadas

Herramienta de Construcción:

  • Maven 3.x+

Plugins de Generación de Código:

  • jsonschema2pojo-maven-plugin - JSON a Java
  • jaxb2-maven-plugin - XSD ↔ Java (JAXB)
  • cxf-codegen-plugin - WSDL a Java (Apache CXF)
  • swagger-codegen-maven-plugin - Swagger/OpenAPI a Java

Data Binding y Procesamiento:

  • JAXB (Java Architecture for XML Binding)
  • Jackson (Procesamiento JSON)
  • Apache CXF (SOAP/Web Services)

Versión Java:

  • Java 11+ (JAXB requiere dependencia explícita ya que fue eliminado del JDK 11+)

📊 Tabla Comparativa

Proyecto Formato Origen Salida Caso de Uso Plugin
json2Java Esquema JSON POJOs Java APIs REST, modelos de datos jsonschema2pojo
java2Json Clases Java Esquema JSON Documentación de API Personalizado
xsd2Java XSD (Esquema XML) Java (JAXB) SOAP, procesamiento XML jaxb2
java2XSD Clases Java XSD Web services, validación XML jaxb2
wsdl2Java WSDL Cliente SOAP Java Servicios SOAP legacy cxf-codegen
swagger2Java Swagger/OpenAPI Cliente REST Java APIs REST modernas swagger-codegen

🚀 Inicio Rápido

Prerrequisitos

Java 11+
Maven 3.6+

Clonar y compilar cualquier proyecto

git clone https://github.com/Cortadai/json2Java.git
cd json2Java
mvn clean compile

El código generado típicamente aparece en:

target/generated-sources/

💡 Casos de Uso por Proyecto

json2Java - Desarrollo de API REST

  • Diseño de API contract-first
  • Generación rápida de POJOs desde specs de API
  • Generación de datos mock
  • Aplicación de contratos de validación

java2Json - Documentación de API

  • Generar esquemas JSON para documentación
  • Crear specs OpenAPI/Swagger desde código
  • Validación de contratos
  • Alineación consumidor/productor

xsd2Java - Integración Empresarial

  • Integración de sistemas legacy
  • Implementación de servicios SOAP
  • Validación XML
  • Procesamiento de documentos EDI/B2B

java2XSD - Contratos de Web Service

  • Definición de servicios SOAP
  • Especificación de contratos XML
  • Integración de sistemas legacy
  • Estándares de intercambio de datos

wsdl2Java - Generación de Cliente SOAP

  • Integración de sistemas legacy
  • Consumo de servicios SOAP
  • Generación automática de stubs de cliente
  • Llamadas SOAP type-safe

swagger2Java - Generación de Cliente REST

  • Generación de SDK desde specs de API
  • Clientes REST type-safe
  • Desarrollo API-first
  • Integración de microservicios

🎯 Ruta de Aprendizaje

Fundamentos: Entendiendo la Generación de Código

  1. Empezar con json2Java - Ejemplo bidireccional más simple
  2. Aprender java2Json - Dirección inversa
  3. Entender el ecosistema de plugins Maven

XML y Empresarial

  1. Pasar a xsd2Java - Binding JAXB
  2. Revertir con java2XSD - Generación de esquemas
  3. Entender estándares XML empresariales

Web Services

  1. wsdl2Java - SOAP/sistemas legacy
  2. swagger2Java - APIs REST modernas

Maestría

  • Combinar múltiples generadores en una sola construcción Maven
  • Automatizar validación de esquemas
  • Integración CI/CD de generación de código

🔗 Ejemplos de Integración

Proyecto Maven Único con Múltiples Generadores

<build>
  <plugins>
    <!-- Generación JSON -->
    <plugin>
      <groupId>org.jsonschema2pojo</groupId>
      <artifactId>jsonschema2pojo-maven-plugin</artifactId>
      ...
    </plugin>
    
    <!-- Generación JAXB/XSD -->
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>jaxb2-maven-plugin</artifactId>
      ...
    </plugin>
    
    <!-- Generación CXF/WSDL -->
    <plugin>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-codegen-plugin</artifactId>
      ...
    </plugin>
  </plugins>
</build>

Ejecución de Build Maven

mvn clean compile
# Todos los generadores se ejecutan en secuencia
# El código aparece en target/generated-sources/

📝 Patrón de Estructura de Archivos

Todos los proyectos siguen una estructura Maven consistente:

proyecto-generacion-codigo/
├── pom.xml
│   └── Configuración de plugins
├── src/
│   ├── main/
│   │   ├── java/        (si hay código personalizado)
│   │   └── resources/   (esquemas/specs)
│   │       ├── schemas/
│   │       ├── wsdl/
│   │       └── openapi/
│   └── test/
└── target/
    └── generated-sources/  (Código generado aquí)
        └── org.example/

⚙️ Referencia de Plugins Maven

jsonschema2pojo-maven-plugin

<plugin>
  <groupId>org.jsonschema2pojo</groupId>
  <artifactId>jsonschema2pojo-maven-plugin</artifactId>
  <version>1.1.1</version>
  <configuration>
    <sourceDirectory>src/main/resources/schemas</sourceDirectory>
    <outputDirectory>target/generated-sources</outputDirectory>
    <targetPackage>org.example.model</targetPackage>
  </configuration>
  <executions>
    <execution>
      <goals>
        <goal>generate</goal>
      </goals>
    </execution>
  </executions>
</plugin>

jaxb2-maven-plugin

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>jaxb2-maven-plugin</artifactId>
  <version>2.5.0</version>
  <executions>
    <execution>
      <goals>
        <goal>xjc</goal>
      </goals>
    </execution>
  </executions>
</plugin>

cxf-codegen-plugin

<plugin>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-codegen-plugin</artifactId>
  <version>3.5.0</version>
  <executions>
    <execution>
      <id>generate-sources</id>
      <phase>generate-sources</phase>
      <configuration>
        <sourceRoot>target/generated-sources</sourceRoot>
        <wsdlOptions>
          <wsdlOption>
            <wsdl>src/main/resources/wsdl/service.wsdl</wsdl>
          </wsdlOption>
        </wsdlOptions>
      </configuration>
      <goals>
        <goal>wsdl2java</goal>
      </goals>
    </execution>
  </executions>
</plugin>

swagger-codegen-maven-plugin

<plugin>
  <groupId>io.swagger.codegen.v3</groupId>
  <artifactId>swagger-codegen-maven-plugin</artifactId>
  <version>3.0.34</version>
  <executions>
    <execution>
      <goals>
        <goal>generate</goal>
      </goals>
      <configuration>
        <inputSpec>src/main/resources/openapi.yaml</inputSpec>
        <language>java</language>
        <output>target/generated-sources</output>
      </configuration>
    </execution>
  </executions>
</plugin>

✅ Mejores Prácticas

1. Mantener Código Generado Separado

src/main/generated/   ← Código generado (solo lectura)
src/main/java/        ← Código escrito a mano

2. Automatizar en CI/CD

# Ejemplo GitHub Actions
- name: Generate Code
  run: mvn clean compile

3. Control de Versiones

  • ✅ Commitear pom.xml con configuración de plugin
  • ⚠️ No commitear código generado (añadir a .gitignore)
  • ✅ Commitear archivos fuente de esquemas (XSD, WSDL, etc.)

4. Documentación

  • Documentar qué plugin genera qué
  • Mantener archivos de esquema/spec actualizados
  • Anotar directorio de salida esperado

5. Regeneración

  • Seguro regenerar en cualquier momento
  • Usar fases Maven: generate-sources, generate-resources
  • Parte del ciclo de vida clean compile

🎓 Resultados de Aprendizaje

Después de explorar esta colección, comprenderás:

  • ✅ Beneficios y trade-offs de generación de código
  • ✅ Ecosistema de plugins Maven
  • ✅ Enfoques de desarrollo schema-first
  • ✅ Desarrollo guiado por contratos
  • ✅ JAXB para binding XML/Java
  • ✅ Generación de cliente SOAP (sistemas legacy)
  • ✅ Generación de cliente REST (APIs modernas)
  • ✅ Validación y generación de esquemas JSON
  • ✅ Generación automática de código en CI/CD
  • ✅ Patrones de integración empresarial

🔗 Tecnologías Relacionadas

Lenguajes de Esquema

  • JSON Schema - Validación de datos JSON
  • XSD (XML Schema) - Validación de datos XML
  • WSDL - Descripción de servicios SOAP
  • OpenAPI/Swagger - Descripción de API REST

Frameworks de Procesamiento

  • JAXB - Binding XML↔Java (Jakarta EE)
  • Jackson - Procesamiento JSON (estándar Java)
  • Apache CXF - Framework SOAP/WS

Colecciones Relacionadas


📊 Estadísticas del Proyecto

Métrica Valor
Total Proyectos 6
Herramienta de Build Maven
Versión Java 11+
Nivel de Aprendizaje Intermedio
Enfoque Automatización de Generación de Código

🏷️ Topics Aplicados

Todos los proyectos etiquetados con:

  • #generacion-codigo - Generación automática de código
  • #aprendizaje - Material de aprendizaje
  • #educacion - Contenido educativo
  • #tutorial - Estilo tutorial
  • #automatizacion - Automatización de build
  • #maven - Herramienta de build Maven

Proyecto hub code-generation-tools también etiquetado con:

  • #coleccion - Hub recopilatorio
  • #herramientas - Herramientas de desarrollo

💡 Conclusión Clave

La generación de código cierra la brecha entre:

  • Contratos (esquemas, specs) ← Fuente de verdad
  • Implementación (código Java) ← Artefacto generado

Este enfoque asegura:

  • ✅ Seguridad de tipos
  • ✅ Cumplimiento de contratos
  • ✅ Desarrollo rápido
  • ✅ Menos codificación manual
  • ✅ Consistencia entre equipos

📬 Notas

Estos proyectos fueron creados como ejemplos de aprendizaje para entender varios enfoques de generación de código en el ecosistema Maven.

Explora cómo diferentes formatos de esquema (JSON, XSD, WSDL, OpenAPI) pueden generar automáticamente código Java listo para producción.

Última actualización: Noviembre 2025

About

Hub de generación automática de código: 6 proyectos Maven con plugins para transformar JSON Schema, XSD, WSDL y OpenAPI en código Java. Incluye bidireccional JSON↔Java, XML↔Java (JAXB), clientes SOAP (CXF) y REST (Swagger Codegen). Contract-first development.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published