获取JAXB异常,例如"两个类具有相同的XML类型名称......",
这是例外细节:
线程"main"中的异常com.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.bind.ContextFinder的java.lang.reflect.Method.invoke(未知来源)的sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)中调用(未知来源).来自javax.xml.bind.JAXBContext.newInstance(未知来源)的javax.xml.bind.ContextFinder.find(未知来源)中的newInstance(未知来源)位于com的javax.xml.bind.JAXBContext.newInstance(未知来源). PojoToXSD.main(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;
}
Run Code Online (Sandbox Code Playgroud)
"com.common"包中的另一个城市类.
package **com.common**;
public class City {
private String pinCode;
}
Run Code Online (Sandbox Code Playgroud)
我们需要创建XSD并需要使用项目中的现有代码进行编组和解组(如上面的示例代码),代码没有任何注释,如"@ XmlRootElement/@ XmlType",我们无法更改源代码.
我想知道是否有任何解决方案可以解决上述问题或任何其他方法来创建XSD和编组/解组(如MOXy..etc)?
如果我能从任何一个人那里得到解决方案,那将是很好的....请提前感谢.
谢谢,
萨蒂亚.
bdo*_*han 25
注意: 我是EclipseLink JAXB(MOXy)的负责人,也是JAXB(JSR-222)专家组的成员.
如果您可以修改类,则只需@XmlType向其中一个City类添加注释即可更改相应的XML模式类型名称.
package **com.common**;
@XmlType(name="city2")
public class City {
private String pinCode;
}
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
欲获得更多信息
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的集成.
| 归档时间: |
|
| 查看次数: |
46095 次 |
| 最近记录: |