获得“两个类具有相同的XML类型名称…”之类的JAXB异常。
获得JAXB异常,例如“两个类具有相同的XML类型名称…”,
这是异常详细信息 :
线程“主”中的异常com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException:1个IllegalAnnotationExceptions计数
为它们分配不同的名称。此问题与以下位置有关:在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 $
JAXBContextBuilder.build(未知源)的com.sun.xml.internal中的.xml.internal.bind.v2.runtime.JAXBContextImpl。
com.sun.xml.internal.bind.v2.ContextFactory.createContext(未知源)(位于sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)位于sun.reflect.NativeMethodAccessorImpl处的bind.v2.ContextFactory.createContext(未知源)。在sun.reflect.DelegatingMethodAccessorImpl.invoke(在javax.xml.bind.ContextFinder处在java.lang.reflect.Method.invoke(在未知源处)处调用(未知源)。com处javax.xml.bind.JAXBContext.newInstance(未知源)处javax.xml.bind.ContextFinder.find(未知源)处的newInstance(未知源)。
PojoToXSD.main(PojoToXSD.java:17)
回答:
package **com.model**; ---->this package contains 'Address' class and 'City' classpublic 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)的方法吗?
如果我能从任何一个人那里得到解决方案,那将是很好的。…在此先感谢。
谢谢,
萨蒂亚
回答:
我是 负责人,并且是
专家组的成员。
回答:
如果可以修改类,则可以简单地@XmlType
向其中一个City
类添加注释,以更改相应的XML模式类型名称。
package **com.common**;@XmlType(name="city2")
public class City {
private String pinCode;
}
回答:
MOXy提供了一个外部映射文档扩展,可用于将JAXB元数据应用于无法更改的类。
<?xml version="1.0"?><xml-bindings
xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
package-name="**com.common**">
<java-types>
<java-type name="City">
<xml-type name="city2"/>
</java-type>
</java-types>
</xml-bindings>
- http://blog.bdoughan.com/2010/12/extending-jaxb-representing-annotations.html
回答:
1)我们只需要为一个城市类编写绑定文件,或者需要编写其他所有两个类(我的意思是地址和另一个城市)?
MOXy的外部映射文档可用于增强或完全替换类上的元数据(请参阅:http : //blog.bdoughan.com/2011/09/mapping-
objects-to-multiple-xml-
schemas.html)。如果您只需要对其中一个City
类进行更改,则无需包含其他类。
2)在绑定文件中,您仅考虑了类名,而不需要采用City中定义的属性(我的意思是pinCode)?
像任何JAXB实现一样,MOXy将默认映射应用于所有类。您只需要为希望映射行为与默认行为不同的地方提供元数据。
- http://blog.bdoughan.com/2012/07/jaxb-no-annotations-required.html
3)我们需要为此选择MOXy吗?
JAXB没有标准的外部映射文档。我描述的是一个MOXy扩展。如果您使用的是JAXB RI,则可以检查与Annox的集成。
- http://confluence.highsource.org/display/ANX/JAXB+User+Guide
以上是 获得“两个类具有相同的XML类型名称…”之类的JAXB异常。 的全部内容, 来源链接: utcz.com/qa/417881.html