我正在使用 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);
没有关于哪些类发生冲突的线索。你有想法吗 ?
谢谢
编辑 :
这是我的 jaxb.properties 文件,它与 User 类位于同一包中:
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
这是 HistorizedObject 类定义,它位于与 User 类不同的包中:
@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 的构建版本在上面的异常消息中指定。如果您需要更多信息,请与我们联系。
编辑2:
当我指定类 Login(与 User 位于同一包中)时检索 JAXBContext 工作正常。Login 类的注解和 User 类的注解是一样的,所以很明显这个类的源代码中有些东西引发了异常。问题是这个类有 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;
...
}
编辑3:
好的,所以我发现了一些有趣的东西。这是 User 类中导致名称冲突的代码:
public static final HashMap<String, Object[]> USERTYPEOFELEM;
static
{
USERTYPEOFELEM = new HashMap<String, Object[]>();
USERTYPEOFELEM.put("GENDER", new Object[]{Constants.IMPORT_LISTOFVALUE, "gender"});
...
}
我了解此 HashMap 中的对象可能无法解析并发生冲突,但此哈希图没有注释,不应该被编组,对吗?这是 MOXY 实现的错误还是我错过了什么?