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

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

以下是异常详细信息

线程“main”中出现异常
com.sun.xml.internal.bind.v2.runtime.illegalannotations异常:1
IllegalAnnotationExceptions的计数两个类具有相同的XML
键入名称“城市”。使用@XmlType.name和@XmlType.namespace分配
他们有不同的名字。此问题与以下方面有关
地点:com.model.City公共com.model.City
com.model.Address.getCurrentCity()位于com.model.Address
问题与以下位置有关:位于com.common.City
在public com.common.City com.model.Address.getPreviousCity()上
com.model.Address


com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException$Builder.check(未知
来源)在
com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(未知
来源)在
com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.(未知)
来源)在
com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(未知
来源)在
com.sun.xml.internal.bind.v2.ContextFactory.createContext(未知
来源)在
com.sun.xml.internal.bind.v2.ContextFactory.createContext(未知
源代码)位于sun.reflect.NativeMethodAccessorImpl.invoke0(本机
方法)在sun.reflect.NativeMethodAccessorImpl.invoke(未知
源)位于sun.reflect.DelegatingMethodAccessorImpl.invoke(未知
位于java.lang.reflect.Method.invoke(未知源代码)的
javax.xml.bind.ContextFinder.newInstance(未知源代码)位于
javax.xml.bind.ContextFinder.find(未知源代码)位于
javax.xml.bind.JAXBContext.newInstance(未知源代码)位于
javax.xml.bind.JAXBContext.newInstance(未知源代码)位于
com.PojoToXSD.main(PojoToXSD.java:17)

我举了这样的例子:

包**com.model**----&燃气轮机;此包包含“Address”类和“City”类
公共课堂演讲{
私有字符串区域名;
私人城市;
private com.common.City previousCity;
}
包com.model;
公营城市{
私有字符串cityName;
}

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

包**com.common**;
公营城市{
私有字符串pinCode;
}

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

我想知道有没有解决上述问题的方法,或者其他创建XSD和封送/解封送的方法(比如MOXy..等等)

如果我能从任何人那里得到解决方案,那就太好了……请提前感谢

谢谢

萨蒂亚

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

如果你能给这个类添加注释

如果可以修改该类,只需将@XmlType注释添加到City类之一,即可更改相应的XML架构类型名称

包**com.common**;
@XmlType(name=“city2”)
公营城市{
私有字符串pinCode;
}

如果无法对类进行注释

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

<?xml version=“1.0”?>
<xml绑定
xmlns=”http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
软件包名称=“**com.common**”>
<java类型>
<java type name=“City”>
<xml type name=“city2”/>
&lt/java类型>
&lt/java类型>
&lt/xml绑定>

了解更多信息

  • http://blog.bdoughan.com/2010/12/extending-jaxb-representing-annotations.html

更新

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

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

2) 在绑定文件中,您只考虑了类名,不需要
以城市定义的属性为例(我是指pinCode)

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

  • http://blog.bdoughan.com/2012/07/jaxb-no-annotations-required.html

3) 我们需要选择莫西来做这个

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

  • http://confluence.highsource.org/display/ANX/JAXB+用户+指南

发表评论