标签: cxf-xjc-plugin

JAXB无法为XBRL生成Java类

我正在尝试为XBRL中定义的类型生成Java类.

我的构建过程基于Maven 2,这是我的试验.我只粘贴build部分,它依赖于一些属性:

package 是我的目标包的名称

catalog是目录的路径和文件名.因为我没有互联网连接,我有amny条目,但我认为这些都是必要的

-- 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
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

我试过的所有插件都无法导入xl:nonEmptyURI.

但是xl映射到http://www.xbrl.org/2003/XLink(在我的目录中)哪个导入 <import namespace="http://www.w3.org/1999/xlink" schemaLocation="xlink-2003-12-31.xsd"/>定义 nonEmptyURI

怎么了?我该如何解决?

Apache 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>
Run Code Online (Sandbox Code Playgroud)

失败了

parsing a schema...

[ERROR] src-resolve: Cannot resolve the name 'xl:nonEmptyURI' …
Run Code Online (Sandbox Code Playgroud)

jaxb xbrl maven-jaxb2-plugin jaxb2-maven-plugin cxf-xjc-plugin

9
推荐指数
1
解决办法
2万
查看次数

JAXB使用fractionDigits对BigDecimal进行编组

所以这是我的问题.我给了一个我生成的XML文件应符合的XSD.使用org.apache.cxf.cxf-xjc-pluginmaven插件和外部绑定文件,我生成源代码.但是当我在尝试编组我的对象时,生成的XML不符合我的要求.

我的XSD包含以下内容:

<xsd:element maxOccurs="1" minOccurs="0" name="amount">
  <xsd:simpleType>
    <xsd:restriction base="xsd:decimal">
      <xsd:totalDigits value="13" />
      <xsd:fractionDigits value="2" />
    </xsd:restriction>
  </xsd:simpleType>
</xsd:element>
...
<xsd:element maxOccurs="1" minOccurs="0" name="rate">
  <xsd:simpleType>
    <xsd:restriction base="xsd:decimal">
      <xsd:totalDigits value="8" />
      <xsd:fractionDigits value="5" />
    </xsd:restriction>
  </xsd:simpleType>
</xsd:element>
Run Code Online (Sandbox Code Playgroud)

生成的XML片段如下所示:

<amount>109.5</amount>
...
<rate>10.25</rate>
Run Code Online (Sandbox Code Playgroud)

虽然我期待它是:

<amount>109.50</amount>
...
<rate>10.25000</rate>
Run Code Online (Sandbox Code Playgroud)

有没有办法以干净的方式解决这个问题?

我不想为每一个写几个适配器totalDigits,fractionDigits组合.由于XSD可能会发生变化,因此我希望保持生成的源代码不变.

java xsd jaxb xjc cxf-xjc-plugin

6
推荐指数
1
解决办法
7345
查看次数

如何在同一个 ObjectFactory 中生成多个 .xsd?

我需要一个包含来自多个模式的多个 java 对象的 ObjectFactory。我对几个不同的插件和这些插件的变体的运气都是零。目前我正在使用以下内容:

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-xjc-plugin</artifactId>
    <version>2.6.2</version>
    <configuration>
        <extensions>
            <extension>org.apache.cxf.xjcplugins:cxf-xjc-dv:2.6.2</extension>
        </extensions>
    </configuration>
    <executions>
        <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>xsdtojava</goal>
            </goals>
            <configuration>
                <sourceRoot>${basedir}/target/generated-sources/xjc</sourceRoot>
                <xsdOptions>
                    <xsdOption>
<xsd>${basedir}/src/main/resources/osds/schemas/IataAsmAdmEvent.xsd</xsd>
<xsd>${basedir}/src/main/resources/osds/schemas/IataAsmCnlEvent.xsd</xsd>
<xsd>${basedir}/src/main/resources/osds/schemas/IataAsmEqtEvent.xsd</xsd>
<packagename>com.mypackage</packagename>
                    </xsdOption>
                </xsdOptions>
            </configuration>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

使用此插件和许多其他插件,我只能生成仅包含列表中最后一个架构的 ObjectFactory。以前的 xsd 都没有在 OF 中作为 java 对象。谁能帮我解决这个问题吗?

谢谢!

java xsd objectfactory cxf-xjc-plugin

6
推荐指数
1
解决办法
4171
查看次数

如何在Java 11和Maven中运行XJC?

为了从XSD生成Java类(用于读取XML文件),我们使用了jaxb2-maven-plugin和Java8。

对于Java 11,我们遇到了很多问题...

