当前位置: 首页 > 面试题库 >

JAXB xsd:include和单独的软件包

闾丘康安
2023-03-14
问题内容

我有以下情况:

有2个xsd文件。第一个定义了根元素和几种类型。

第二个包括第一个,并且扩展了其中一种类型。在此文件中没有定义根类型。

从第一个xsd中,在包(a)中生成一个模型。第二个模式应该为其他类型创建一个新的程序包(b),但是要重用生成的程序包a。我通过使用一个绑定文件解决了这个问题,该文件指向先前生成的元素(在包a中)。到目前为止,该方法有效,但是..

JAXB在包A中生成一个ObjectFactory,其中包含用于根元素的create方法。对于第二个模式,还在程序包B中创建一个ObjectFactory。该类还具有用于同一根元素的create方法。

为了能够使用所有类型,使用多个对象工厂(newInstance(a.ObjectFactory.class, b.ObjectFactory.class))创建了jaxb上下文。

在运行时,这将导致以下错误:

com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException:2个IllegalAnnotationExceptions计数元素名称{http://www.example.org/Scenario/}scenario具有多个映射

我应该以不同的方式生成软件包吗?还是有可能使用绑定文件来防止对象工厂使用重复的方法?


问题答案:

首先,重要的是要了解,如果您使用xsd:include而不是xsd:import,则没有两种不同的模式。它是几个文件中的一个模式,然后将其编译到几个程序包中,然后欺骗JAXB将这些程序包组合在一起,看起来更像是黑客。

因此,我的主要建议是改为使用xsd:import并考虑单独的模式编译方法。

如果要继续使用xsd:include,则必须欺骗JAXB。例如,您可以删除或调整一个(或两个)ObjectFactory类,并基于单个类而不是对象工厂来构建JAXB上下文。您也可以使用jaxb.index代替对象工厂。但这全都是黑客。



 类似资料:
  • 我正在开发一个需要调用一些Jenkins实例的应用程序,为此我使用jenkins-cli. jar 我可以使用命令行调用jar以轻松提取其输出。然而,我需要自己解析异常。 为了正确处理异常,我现在通过反射调用jar的main方法: 但现在,我需要以某种方式将jar打印的输出获取到系统中。我知道我可以使用这个系统。放样()。问题是,我有其他线程同时记录。我在这里读到了这个系统。out是特定于类加载器

  • 本节将会描述各个安装元件的详细信息。各元件按用户可以识别的阶段分组。 它们在安装过程中按次序显示出来。注意,每次安装并不会使用所有的模块; 至于使用哪些模块,取决于您的安装方法和您的硬件。 6.3.1. 启动 Debian 安装程序与配置硬件 假设 Debian 安装程序已经启动,然后您看到了初始画面。 此时, debian-installer 的能力还很有限。它还不了解您的硬件,首选的语言, 甚

  • 本节将会描述各个安装元件的详细信息。各元件按用户可以识别的阶段分组。 它们在安装过程中按次序显示出来。注意,每次安装并不会使用所有的模块; 至于使用哪些模块,取决于您的安装方法和您的硬件。 6.3.1. 启动 Debian 安装程序与配置硬件 假设 Debian 安装程序已经启动,然后您看到了初始画面。 此时, debian-installer 的能力还很有限。它还不了解您的硬件,首选的语言, 甚

  • 本节将会描述各个安装元件的详细信息。各元件按用户可以识别的阶段分组。 它们在安装过程中按次序显示出来。注意,每次安装并不会使用所有的模块; 至于使用哪些模块,取决于您的安装方法和您的硬件。 6.3.1. 启动 Debian 安装程序与配置硬件 假设 Debian 安装程序已经启动,然后您看到了初始画面。 此时, debian-installer 的能力还很有限。它还不了解您的硬件,首选的语言, 甚

  • 在traits内部定义的方法可以访问同一对象中定义的方法一样的公共属性范围,这是很有用的。然而,有没有任何方法可以使两个特征使用相同的属性名称,但每个属性都在不同的范围内,因此不会覆盖

  • 问题内容: 我想知道如何将Express中的所有api路由移到与文件分开的单独文件中 我为每个路由使用了很长的api路由列表。因此,每条路线都在其自己的文件中,例如,但是当我列出这些路线时,它会在 所以我想从下面将api端点列表的一部分删除到一个文件中。 这是我目前拥有的: server.js 路线示例 电影.js 问题答案: 您可以尝试使用以下模块化方法。定义具有每个功能逻辑的控制器文件。例如电