使用XJC忽略ElementFormDefault =“unqualified”

时间:2016-06-30 10:44:04

标签: java xml xjc

我正在使用模式中的XJC生成java模型类,我不希望elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED出现在我的package-info.java中。我尝试了两种不同的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 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生成package-info,如下所示 -

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

有人可以帮忙解释为什么在第二个xml中忽略了elementFormDefault =“unqualified”。

1 个答案:

答案 0 :(得分:0)

这里没有什么是错的(如果你已经意识到这一点,道歉)。

JAXB提供商只是猜测你对这个软件包做了什么,但这不会影响任何生成的类,只会影响你可能添加到该软件包的新类。

所有生成的类都会很好地编组,本地元素不会像你一样用 elementFormDefault = unqualified 来编写NS,因为它们是用一个生成的完整的JAXB注释。

也许你已经知道了,而且我没有回答你的问题,但是我想象你认为这是一个你需要处理的错误,只是指出它不会是你自上而下,只使用生成的类。

但是为了得到真正的答案,为什么这里存在差异,您可能不得不深入了解实施细节和JAXB提供者文档以便更好地理解。我也没有看到标准的绑定自定义here,因此也可能是提供者特定的。