2016-06-30 2 views
0

Я генерирую классы Java-моделей с использованием XJC из схемы, и я не хочу, чтобы elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED появлялся в моем package-info.java , Я попробовал два разных XMLs-ElementFormDefault = "unqualified" игнорируется с использованием XJC

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema xmlns="http://www.google.com/Protocol" elementFormDefault="unqualified" 
targetNamespace="http://www.google.com/Protocol" xmlns:xs="http://www.w3.org/2001/XMLSchema" > 
    <xs:element name="A"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element minOccurs="0" maxOccurs="1" name="User" type="xs:string"/> 
     <xs:element name="Attr" type="xs:string"/> 
     <xs:element ref="A1"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
<xs:element name="A1"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="Attr" type="xs:string"/> 
     <xs:element minOccurs="0" maxOccurs="1" name="Attr2" type="xs:string"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
    <xs:element name="Root"> 
    <xs:complexType> 
     <xs:choice> 
     <xs:element ref="A" /> 
     </xs:choice> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

Над Xml генерирует информацию о пакете, как

ценам ниже
@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.google.com/Protocol") 
package com.google; 

В то время как на другой ниже xml-

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema xmlns="http://www.google.com/Protocol" elementFormDefault="unqualified" 
targetNamespace="http://www.google.com/Protocol" xmlns:xs="http://www.w3.org/2001/XMLSchema" > 
    <xs:element name="A"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element minOccurs="0" maxOccurs="1" name="User" type="xs:string"/> 
     <xs:element ref="A1"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
<xs:element name="A1"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="Attr" type="xs:string"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
    <xs:element name="Root"> 
    <xs:complexType> 
     <xs:choice> 
     <xs:element ref="A" /> 
     </xs:choice> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

генерирует ниже package-info.java

@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.google.com/Protocol", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) 
package com.google; 

Я не хочу elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED появится в моем java-файле. В настоящее время я должен вручную отредактировать его в elementFormDefault = javax.xml.bind.annotation.XmlNsForm.UNQUALIFIED после создания модели.

Может ли кто-нибудь помочь, почему elementFormDefault = "unqualified" игнорируется во втором xml.

ответ

0

Здесь нет ничего неправильного (извинения, если вы это осознаете).

Поставщик JAXB просто угадывает, что вы будете делать с этим пакетом, но это не влияет на сгенерированные классы, а только на новые, которые вы можете добавить к этому пакету.

Все сгенерированные классы мобилизует просто отлично, местные элементы не будут записаны с NS, как и следовало ожидать с elementFormDefault = неквалифицированного, так как они были получены с полным набором JAXB аннотациями.

Возможно, вы уже знаете это, и я не отвечаю на ваш вопрос, но я представляю, что вы думаете, что это ошибка, с которой вам нужно иметь дело, и просто указывать, что этого не будет, если вы идете наверх -down и просто используя сгенерированные классы.

Но для реального ответа, почему здесь есть разница, вам, вероятно, придется погрузиться в детали реализации и документ поставщика JAXB, чтобы лучше понять. Я также не вижу стандартную привязку привязки here, так что, вероятно, она будет специфичной для провайдера.

+0

Я проверил JAXB и, к сожалению, это не помогло. Спасибо за вашу помощь :) –

+0

Я нашел еще одну [ссылку] (http://metro.1045641.n5.nabble.com/JAXB-not-respecting-elementFormDefault-for-types-with-only-referred-element-tp1063047p1063048 .html) в Интернете. Это проблема XML, а не XJC. Я все еще ищу решение. –

+0

Я не уверен, что комментарий фиксирует проблему. Не знаю, подходит ли JAXB для вас или нет. Но я имел в виду, что я не думаю, что есть какие-то проблемы с элементами и типами, определенными в схеме, и нет ничего плохого в генерируемых классах. Если вы попробуете простую примерную программу, сериализующую некоторые экземпляры объектов сгенерированных классов JAXB, вы увидите, что NS-квалификатор действителен в соответствии с схемой. Но JAXB также учитывает тот факт, что вы можете по какой-либо причине добавить другие классы в этот пакет. –

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