哪些库和插件可以工作(今天),从而允许使用Java 11和Maven从XSD生成Java代码?如果可能,请指出不同的解决方案,例如使用cxf-xjc-plugin,jaxb2-Maven-Plugin和其他解决方案。

jaxb maven jaxb2-maven-plugin cxf-xjc-plugin java-11

5
推荐指数
1
解决办法
976
查看次数

为什么使用 cxf-xjc-plugin 从 xsd 生成代码 (java) 在 jdk 11 (amazon) 上不起作用,但在 java 8 上却起作用

我将一个项目从 迁移Java 8Java 11,并且在XSD使用生成代码时遇到了一些麻烦cxf-xjc-plugin.

即使我确实升级到了cxf-xjc-plugin版本3.3.0,在构建项目时仍然遇到异常

我的pom.xml

       ...
           <plugin>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-xjc-plugin</artifactId>
                <version>3.3.0</version>
                <configuration>
                    <extensions>
                        <extension>org.apache.cxf.xjcplugins:cxf-xjc-dv:2.3.0</extension>
                    </extensions>
                </configuration>
                <executions>
                    <execution>
                        <id>generate-sources</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>xsdtojava</goal>
                        </goals>
                        <configuration>
                            <sourceRoot>${basedir}/target/generated-sources/xjc</sourceRoot>
                            <xsdOptions>
                                <xsdOption>
                                    <xsd>src/main/resources/xsd/leehwak.xsd</xsd>
                                    <packagename>fr.lee.hwak.batch.input</packagename>
                                    <extensionArgs>
                                        <arg>-encoding</arg>
                                        <arg>UTF-8</arg>
                                    </extensionArgs>
                                </xsdOption>
                            </xsdOptions>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        ...
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪

[ERROR] C:\Users\Achraf\IdeaProjects\lee\lee-batch\target\null [-1:-1]: Failed to create model
com.sun.istack.SAXParseException2; Failed to create model
    at com.sun.tools.xjc.ErrorReceiver.error(ErrorReceiver.java:64)
    at org.apache.cxf.maven_plugin.XSDToJavaRunner.loadModel(XSDToJavaRunner.java:241)
    at org.apache.cxf.maven_plugin.XSDToJavaRunner.run(XSDToJavaRunner.java:177)
    at org.apache.cxf.maven_plugin.XSDToJavaRunner.main(XSDToJavaRunner.java:375)
Caused by: java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at …
Run Code Online (Sandbox Code Playgroud)

java maven-plugin cxf-xjc-plugin

5
推荐指数
1
解决办法
5037
查看次数

如何配置 jaxb/xjc 以仅生成一个类,而不是从更多 xsd-s 中导入的复杂类型中生成重复项?

假设我有 2 个 xsd-s。第一个声明类型 A。第二个导入第一个 xsd(导入命名空间、xmlns:ns=... 等)并声明类型 B,该类型扩展了类型 A (base="ns:B")。像这样:

<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:simpleType name="A">
        <xs:restriction base="xs:string" />
    </xs:simpleType>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:import schemaLocation=".\XSD1.xsd" />
    <xs:simpleType name="B">
        <xs:restriction base="A" />
    </xs:simpleType>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)

我使用 cxf-xjc maven 插件进行代码生成,配置如下:

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-xjc-plugin</artifactId>
    <version>${cxf.version}</version>
    <configuration>
        <extensions>
            <extension>org.apache.cxf.xjcplugins:cxf-xjc-dv:${cxf.version}</extension>
        </extensions>
    </configuration>
    <executions>
        <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>xsdtojava</goal>
            </goals>
            <configuration>
                <xsdOptions>
                    <xsdOption>
                        <xsd>src/main/resources/XSD1.xsd</xsd>
                        <packagename>org.example</packagename>
                    </xsdOption>
                    <xsdOption>
                        <xsd>src/main/resources/XSD2.xsd</xsd>
                        <packagename>org.example.child</packagename>
                    </xsdOption>
                </xsdOptions>
            </configuration>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

我想将父类和子类生成到单独的包中,但是这样 XJC将父类生成到我不想要的两个包中

是否可以告诉 JAXB/XJC 不要这样做,而只创建一个父类 (A) 并从子类 (B) 中的另一个包导入它?

java jaxb xjc cxf-xjc-plugin

5
推荐指数
0
解决办法
391
查看次数

cxf-xjc 插件“必须指定 xsdOptions”错误

我正在使用 cxf-xjc 插件来生成 Java 类。这是成功生成 Java 类的 xjc 命令。

