Что такое пространство имен по умолчанию для публичного типа enum?
У меня есть класс, который содержит внутренний тип перечисления.
@XmlRootElement
public class Address {
@XmlEnum
@XmlType(name="addressType")
public static enum Type {
}
}
Вот мой package-info.java
,
@XmlSchema(
attributeFormDefault = XmlNsForm.UNQUALIFIED,
elementFormDefault = XmlNsForm.QUALIFIED,
namespace = "http://some",
xmlns = {
@XmlNs(prefix = "xsi",
namespaceURI = XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI)
}
) @XmlAccessorType(XmlAccessType.NONE)
package some;
Это работает найти, когда я использую JAXBContex # generateSchema.
Но org.codehaus.mojo:jaxb2-maven-plugin:schemagen генерирует отдельные схемы.
Один для address
который имеет пространство имен,
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tns="..."
targetNamespace="...">
<xs:complexType name="address">
...
<xs:sequence>
...
<xs:element name="type" type="addressType"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
а другой для addressType
который не имеет пространства имен.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0">
<xs:simpleType name="addressType">
<xs:restriction base="xs:string">
<xs:enumeration value="CC"/>
<xs:enumeration value="BCC"/>
<xs:enumeration value="TO"/>
<xs:enumeration value="REPLY_TO"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
Какой из них прав?
1 ответ
Генератор XML-схемы schemagen
который поставляется вместе с JAXB (и JDK) генерирует два файла.xsd из класса Address (как показано), очень похожий на те, которые вы опубликовали в качестве вывода из плагина maven. Тем не менее, первый файл.xsd содержит
<xs:import schemaLocation="schema2.xsd"/>
которого нет в вашем первом.xsd. Вы удалили этот элемент? С этим элементом нет оснований сомневаться в паре файлов.xsd.
Было бы неплохо увидеть один файл.xsd.
Вы также можете использовать xjc для генерации классов Java из файлов.xsd и сравнения результатов.