获取JAXBexception,如“两个类具有相同的XML类型名称……”

获取JAXBexception,例如“两个类具有相同的XML类型名称……”,

以下是exception详细信息

线程“main”中的exceptioncom.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException:IllegalAnnotationExceptions的1个计数两个类具有相同的XML类型名称“city”。 使用@ XmlType.name和@ XmlType.namespace为它们分配不同的名称。 此问题与以下位置有关:com.model.City的com.model.City com.model.City com.model.Address.getCurrentCity()at com.model.Address此问题与以下位置有关:at com.common公共com.common.City com.model.Address.getPreviousCity()at com.model.Address

at com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException $ Builder.check(Unknown Source)at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(Unknown Source)at com.sun位于com.sun.xml.internal的com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl $ JAXBContextBuilder.build(未知来源)的.xml.internal.bind.v2.runtime.JAXBContextImpl。(未知来源)。位于sun.reflect.NativeMethodAccessorImpl的sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)的com.sun.xml.internal.bind.v2.ContextFactory.createContext(未知来源)中的bind.v2.ContextFactory.createContext(未知来源)。在位于javax.xml的javax.xml.bind.ContextFinder.newInstance(未知来源)的java.lang.reflect.Method.invoke(未知来源)的sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)中调用(未知来源)。来自com.PojoToXSD.m的javax.xml.bind.JAXBContext.newInstance(未知来源)的javax.xml.bind.JAXBContext.newInstance(未知来源)中的bind.ContextFinder.find(未知来源) 艾因(PojoToXSD.java:17)

我举了这样的例子:

package **com.model**; ---->this package contains 'Address' class and 'City' class public class Address { private String areaName; private City currentCity; private com.common.City previousCity; } package com.model; public class City { private String cityName; } 

“com.common”包中的另一个城市类。

 package **com.common**; public class City { private String pinCode; } 

我们需要创建XSD并需要使用项目中的现有代码进行编组和解组(如上面的示例代码),代码没有任何注释,如“@ XmlRootElement / @ XmlType”,我们无法更改源代码。

我想知道是否有任何解决方案可以解决上述问题或任何其他方法来创建XSD和编组/解组(如MOXy..etc)?

如果我可以从任何一个人那里得到解决方案,那将是很棒的….请提前感谢。

谢谢,

萨蒂亚。

注意:我是EclipseLink JAXB(MOXy)的负责人,也是JAXB(JSR-222)专家组的成员。

如果您可以注释类

如果您可以修改类,则只需向其中一个City类添加@XmlType注释即可更改相应的XML模式类型名称。

 package **com.common**; @XmlType(name="city2") public class City { private String pinCode; } 

如果您无法注释class级

MOXy提供了一个外部映射文档扩展,可用于将JAXB元数据应用于无法更改的类。

         

了解更多信息


UPDATE

1)我们只需要为一个City类编写绑定文件,或者需要编写所有其他2个类(我的意思是地址和另一个城市)?

MOXy的外部映射文档可用于扩充或完全替换(参见: http : //blog.bdoughan.com/2011/09/mapping-objects-to-multiple-xml-schemas.html )类的元数据。 如果您需要进行的唯一更改是其中一个City类,那么您不需要包含其他类。

2)在绑定文件中,您只考虑了类名,不需要采用City中定义的属性(我的意思是pinCode)?

像任何JAXB实现一样,MOXy将默认映射应用于所有类。 您只需要为希望映射行为与默认值不同的位置提供元数据。

3)我们需要为此选择MOXy吗?

JAXB没有标准的外部映射文档。 我所描述的是一个MOXy扩展。 如果您使用的是JAXB RI,可以查看与Annox的集成。