栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

xjc:两个声明导致ObjectFactory类发生冲突

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

xjc:两个声明导致ObjectFactory类发生冲突

我将引用网上JAXB上最官方的非官方指南。

当架构包含外观相似的元素/类型名称时,它们可能导致“两个声明在ObjectFactory类中引起冲突”错误。更准确地说,对于所有类型和许多元素中的每一个(确切地说,哪些元素可以得到工厂,而哪些不容易解释),XJC在同一包中的ObjectFactory类上生成一个方法。为XJC生成一些文件的每个包创建ObjectFactory类。方法的名称是从XML元素/类型名称派生的,如果两个元素/类型试图生成相同的方法名称,则会报告错误。

也就是说,您有两种选择。

首先是像这样定义一个外部绑定XML

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"  xmlns:xs="http://www.w3.org/2001/XMLSchema"  version="1.0">  <jaxb:bindings schemaLocation="Core.xsd">    <jaxb:bindings node="//xs:element[@name='BioSampleSet']/xs:complexType">      <jaxb:factoryMethod name="TypeBioSampleSet"/>    </jaxb:bindings>    <jaxb:bindings node="//xs:element[@name='TargetBioSampleSet']/xs:complexType">      <jaxb:factoryMethod name="TypeTargetBioSampleSet"/>    </jaxb:bindings>  </jaxb:bindings></jaxb:bindings>

在生成的

ObjectFactory
类中,这将创建两个称为
createTypeBioSampleSet
和的方法
createTypeTargetBioSampleSet
(JAXB会将您指定的名称附加到word上
create
)可用于生成
BioSampleSet
TargetBioSampleSet
对象。

(不必为 这两种 类型 定义一个绑定。)

我不确定为什么JAXB拒绝从给定的架构中生成类,但是当我仅指定一个绑定(

BioSampleSet
例如)时,另一种类型的工厂方法就这样命名,
createTypeProjectProjectTypeSubmissionWhateverThisAndThatTargetTargetSampleBioCatDogWoofTypeIDoNotKnowWhatElse
因此我认为JAXB在此长方法标识符上被阻塞了,因为它以某种方式设法为两种类型创建了相同的对象。我认为这是JAXB中的一些实现细节。

另一个解决方案是为创建一个基本类型,

BioSampleSet
并在两个位置都使用它

<xs:element name="ProjectTypeSubmission">...  <xs:element name="Target">    ...    <xs:element name="BioSampleSet" type="typeBioSampleSet" minOccurs="0" maxOccurs="1"/>    ...  </xs:element>  ...  <xs:element name="TargetBioSampleSet" type="typeBioSampleSet"/>  ...<xs:element/>...<xs:complexType name="typeBioSampleSet">  <xs:sequence>    <xs:element name="ID" maxOccurs="unbounded" type="xs:token"></xs:element>  </xs:sequence></xs:complexType>

最好的解决方案是从架构中删除所有匿名类型声明。如果可以的话,请这样做,因为这种模式看起来很混乱(至少对我而言)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/453198.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号