public 枚举类型的默认命名空间是什么?

What is default namespace for public enum type?

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

@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从class地址生成两个.xsd文件(如图所示),非常类似于您作为 Maven 插件输出发布的那些。但是,第一个 .xsd 文件包含

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

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

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

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