我正在使用RESTEasy库编写RESTful WS应用程序。 我一直在寻找一种动态修改某些模型/ xml映射的方法,并找到了MOXY的JAXB实现。
问题是当我使用文件jaxb.properties指定MOXY的实现时,当我尝试检索JAXBContext时,我得到以下异常:
javax.xml.bind.JAXBException:
Exception Description: Name collision. Two classes have the XML type with uri http://www.w3.org/2001/XMLSchema and name anyType.
- with linked exception:
[Exception [EclipseLink-50007] (Eclipse Persistence Services - 2.6.0.v20130912-6b5e067): org.eclipse.persistence.exceptions.JAXBException
使用RESTEasy JAXB不会引发此类异常。 我试图删除所有@XMLElement以避免引用一些未知类但没有任何作用。 这是类定义:
@XmlRootElement(name = "user")
@XmlAccessorType(XmlAccessType.NONE)
public class User extends HistorizedObject implements java.io.Serializable
{
@XmlElement(name="refNumber")
private String m_ref;
...
}
我尝试检索JAXBContext的方式:
JAXBContext jaxbContext = JAXBContext.newInstance(User.class);
没有关于哪些类是冲突的线索。 你有什么想法吗?
THX
编辑:
这是我的jaxb.properties文件,该文件位于与User类相同的包中:
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
以下是与User类不同的包中的HistorizedObject类定义:
@XmlAccessorType(XmlAccessType.NONE)
public abstract class HistorizedObject implements PersistentObject, Cloneable{
@XmlElement(name="userCreate")
protected String userCreate="";
@XmlElement(name="userUpdate")
protected String userUpdate;
...
}
我的应用程序使用RestEasy 2.3.5在JBoss 4.2.3GA下运行。 我使用的moxy的构建版本在上面的异常消息中指定。 如果您需要更多信息,请与我们联系。
EDIT2:
当我指定类Login(位于与User相同的包中)时检索JAXBContext工作正常。 Login类上的注释与User类上的注释相同,因此这个类的源代码中的一些东西显然引发了Exception。 问题是这个类是3000行长... 你知道我应该从哪里开始寻找什么?
以下是Login类的类定义:
@XmlRootElement(name = "login")
@XmlAccessorType(XmlAccessType.NONE)
public class Login extends HistorizedObject implements java.io.Serializable
{
/** Email address */
@XmlElement(name="emailAddress")
private String m_email;
...
}
EDIT3:
好的,我发现了一些有趣的东西。 以下是导致名称冲突的User类中的代码:
public static final HashMap<String, Object[]> USERTYPEOFELEM;
static
{
USERTYPEOFELEM = new HashMap<String, Object[]>();
USERTYPEOFELEM.put("GENDER", new Object[]{Constants.IMPORT_LISTOFVALUE, "gender"});
...
}
我理解这个HashMap中的对象可能无法解析并发生冲突,但是这个hashmap没有注释,不应该被编组然后呢? 这是MOXY实施的错误还是我错过了什么?
答案 0 :(得分:2)
注意:我是EclipseLink JAXB (MOXy)主管,是JAXB (JSR-222)专家组的成员。
<强>解决方案强>
根据离线对话的结果,该问题的解决方案是使用以下EclipseLink捆绑包:
结合已经使用的EclipseLink捆绑包:
<强>原因强>
MOXy字节代码在为Map
对象创建映射时生成一些对象(利用ASM)。如果没有这些生成的类,MOXy的元数据生成就会失败。