1

JavaモデルをいくつかのXMLにマップしようとしています。これを行うために、私はJAXBのMOXy実装を使用しています。Javaモデルから有効なXMLスキーマを生成する際に問題が発生しました。次のモデルを使用します。

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

これは私が生成されることを期待するものです。なぜこれが当てはまるのか誰かが知っていますか?

4

1 に答える 1

0

アップデート

この問題(https://bugs.eclipse.org/354130)は、EclipseLink 2.3.1および2.4.0ストリームで修正され、2011年8月9日から毎晩ダウンロードサイトから入手できるようになります。

于 2011-08-08T13:26:50.803 に答える