JAXB无法为XBRL生成Java类
我正在尝试为XBRL中定义的类型生成Java类 我的构建过程基于Maven 2,下面是我的试用。我只粘贴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
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>