我在我的DTO类中得到了一个循环错误,所以决定实现MOXy来消除它。我遵循了实现MOXy的以下步骤:
我在dto类中使用@XmlElement和@XmlInverseReference注释,但是在运行我的应用程序时,我得到了以下错误:
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 发布于 2013-07-09 10:19:46
为了解决你的后续问题,你在哪里得到了错误的输出。environment属性在ApplicationDTO上的映射是错误的。您可以执行以下操作之一:
@XmlElementRef 选项1 -
如果使用@XmlElementRef注释,则此属性的元素名将基于目标类上的@XmlRootElement注释。
@OneToMany(mappedBy = "application", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@XmlElementRef
public Set<EnvironmentDTO> getEnvironment() {
return environment;
}@XmlElement 选项2 -
或者,您可以使用@XmlElement注释来指定应该用于该属性的元素。
@OneToMany(mappedBy = "application", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@XmlElement(name="environmentDTO")
public Set<EnvironmentDTO> getEnvironment() {
return environment;
}编辑:
@GET
@Path("/get")
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public List<ApplicationDTO> getAllApplications(){
List<ApplicationDTO> allApplication = applicationService.getAllApplication();
return allApplication;
}从这里流到以下类:
@Override
public List<ApplicationDTO> getAllApplication() {
List<ApplicationDTO> AppList = genericDAOTxService.findAll(ApplicationDTO.class);
return AppList;
}而不是对以下班级:
@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对象中获得如下结果:
[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对象中得到了关注:
[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库自动创建对象。我没有用于编组和解编组对象的任何其他独立程序。
发布于 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
希望这能帮上忙,瑞克
https://stackoverflow.com/questions/17521161
复制相似问题