公共枚举类型的默认名称空间是什么?



我有一个包含内部枚举类型的类。

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

哪一个是正确的?

随JAXB(和JDK)一起提供的XML模式生成器schemagen从类Address生成两个.xsd文件(如图所示),非常像您从maven插件发布的输出文件。但是,第一个.xsd文件包含

  <xs:import schemaLocation="schema2.xsd"/>

不在您的第一个。xsd中。你删除这个元素了吗?有了这个元素,就没有理由怀疑这对.xsd文件了。

如果能看到单个.xsd文件就好了。

您还可以使用xjc从.xsd文件生成Java类并比较结果。

最新更新