valor usar sirve que para estatico diferencia cuando java xsd jaxb wsdl2java

usar - public final static java



Jaxb: genera un valor constante para el atributo de valor fijo (2)

Sí, es posible a través de enlaces jaxb personalizados, que se pueden agregar como archivo en codegen.

En los enlaces jaxb, está fixedAttributeAsConstantProperty -attribute. Estableciendo esto en verdadero, instruye al generador de código a generar atributos con el atributo fixed como constantes java.

Hay 2 opciones para esto:

1. A través de enlaces globales : que luego hacen todos los atributos con valores fijos a constantes

<schema targetNamespace="http://stackoverflow.com/example" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.0"> <annotation> <appinfo> <jaxb:globalBindings fixedAttributeAsConstantProperty="true" /> </appinfo> </annotation> ... </schema>

2. A través de asignaciones locales : que solo define la propiedad fixedAttributeAsConstantProperty en un atributo específico.

<schema targetNamespace="http://stackoverflow.com/example" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.0"> <complexType name="example"> <attribute name="someconstant" type="xsd:int" fixed="42"> <annotation> <appinfo> <jaxb:property fixedAttributeAsConstantProperty="true" /> </appinfo> </annotation> </attribute> </complexType> ... </schema>

Ambos ejemplos deberían dar como resultado:

@XmlRootElement(name = "example") public class Example { @XmlAttribute public final static int SOMECONSTANT = 42; }

Actualmente estoy trabajando en una xsd que utiliza la siguiente construcción:

<xs:attribute name="listVersionID" type="xs:normalizedString" use="required" fixed="1.0">

Aunque no es problemático per se, es bastante molesto trabajar con él, ya que el valor fijo de esta definición aumenta entre lanzamientos de la especificación xsd, y necesitamos modificar los valores en una clase de constantes separadas para mantenerlos válidos, aunque poco si algo de interés en el xsd ha cambiado. El xsd se mantiene en otro lugar, por lo que simplemente cambiarlo no es una opción.

Por lo tanto, me preguntaba si hay un complemento jaxb o similar para convertir los atributos de valor fijo en constantes ala

@XmlAttribute(name = "listVersionID") @XmlJavaTypeAdapter(NormalizedStringAdapter.class) @XmlSchemaType(name = "normalizedString") protected final String listVersionID = "1.0";

en lugar de simplemente

@XmlAttribute(name = "listVersionID") @XmlJavaTypeAdapter(NormalizedStringAdapter.class) @XmlSchemaType(name = "normalizedString") protected String listVersionID;

que debe ser rellenado manualmente

¿Alguien sabe de eso?


Si no desea modificar su esquema, otra opción es usar un archivo de enlace externo :

<?xml version="1.0" encoding="UTF-8"?> <jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <jaxb:bindings schemaLocation="yourschema.xsd" node="/xs:schema"> <jaxb:globalBindings fixedAttributeAsConstantProperty="true" /> </jaxb:bindings> </jaxb:bindings>

Es equivalente a lo que propone @jmattheis en su respuesta.