gpt4 book ai didi

java - Jibx Maven插件: cross-reference among schemas when they are converted in different build executions

转载 作者:行者123 更新时间:2023-12-01 15:13:58 26 4
gpt4 key购买 nike

我使用 jibx Maven 插件将一些 xsd 转换为 Java 源代码。在模式 A 中,存在对模式 B 中定义的类型的引用。之前,我使用了此 pom.xml 配置,一切正常:

<plugin>
<groupId>org.jibx</groupId>
<artifactId>jibx-maven-plugin</artifactId>
<version>1.2.3</version>
<configuration>
<schemaLocation>${basedir}/resources/oxm/schemas</schemaLocation>
<schemaBindingDirectory>${basedir}/src/java</schemaBindingDirectory>
<includeSchemas>
<includeSchema>schemaA.xsd</includeSchema>
<includeSchema>schemaB.xsd</includeSchema>
<includeSchema>schemaC.xsd</includeSchema>
</includeSchemas>
<verbose>true</verbose>
</configuration>
</plugin>

输入模式 A 类似于:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="myApp.com/schema/schemaA"targetNamespace="http://myApp.com/schema/schemaA" xmlns:rsType="http://myApp.com/schema/schemaB">
<xs:import schemaLocation="schemaB.xsd" namespace="http://myApp.com/schema/schemaB" />
<xs:complexType name="classAType">
<xs:sequence>
<xs:element name="objB" type="rsType:classBType" />
</xs:sequence>
<xs:attribute name="foo" type="xs:int" />
</xs:complexType>

输入模式 B 具有与 classBType 定义类似的代码。

以前的 Java 源输出类似于:

class classA
{
classB objB;
int foo;
}

最近,我在 pom.xml 中分离了不同构建执行中模式的转换,以便能够为它们定义不同的目标包。我的新 pom.xml 是:

<plugin>
<groupId>org.jibx</groupId>
<artifactId>jibx-maven-plugin</artifactId>
<version>1.2.3</version>
<configuration>
<schemaLocation>${basedir}/resources/oxm/schemas</schemaLocation>
<schemaBindingDirectory>${basedir}/src/java</schemaBindingDirectory>
<verbose>true</verbose>
</configuration>
<executions>
<execution>
<id>schemaCodegenA</id>
<goals>
<goal>schema-codegen</goal>
</goals>
<configuration>
<includeSchemas>
<includeSchema>schemaA.xsd</includeSchema>
</includeSchemas>
<options>
<package>com.myApp.jibxgenerated.schema.resource</package>
</options>
</configuration>
</execution>

(...每组模式执行一次)

现在的 Java 源输出是:

class classA
{
// all properties of class B here
int classBattrib1;
int classBattrib2;
int classBattribN;
int foo;
}

这是预期的行为吗?我想将 B 类引用返回到 A 类源代码中,有什么办法可以实现这一点吗?

预先感谢您的帮助。

最佳答案

用户1550682,

实际上 JiBX 处理这种情况非常容易。您可以将每个模式打包在单独的 jar 中,并使用 Maven 插件轻松引用子模块。

在此处查看模块化架构的说明: http://jibx.sourceforge.net/maven-jibx-plugin/modular-codegen.html

并查看 github 中的示例代码: https://github.com/jibx/maven-plugin/tree/master/test-suite/base-binding-test

此示例使用三个简单的架构:公司 -> 地址 -> 人员。并进行了一个简单的测试来编码和解码一些 xml。

希望这会有所帮助!

关于java - Jibx Maven插件: cross-reference among schemas when they are converted in different build executions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11909972/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com