2016-05-09 9 views
4

В настоящее время я работаю над XSD, который использует следующий contruct:JAXB: Сформировать постоянное значение для атрибута с фиксированным значением

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

Пока не проблематична сама по себе, это скорее раздражает работать, так как фиксированная стоимость этого определения увеличивается между версиями спецификации xsd, и нам нужно изменить значения в отдельном классе констант, чтобы они были действительными, хотя мало что изменило интерес к xsd. Xsd поддерживается в другом месте, поэтому просто изменить его нет.

Таким образом, я спрашивал себя кастрированный баран есть JAXB-плагин или аналогичный, чтобы включить фиксированное значение атрибутов в константы ала

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

вместо просто

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

, которые должны быть заполнены вручную.

Кто-нибудь знает о таком?

ответ

3

Да, это возможно с помощью пользовательских привязок jaxb, которые можно добавить в файл в кодегене.

В привязках jaxb есть атрибут fixedAttributeAsConstantProperty. Установив для этого значение true, инструктирует генератор кода генерировать атрибуты с атрибутом fixed как java-константы.

Есть 2 варианта для этого:

1. С помощью глобальных привязок: , которые затем делают все атрибуты с фиксированными значениями для констант

<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. С помощью местных отображений: Который определяет только свойство fixedAttributeAsConstantProperty по определенному атрибуту.

<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> 

Оба примера следует привести:

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

Если вы не хотите, чтобы изменить вашу схему, другой вариант заключается в использовании внешнего связывания файла:

<?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> 

Это эквивалентно тому, что предлагает @jmattheis в его ответе.

 Смежные вопросы

  • Нет связанных вопросов^_^