xjc -d C:\Users\abc\devEnv\VcloudJavaClasses -catalog C:\Users\abc\devEnv\schema-files\schemas\external\catalog.xml -b C:\Users\abc\devEnv\schema-files\ 1.5\schemas\vcloud\vcloud.xjb -b C:\Users\abc\devEnv\schema-files\1.5\schemas\vcloud\ovf.xjb -b C:\Users\abc\devEnv\schema-files\1.5\ schemas\extension\vmwextensions.xjb C:\Users\abc\devEnv\schema-files\1.5\schemas\master\master.xsd C:\Users\abc\devEnv\schema-files\1.5\schemas\extension\vmwextensions。 xsd -nv

我正在尝试将此 xjc 命令映射到 cxf-xjc 插件。

但我收到以下错误。

[错误] 无法在项目 vcloud-training 上执行目标 org.apache.cxf:cxf-xjc-plugin:2.3.0:xsdtojava (default-cli):必须指定 xsdOptions -> [帮助 1]

这是关于插件的 pom 部分。

    <plugin>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-xjc-plugin</artifactId>
        <version>2.3.0</version>
        <configuration>
            <extensions>
                <extension>org.apache.cxf.xjcplugins:cxf-xjc-dv:2.3.0</extension>
            </extensions>
        </configuration>
        <executions>
            <execution>
                <id>generate-sources</id>
                <phase>generate-sources</phase>
                <goals>
                    <goal>xsdtojava</goal>
                </goals>
                <configuration>
                    <sourceRoot>C:\Users\abc\devEnv\schema-files-pom</sourceRoot>
                    <xsdOptions>
                        <xsdOption>
                            <xsd>C:\Users\abc\devEnv\schema-files\1.5\schemas\master\master.xsd</xsd>
                            <xsd>C:\Users\abc\devEnv\schema-files\1.5\schemas\extension\vmwextensions.xsd</xsd>
                            <bindingFile>classpath:/schemas/wsdl/http.xjb</bindingFile>
                            <bindingFile>C:\Users\abc\devEnv\schema-files\1.5\schemas\vcloud\vcloud.xjb</bindingFile>
                            <bindingFile>C:\Users\abc\devEnv\schema-files\1.5\schemas\vcloud\ovf.xjb</bindingFile>
                            <bindingFile>C:\Users\abc\devEnv\schema-files\1.5\schemas\extension\vmwextensions.xjb</bindingFile>
                            <catalog>C:\Users\abc\devEnv\schema-files\schemas\external\catalog.xml</catalog>
                        </xsdOption>
                    </xsdOptions>
                </configuration>
            </execution>
        </executions>
    </plugin>
Run Code Online (Sandbox Code Playgroud)

配置有什么问题所以我收到这个错误?

java xml maven cxf-xjc-plugin

3
推荐指数
1
解决办法
1537
查看次数

意外元素(uri:"",local:"").预期要素是(无)

我无法使用cxf-xjc-plugin将响应xml映射到xsd生成的java.

的pom.xml

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-xjc-plugin</artifactId>
                <version>2.3.0</version>
                <configuration>
                    <extensions>
                        <extension>org.apache.cxf.xjcplugins:cxf-xjc-dv:2.3.0</extension>
                    </extensions>
                </configuration>
                <executions>
                    <execution>
                        <id>generate-sources-trans</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>xsdtojava</goal>
                        </goals>
                        <configuration>
                            <sourceRoot>${basedir}/src/main/java</sourceRoot>
                            <xsdOptions>
                                <xsdOption>
                                    <xsd>src/main/resources/Response.xsd</xsd>
                                    <packagename>com.test.response</packagename>
                                    <extensionArgs>
                                        <extensionArg>-Xdv</extensionArg>
                                    </extensionArgs>
                                </xsdOption>                                
                                </xsdOption>
                            </xsdOptions>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
Run Code Online (Sandbox Code Playgroud)

Response.xsd

<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="urn:automatedIDgenerationResponse" xmlns:tns="urn:automatedIDgenerationResponse" xmlns="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <!-- definition of simple elements -->
    <complexType name="generatedIDs">
            <sequence>
                <element name="idType" type="string"/>
                <element name="id" type="string"/>
            </sequence>
    </complexType>
    <element name="automatedIDgenerationResponse" type="tns:automatedIDResponse"/>
    <complexType name="automatedIDResponse">
        <sequence>
            <element name="requestID" type="string" nillable="false"/>
            <element name="status" type="string" nillable="false"/>
            <element name="errorCode" …
Run Code Online (Sandbox Code Playgroud)

java xml xsd pom.xml cxf-xjc-plugin

1
推荐指数
1
解决办法
5745
查看次数