Glassfish 4 REST XML 工作 JSON 错误
Posted
技术标签:
【中文标题】Glassfish 4 REST XML 工作 JSON 错误【英文标题】:Glassfish 4 REST XML Working JSON Error 【发布时间】:2015-09-25 08:22:36 【问题描述】:我在 Glassfish 4.1 上有一个 Web 服务,它可以正常用于 XML,但不能用于 JSON。
实体类是:
@XmlRootElement
public class Person implements Serializable
/**
*
*/
private static final long serialVersionUID = -8969081094076790550L;
Integer id;
String firstName;
String lastName;
String employeeId;
/**
*
*/
public Person()
@Override
public String toString()
return firstName + " " + lastName + " [" + employeeId + "] [id: " + id + "]";
/**
* @return the firstName
*/
public String getFirstName()
return this.firstName;
/**
* @param firstName the firstName to set
*/
public void setFirstName(String firstName)
this.firstName = firstName;
/**
* @return the lastName
*/
public String getLastName()
return this.lastName;
/**
* @param lastName the lastName to set
*/
public void setLastName(String lastName)
this.lastName = lastName;
/**
* @return the employeeId
*/
public String getEmployeeId()
return this.employeeId;
/**
* @param employeeId the employeeId to set
*/
public void setEmployeeId(String employeeId)
this.employeeId = employeeId;
/**
* @return the id
*/
public Integer getId()
return this.id;
/**
* @param id the id to set
*/
public void setId(Integer id)
this.id = id;
相关服务代码为:
@GET
@Path("xml")
@Produces(MediaType.TEXT_XML)
public Collection<Person> getPeopleXML()
return personDao.getAllPeople();
@GET
@Path("json")
@Produces(MediaType.APPLICATION_JSON)
public Collection<Person> getPeopleJSON()
return personDao.getAllPeople();
XML 调用有效,我得到:
<people>
<person>
<employeeId>2234</employeeId>
<firstName>Mike</firstName>
<id>2</id>
<lastName>Jones</lastName>
</person>
<person>
<employeeId>22314</employeeId>
<firstName>Joe</firstName>
<id>4</id>
<lastName>Smith</lastName>
</person>
</people>
我收到 JSON 调用错误:
HTTP 状态 500 - 内部服务器错误
输入异常报告
消息内部服务器错误
描述服务器遇到阻止它的内部错误 完成此请求。
异常
javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: com/fasterxml/jackson/module/jaxb/JaxbAnnotationIntrospector 根 原因
org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: com/fasterxml/jackson/module/jaxb/JaxbAnnotationIntrospector 根 原因
java.lang.NoClassDefFoundError: com/fasterxml/jackson/module/jaxb/JaxbAnnotationIntrospector 根 原因
java.lang.ClassNotFoundException: com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector 未找到 通过 com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider [129] 注意 异常的完整堆栈跟踪及其根本原因是 GlassFish Server Open Source Edition 4.1 日志中提供。
为什么会出错?我有我需要的一切,我想。我有一个常春藤文件并尝试添加各种杰克逊部门,但似乎没有任何效果。当我将 jackson 添加到我的 ivy 文件时,我无法判断我是否有版本问题,因为它包含在 Glassfish 中,或者什么。
Glassfish 提供以下功能:
/d/glassfish4/glassfish/modules/jackson-annotations.jar
/d/glassfish4/glassfish/modules/jackson-core.jar
/d/glassfish4/glassfish/modules/jackson-databind.jar
/d/glassfish4/glassfish/modules/jackson-jaxrs-base.jar
/d/glassfish4/glassfish/modules/jackson-jaxrs-json-provider.jar
/d/glassfish4/glassfish/modules/jersey-media-json-jackson.jar
【问题讨论】:
【参考方案1】:解决办法如下:
停止玻璃鱼
删除 Glassfish 模块目录中的所有 jackson 内容。
删除domains/domain1/osgi-cache/felix目录
将以下文件复制到该目录:
/glassfish/modules/jackson-annotations-2.4.0.jar
/glassfish/modules/jackson-annotations-2.5.0.jar
/glassfish/modules/jackson-core-2.4.2.jar
/glassfish/modules/jackson-core-2.5.4.jar
/glassfish/modules/jackson-databind-2.4.2.jar
/glassfish/modules/jackson-databind-2.5.4.jar
/glassfish/modules/jackson-jaxrs-base-2.5.4.jar
/glassfish/modules/jackson-jaxrs-json-provider-2.5.4.jar
/glassfish/modules/jackson-module-jaxb-annotations-2.4.2.jar
/glassfish/modules/jackson-module-jaxb-annotations-2.5.4.jar
/glassfish/modules/jersey-media-json-jackson.jar
然后就可以了。不确定 Jackson 的原始文件是什么版本,但这可以工作并升级您的 jackson 模块版本。
【讨论】:
哇,这确实是 Glassfish 中的一个大错误。在 WildFly 中,它开箱即用。感谢您自己回答! 是的,我已经放弃了 Glassfish 并搬到了 WildFly。 Glassfish 有太多像这样的错误,浪费了我太多时间。 你帮了我大忙! 好,我很确定你不需要两个版本的 jackson 东西,但我已经放弃了 Glassfish,所以我无法测试。 谢谢先生,您拯救了我的一天。一件事:就我而言,除了 /glassfish/modules/jersey-media-json-jackson.jar 之外,我做了你在该列表中指出的所有事情。【参考方案2】:我有同样的问题,我与它斗争了好几天。 问题是 glashfish 4.1.1 中缺少 jar 文件( jackson-module-jaxb-annotations )。您可以从此链接http://www.java2s.com/Code/Jar/j/Downloadjacksonmodulejaxbannotations212jar.htm 下载它或谷歌下载jackson 模块jaxb 注释。 然后将其包含在 C:\Program Files\glassfish-4.1.1\glassfish\modules 目录中。您可以通过删除版本号来重命名 jar 文件。重新启动 glassfish 并重新部署您的应用程序。这样对我有用
【讨论】:
【参考方案3】:这里同样的问题,在我的例子中,我的 pom.xml 重新部署并准备好了,只是在我的 pom.xml 中包含了“Jackson Module: JAXB Annotations”的 maven 存储库。我不得不进行两次 http 调用,我真的不知道为什么,但这在第二次调用(GET/POST http 请求)中对我有用。
希望这对其他人有所帮助。
【讨论】:
以上是关于Glassfish 4 REST XML 工作 JSON 错误的主要内容,如果未能解决你的问题,请参考以下文章
在模拟已获得 glassfish 服务器授权的用户时调用 REST 服务
无法为JAX-B生成架构,仅在CORS调用REST服务期间发生
泽西 REST API:java.lang.NoSuchMethodError:org.glassfish.jersey.message.filtering.EntityFilteringFeatur