9

XBRL で定義された型の Java クラスを生成しようとしています。

私のビルド プロセスは Maven 2 に基づいています。build一部のプロパティに依存するセクションのみを貼り付けます。

package私のターゲットパッケージの名前です

catalogカタログのパスとファイル名です。私はインターネットに接続していないので、たくさんのエントリがありますが、それらは常に必要だと思います

-- TR9401 for XBRL resources --
SYSTEM http://www.xbrl.org/2003/XLink http/www.xbrl.org/2003/xl-2003-12-31.xsd
SYSTEM http://www.w3.org/1999/xlink http/www.xbrl.org/2003/xlink-2003-12-31.xsd

xsd.pathXSDが存在するディレクトリです

xsd.file次のミニマリスト XSD のファイル名です

     <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
       <xs:import namespace="http://www.xbrl.org/2003/instance"
        schemaLocation="http://www.xbrl.org/2003/xbrl-instance-2003-12-31.xsd"/>
     </xs:schema>

私が試したすべてのプラグインはインポートに失敗しxl:nonEmptyURIます。

しかし、 (私のカタログにある)に xlマッピングされ、どのインポートが定義 されていますかhttp://www.xbrl.org/2003/XLink<import namespace="http://www.w3.org/1999/xlink" schemaLocation="xlink-2003-12-31.xsd"/>nonEmptyURI

どうしたの?どうすれば修正できますか?

アパッチ CXF

        <plugin>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-xjc-plugin</artifactId>
            <executions>
                <execution>
                    <id>generate-sources</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>xsdtojava</goal>
                    </goals>
                    <configuration>
                        <xsdOptions>
                            <xsdOption>
                                <catalog>${catalog}</catalog>
                                <xsd>${xsd.path}/${xsd.file}</xsd>
                                <packagename>${package}</packagename>
                            </xsdOption>
                        </xsdOptions>
                    </configuration>
                </execution>
            </executions>
        </plugin>

で失敗する

parsing a schema...

[ERROR] src-resolve: Cannot resolve the name 'xl:nonEmptyURI' to a(n) 'type definition' component.
  line 389 of cache/http/www.xbrl.org/2003/xbrl-linkbase-2003-12-31.xsd

jvnet maven-jaxb2-プラグイン

        <plugin>
            <!-- http://jaxb.java.net/ -->
            <groupId>org.jvnet.jaxb2.maven2</groupId>
            <artifactId>maven-jaxb2-plugin</artifactId>
            <version>0.8.2</version>
            <executions>
                <execution>
                    <id>generate</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <catalog>${catalog}</catalog>
                <schemaDirectory>${xsd.path}</schemaDirectory>
                <generatePackage>${package}</generatePackage>
                <strict>false</strict>
                <extension>true</extension>
                <plugins>
                    <plugin>
                        <groupId>org.jvnet.jaxb2_commons</groupId>
                        <artifactId>jaxb2-basics</artifactId>
                        <version>0.6.4</version>
                    </plugin>
                    <plugin>
                        <groupId>org.jvnet.jaxb2_commons</groupId>
                        <artifactId>jaxb2-basics-annotate</artifactId>
                        <version>0.6.4</version>
                    </plugin>
                </plugins>
                <args>
                    <arg>-Xannotate</arg>
                    <arg>-XtoString</arg>
                </args>
            </configuration>
        </plugin>

エラーは同じですが、もう少し詳細です

[INFO] Parsing input schema(s)...
[ERROR] Error while parsing schema(s).Location [ cache/http/www.xbrl.org/2003/xbrl-linkbase-2003-12-31.xsd{389,74}].
org.xml.sax.SAXParseException: undefined simple type 'xl:nonEmptyURI'
    at com.sun.xml.xsom.impl.parser.ParserContext$1.reportError(ParserContext.java:180)
    at com.sun.xml.xsom.impl.parser.NGCCRuntimeEx.reportError(NGCCRuntimeEx.java:175)
    at com.sun.xml.xsom.impl.parser.DelayedRef.resolve(DelayedRef.java:110)
