首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现MOXy时出错

实现MOXy时出错
EN

Stack Overflow用户
提问于 2013-07-08 07:29:45
回答 2查看 447关注 0票数 2

我在我的DTO类中得到了一个循环错误,所以决定实现MOXy来消除它。我遵循了实现MOXy的以下步骤:

  1. 从[http://www.eclipse.org/eclipselink/downloads/nightly.php]下载的http://www.eclipse.org/eclipselink/downloads/nightly.php
  2. 将/eclipselink/jlib文件夹中的所有JAR复制到我的/WEB/lib
  3. 为了将EclipseLink MOXy指定为JAXB提供程序,JAXB提供程序在文件夹中创建了一个jaxb.properties文件,其中所有类都有以下条目- javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

我在dto类中使用@XmlElement和@XmlInverseReference注释,但是在运行我的应用程序时,我得到了以下错误:

代码语言:javascript
复制
javax.ws.rs.WebApplicationException: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions, Class has two properties of the same name "application"
this problem is related to the following location:
    at public thbs.provisioning.dto.ApplicationDTO thbs.provisioning.dto.EnvironmentDTO.getApplication()
    at thbs.provisioning.dto.EnvironmentDTO
    at public java.util.Set thbs.provisioning.dto.ApplicationDTO.getEnvironment()
    at thbs.provisioning.dto.ApplicationDTO
this problem is related to the following location:
    at private thbs.provisioning.dto.ApplicationDTO thbs.provisioning.dto.EnvironmentDTO.application
    at thbs.provisioning.dto.EnvironmentDTO
    at public java.util.Set thbs.provisioning.dto.ApplicationDTO.getEnvironment()
    at thbs.provisioning.dto.ApplicationDTO 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-09 10:19:46

为了解决你的后续问题,你在哪里得到了错误的输出。environment属性在ApplicationDTO上的映射是错误的。您可以执行以下操作之一:

@XmlElementRef 选项1 -

如果使用@XmlElementRef注释,则此属性的元素名将基于目标类上的@XmlRootElement注释。

代码语言:javascript
复制
@OneToMany(mappedBy = "application", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@XmlElementRef
public Set<EnvironmentDTO> getEnvironment() {
    return environment;
}

@XmlElement 选项2 -

或者,您可以使用@XmlElement注释来指定应该用于该属性的元素。

代码语言:javascript
复制
@OneToMany(mappedBy = "application", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@XmlElement(name="environmentDTO")
public Set<EnvironmentDTO> getEnvironment() {
    return environment;
}

编辑:

代码语言:javascript
复制
@GET
@Path("/get")
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public List<ApplicationDTO> getAllApplications(){
    List<ApplicationDTO> allApplication = applicationService.getAllApplication();
    return allApplication;
}

从这里流到以下类:

代码语言:javascript
复制
@Override
public List<ApplicationDTO> getAllApplication() {

    List<ApplicationDTO> AppList = genericDAOTxService.findAll(ApplicationDTO.class);   
    return AppList;     
}

而不是对以下班级:

代码语言:javascript
复制
@Override
@Transactional(rollbackFor = java.lang.Exception.class, noRollbackFor = java.io.FileNotFoundException.class, propagation = Propagation.REQUIRES_NEW)
public <T> List<T> findAll(Class<T> type) {
    List<T> list = genericDAOImpl.findAll(type);
    return list;
}

然后,从数据库中开始填充值。

以前,在使用MOXy之前,我经常在ApplicationDTO对象中获得如下结果:

代码语言:javascript
复制
[ApplicationDTO [applicationId=1, applicationName=name, applicationDescription=desc, owner=5, createTime=2013-05-06 15:29:15.0, environment=[EnvironmentDTO [environmentId=1, environmentName=envname]]], ApplicationDTO [applicationId=2, applicationName=name, applicationDescription=desc, owner=5, createTime=2013-05-28 19:07:10.0, environment=[EnvironmentDTO [environmentId=2, environmentName=envname]]]]

但是,现在我在ApplicationDTO对象中得到了关注:

代码语言:javascript
复制
[ApplicationDTO [applicationId=1, applicationName=name, applicationDescription=desc, owner=5, createTime=2013-05-06 15:29:15.0], ApplicationDTO [applicationId=2, applicationName=name, applicationDescription=desc, owner=5, createTime=2013-05-28 19:07:10.0]]

这是我的应用程序的实际流程,使用JAXB和Jersy库自动创建对象。我没有用于编组和解编组对象的任何其他独立程序。

票数 2
EN

Stack Overflow用户

发布于 2013-07-08 15:03:53

由于某些原因,您的jaxb.properties文件没有被捕获--错误消息中的“com.sun.xml.bind.v2运行时”表示Sun正在运行,而不是MOXy。

确保jaxb.properties在与模型类相同的包中的类路径上。如果您在源目录中包含了jaxb.properties,请确保将其复制到.class文件最后所在的同一目录。您可以在这里阅读有关设置jaxb.properties的相关内容:http://www.eclipse.org/eclipselink/documentation/2.5/moxy/runtime.htm#sthref8

希望这能帮上忙,瑞克

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17521161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档