【问题标题】:What is default namespace for public enum type?公共枚举类型的默认命名空间是什么?
【发布时间】:2015-10-01 08:21:24
【问题描述】:

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

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


    【解决方案1】:

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

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

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

    很高兴看到单个 .xsd 文件。

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

    【讨论】:

    • 是的,我做到了。导入的架构的 targetNamespace 是否继承其导入器的?
    • (这很淘气!)导入没有命名空间属性,因此所有没有目标命名空间的元素都可以与非限定引用一起使用。
    猜你喜欢
    • 1970-01-01
    • 2013-06-04
    • 2016-03-27
    • 2014-07-24
    • 1970-01-01
    • 2014-09-07
    • 2011-07-08
    • 2010-10-03
    相关资源
    最近更新 更多