[...]
[ERROR] Error while parsing schema(s).Location [ cache/http/www.xbrl.org/2003/xbrl-linkbase-2003-12-31.xsd{412,77}].
org.xml.sax.SAXParseException: undefined simple type 'xl:nonEmptyURI'
    at com.sun.xml.xsom.impl.parser.ParserContext$1.reportError(ParserContext.java:180)
    at com.sun.xml.xsom.impl.parser.NGCCRuntimeEx.reportError(NGCCRuntimeEx.java:175)
    at com.sun.xml.xsom.impl.parser.DelayedRef.resolve(DelayedRef.java:110)
[ERROR] Failed to execute goal org.jvnet.jaxb2.maven2:maven-jaxb2-plugin:0.8.2:generate (generate) on project solvency2: Unable to parse input schema(s). Error messages should have been provided. -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.jvnet.jaxb2.maven2:maven-jaxb2-plugin:0.8.2:generate (generate) on project solvency2: Unable to parse input schema(s). Error messages should have been provided.

Mojo jaxb2-maven-plugin

         <plugin>
            <!--http://mojo.codehaus.org/ -->
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jaxb2-maven-plugin</artifactId>
            <version>1.5</version>
            <executions>
                <execution>
                    <id>xjc</id>
                     <phase>generate-sources</phase>
                    <goals>
                        <goal>xjc</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <schemaDirectory>${xsd.path}</schemaDirectory>
                <packageName>${package}</packageName>
                <catalog>${catalog}</catalog>
            </configuration>
        </plugin>

同じエラー、Xerces による別の言い方

[ERROR] file:[...]cache/http/www.xbrl.org/2003/xbrl-linkbase-2003-12-31.xsd[472,74]
org.xml.sax.SAXParseException: src-resolve: Cannot resolve the name 'xl:nonEmptyURI' to a(n) 'simpleType definition' component.
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:131)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:384)
4

2 に答える 2

4

あなたのケースでは、すべてのスキーマをダウンロードしてカタログに追加する必要があります。Java クラスの生成で同様の問題がありましたが、カタログをまったく使用せず、XBRL が使用するすべてのスキーマを同じフォルダーに入れました。XBRL サイトで整理されているのと同じ方法:

src\main\resources\xbrl\
                       xbrl-instance-2003-12-31.xsd
                       xbrl-linkbase-2003-12-31.xsd
                       xl-2003-12-31.xsd
                       xlink-2003-12-31.xsd
                       xbrl_bindings.xjb

また、ソースの生成中に発生する競合を解決し、同じフォルダーに入れることがわかるように、JAXB バインディングを追加しました。

xbrl_bindings.xjb:

<bindings xmlns="http://java.sun.com/xml/ns/jaxb"
          xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
          xmlns:xs="http://www.w3.org/2001/XMLSchema"
          xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
          version="2.1">
         <bindings schemaLocation="xl-2003-12-31.xsd" version="1.0">
           <bindings node="//xs:schema//xs:element[@name='title']">
             <property name="xlTitle"/>
         </bindings>
</bindings>

Maven プラグイン構成:

         <plugin>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-xjc-plugin</artifactId>
            <version>2.6.1</version>
            <executions>
                <execution>
                    <id>generate-sources</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>xsdtojava</goal>
                    </goals>
                    <configuration>
                        <sourceRoot>${basedir}/target/generated/src/main/java</sourceRoot>
                        <xsdOptions>
                            <xsdOption>
                                <bindingFile>${path.to.xsd}/xbrl_bindings.xjb</bindingFile>
                                <xsd>${path.to.xsd}/xbrl-instance-2003-12-31.xsd</xsd>
                            </xsdOption>
                        </xsdOptions>
                    </configuration>
                </execution>
            </executions>
        </plugin>

XBRLをお楽しみください:)

于 2012-12-06T20:53:50.010 に答える
0

カタログでは、おそらく SYSTEM を PUBLIC に変更する必要があります。

参照:この記事

この記事によると、PUBLIC は名前空間 URI の照合に使用されます。

-- Match address.xsd by URL --
SYSTEM "http://www.example.com/address/address.xsd" "imports/address.xsd"

-- Match phone-number.xsd by namespace URI --
PUBLIC "http://www.example.com/phone-number" "imports/phone-number.xsd"

XSD をダウンロードして imports フォルダーに入れましたか?

于 2012-10-28T13:58:51.500 に答える