【问题标题】:Error in XML Schema generated from MOXy JAXB when using @XmlPath and namespace使用 @XmlPath 和命名空间时从 MOXy JAXB 生成的 XML 架构中的错误
【发布时间】:2011-08-07 21:51:56
【问题描述】:

我正在尝试将 java 模型映射到一些 XML。为此,我使用了 JAXB 的 MOXy 实现。我在从 java 模型生成有效的 XML Schema 时遇到了一些麻烦。我使用以下模型:

@XmlRootElement
public class FooBar {
    @XmlAttribute
    @XmlPath("test/@foo")
    private boolean foo;
}

我正在使用以下代码生成架构:

public static void main(String[] args) throws Exception {
    final SchemaOutputResolver sor = new SchemaOutputResolver() {
        @Override
        public Result createOutput(String namespaceUri,
                String suggestedFileName) throws IOException {
            return new StreamResult(System.out);
        }
    };

    JAXBContext jc = JAXBContext.newInstance(FooBar.class);
    jc.generateSchema(sor);
}

我使用以下 package-info.java 文件:

@XmlSchema(namespace = "http://moxy.test", elementFormDefault = XmlNsForm.QUALIFIED)
package test.moxy;

import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

运行测试时,我获得以下架构:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:ns0="http://moxy.test" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://moxy.test" elementFormDefault="qualified">
   <xsd:complexType name="big">
      <xsd:sequence>
         <xsd:element name="test" minOccurs="0">
            <xsd:complexType>
               <xsd:sequence/>
               <xsd:attribute ref="ns0:foo"/>
            </xsd:complexType>
         </xsd:element>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:element name="big" type="ns0:big"/>
   <xsd:attribute name="foo" type="xsd:boolean" use="required"/>
</xsd:schema>

可以看出,最后一个属性元素并不是大家想的那样。如果我删除 package-info.java 文件,则会生成以下架构:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <xsd:complexType name="fooBar">
      <xsd:sequence>
         <xsd:element name="test" minOccurs="0">
            <xsd:complexType>
               <xsd:sequence/>
               <xsd:attribute name="foo" type="xsd:boolean" use="required"/>
            </xsd:complexType>
         </xsd:element>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:element name="fooBar" type="fooBar"/>
</xsd:schema>

这是我期望生成的。有谁知道为什么会这样?

【问题讨论】:

    标签: java xsd jaxb xml-namespaces moxy


    【解决方案1】:

    更新

    这个问题 (https://bugs.eclipse.org/354130) 现已在我们的 EclipseLink 2.3.1 和 2.4.0 流中得到修复,将从 2011 年 8 月 9 日开始在我们的夜间下载站点上提供:

    【讨论】:

    • 感谢 Blaise 的快速回答。我对解决方法有点不确定,这会导致架构 中的以下元素定义。首先,我希望它是像 这样的属性定义,第二件事是“@foo”元素是根据 Eclipses 的模式检查器,这不是一个有效的名称。
    • @Kasper - 你是对的,我没有仔细观察解决方法的输出。我会尽快就这个问题与您联系。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    • 2021-08-23
    相关资源
    最近更新 更多