获得“两个类具有相同的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' 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)的方法吗?

如果我能从任何一个人那里得到解决方案,那将是很好的。…在此先感谢。

谢谢,

萨蒂亚

回答:

我是 负责人,并且是

专家组的成员。

回答:

如果可以修改类,则可以简单地@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

回到顶部