Как настроить Jaxb, чтобы игнорировать использование атрибута? - PullRequest
1 голос
/ 08 октября 2011

У меня есть схема XSD, но я не могу изменить схему 

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

Это потому, что сгенерированный Клэсс имеет эту аннотацию.

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

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

@XmlAttribute(name = "zbpStation")

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

Ответы [ 2 ]

2 голосов
/ 08 октября 2011

То есть вы хотите 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 еще не выпущена.Снимок доступен здесь .

0 голосов
/ 08 октября 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...