2011-10-08 2 views
1

У меня есть схема XSD, но я не могу изменить схему Как настроить Jaxb, чтобы игнорировать использование атрибута?

<xs:attribute name="zbpName" type="Zbp_NC" use="required"/> 
<xs:attribute name="zbpType" type="ZBPTYP_CL" use="required"/ 

Генерация Java-классов работает, но я хочу, чтобы игнорировать использование атрибутов = "требуется». Есть ли способ игнорировать это?

Я хочу, чтобы получить этот результат, когда я МАРШАЛ.

<protectionPoint zbpName="Protection Point - 0"> 

Но в тот момент я получаю этот результат ....

<protectionPoint zbpNotes="" zbpStation="" zbpInterlockingName="" zbpType="" zbpName="Protection Point - 0"> 

Это потому, что созданная Clasess имеет эту аннотацию.

@XmlAttribute(name = "zbpStation", required = true) 

Но должен выглядеть так ...

@XmlAttribute(name = "zbpStation") 

Спасибо за вашу помощь ;-)

ответ

0

Я думаю, вы можете просто создать свой собственный класс с правильными аннотациями и использовать его вместо старого например,

public interface TestInterface { 
    Integer getField();  
} 

public class TestClass implements TestInterface{ 

    @Attribute(required = true) 
    private Integer field; 

    public TestClass() { 
    } 

    public TestClass(Integer field) { 
     this.field = field; 
    } 

    public Integer getField() { 
     return field; 
    } 

    public void setField(Integer field) { 
     this.field = field; 
    } 
} 

public class NewTestClass implements TestInterface{ 

    @Attribute 
    private Integer field; 

    public NewTestClass() { 
    } 

    public NewTestClass(Integer field) { 
     this.field = field; 
    } 

    public Integer getField() { 
     return field; 
    } 

    public void setField(Integer field) { 
     this.field = field; 
    } 
} 

Фактически, это зависит от того, какой доступ у вас есть к целевому классу.

+0

Это «использование» не так просто, поскольку классы JAXB должны быть в одном пакете. Я бы сказал, нужно исправить класс Java после его создания. –

+0

Вы не можете удалить аннотации во время выполнения, поэтому это должно быть сделано вручную ПЕРЕД компиляцией –

+0

Но я должен сделать это для многих классов, так что это не вариант для меня ... Спасибо. – user985203

2

Вы хотите, чтобы required="false", но не можете изменить схему? Для этого вы можете использовать JAXB2-Basics Annotate Plugin версии 0.6.3 и выше. Настройка будет выглядеть так:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<jaxb:bindings 
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:annox="http://annox.dev.java.net" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd" 
    jaxb:extensionBindingPrefixes="xjc annox" 
    version="2.1"> 

    <!-- org.example.TFreeForm @XmlRootElement --> 
    <jaxb:bindings schemaLocation="schema.xsd" node="/xs:schema"> 
     <jaxb:bindings node="xs:complexType[@name='MyType']/xs:attribute[@name='test']"> 
      <annox:annotate target="field"> 
       <annox:annotate annox:class="javax.xml.bind.annotation.XmlAttribute" required="false"/> 
      </annox:annotate> 
     </jaxb:bindings> 
    </jaxb:bindings> 

</jaxb:bindings> 

Версия 0.6.3 еще не выпущена. Доступен снимок here.

+0

Спасибо, ваше сообщение было очень полезно. – user985203

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