JAXB无法为XBRL生成Java类

JAXB无法为XBRL生成Java类,jaxb,maven-jaxb2-plugin,xbrl,jaxb2-maven-plugin,cxf-xjc-plugin,Jaxb,Maven Jaxb2 Plugin,Xbrl,Jaxb2 Maven Plugin,Cxf Xjc Plugin,我正在尝试为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 SYST

我正在尝试为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.path
是xsd所在的目录

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>
失败于

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 Mojo jaxb2 maven插件
在目录中,您可能需要使用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并将其放在导入文件夹中了吗?

在您的案例中,您肯定需要下载所有模式并将其添加到目录中。我在生成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>

org.apache.cxf
cxf xjc插件
2.6.1
生成源
生成源
xsdtojava
${basedir}/target/generated/src/main/java
${path.to.xsd}/xbrl_bindings.xjb
${path.to.xsd}/xbrl-instance-2003-12-31.xsd

享受XBRL:)

情况更糟。现在我无法读取模式文档
http://www.xbrl.org/2003/xbrl-instance-2003-12-31.xsd
由于我想将目录用作缓存,我认为我确实应该使用系统;是什么让你认为应该使用公共服务?谢谢弗拉基米尔的回答。我已经建立了一个Github存储库,其中有一个示例项目,在“如何执行此文件?”中,您可以给我一个示例输入数据。它要求输入文件为argumentSarath,您想要什么样的示例?这些XSD可供公众使用,但如果您需要一些更具体的示例,请告诉我。我会给你买一些的。对我有用吗
[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)
-- 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"
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
<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>
         <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>