Я генерирую классы 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.
Я проверил JAXB и, к сожалению, это не помогло. Спасибо за вашу помощь :) –
Я нашел еще одну [ссылку] (http://metro.1045641.n5.nabble.com/JAXB-not-respecting-elementFormDefault-for-types-with-only-referred-element-tp1063047p1063048 .html) в Интернете. Это проблема XML, а не XJC. Я все еще ищу решение. –
Я не уверен, что комментарий фиксирует проблему. Не знаю, подходит ли JAXB для вас или нет. Но я имел в виду, что я не думаю, что есть какие-то проблемы с элементами и типами, определенными в схеме, и нет ничего плохого в генерируемых классах. Если вы попробуете простую примерную программу, сериализующую некоторые экземпляры объектов сгенерированных классов JAXB, вы увидите, что NS-квалификатор действителен в соответствии с схемой. Но JAXB также учитывает тот факт, что вы можете по какой-либо причине добавить другие классы в этот пакет. –