gpt4 book ai didi

java - 为包含多个带有预先存在的对象的导入模式的模式仅生成唯一的 JAXB 对象

转载 作者:行者123 更新时间:2023-11-30 04:02:39 25 4
gpt4 key购买 nike

假设我有三个架构:main.xsd、common1.xsd 和 common2.xsd。

common1 和 common2 已经有自己的预定义包,其中包含 jaxb 对象。

main.xsd 导入 common1.xsd 和 common2.xsd。

当我尝试为 main.xsd 生成 jaxb 对象时,它当然会生成它通过 common1 和 common2 引用的所有对象,但会生成导致我的问题的包 main 。现在,当我尝试将数据设置为 main 中包含对 java 代码中的 common1 或 common2 的引用的元素时,我当然会收到 common1.element 与 main.element 不匹配的错误。

例如)在我的java代码中:

common1.ObjectFactory.getExData() 将返回 common.ExData。main.setExData(ExDataType exampleData) 将从包 main 中获取 ExDataType。但我从common1中的ObjectFactory获取此数据,因此它引用common1.ExDataType

我的问题是,如何为 main 生成这些对象,而不重复在 main 包中创建的类型,而是引用现有的 common1 或 common2 对象?

编辑
剧集文件似乎是可行的方法,所以我尝试了这条路线。我首先运行命令,使用 Blaise 的答案提供的命令为每个导入的模式生成剧集文件(但替换了我的文件名/路径):

xjc -d out -episode product.episode Product.xsd

然后,我尝试运行命令,使用以下命令为包含这些导入的模式生成 JAXB 类:

xjc -d out ProductPurchaseRequest.xsd -extension -b product.episode

第一个命令似乎只是在我在 out 参数中指定的位置生成“product.xsd”的所有类文件,并且我在任何地方都没有看到“product.episode”文件。第二个命令为其引用的每个模式创建了一个新包,然后为每个模式创建了所有对象类,但它们都包含错误的包引用,而且非常困惑。

我在运行这些命令时缺少什么?

最佳答案

以下是您可以使用的几种方法:

使用外部绑定(bind)文件指定与现有类相对应的复杂类型

下面是一个示例绑定(bind)文件,它将名为 Foo 的复杂类型与现有类 com.example.Foo 相关联:

<jxb:bindings schemaLocation="yourSchema.xsd">
<jxb:bindings node="//xs:complexType[@name='Foo']">
<jxb:class ref="com.example.Foo"/>
</jxb:bindings>
</jxb:bindings>

使用剧集文件

如果你有很多类(class),上述过程是相当耗费人力的。相反,您可以利用剧集文件。当您从 XML 模式生成类模型时,可以生成剧集文件。然后,当您从引用第一个 XML 模式的另一个 XML 模式生成类时,您可以指向剧集文件以防止重新生成类。

关于java - 为包含多个带有预先存在的对象的导入模式的模式仅生成唯一的 JAXB 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21586396/

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