【发布时间】:2013-03-19 08:31:03
【问题描述】:
我无法让 Jersey RESTful 服务正常工作。
我收到以下错误
The server encountered an internal error () that prevented it from fulfilling this request.
exception
java.lang.NullPointerException
org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUnmarshaller.java:806)
org.eclipse.persistence.oxm.XMLUnmarshaller.unmarshal(XMLUnmarshaller.java:602)
org.eclipse.persistence.jaxb.JAXBUnmarshaller.unmarshal(JAXBUnmarshaller.java:399)
com.sun.jersey.json.impl.BaseJSONUnmarshaller.unmarshalJAXBElementFromJSON(BaseJSONUnmarshaller.java:111)
com.sun.jersey.json.impl.BaseJSONUnmarshaller.unmarshalFromJSON(BaseJSONUnmarshaller.java:100)
com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider.readFrom(JSONRootElementProvider.java:129)
com.sun.jersey.core.provider.jaxb.AbstractRootElementProvider.readFrom(AbstractRootElementProvider.java:111)
com.sun.jersey.spi.container.ContainerRequest.getEntity(ContainerRequest.java:488)
com.sun.jersey.server.impl.model.method.dispatch.EntityParamDispatchProvider$EntityInjectable.getValue(EntityParamDispatchProvider.java:123)
com.sun.jersey.server.impl.inject.InjectableValuesProvider.getInjectableValues(InjectableValuesProvider.java:46)
com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$EntityParamInInvoker.getParams(AbstractResourceMethodDispatchProvider.java:153)
com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:183)
com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)
com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1511)
com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1442)
com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1391)
com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1381)
com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538)
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
* Closing connection #0
服务是:
@Path("/agents")
public class AgentService {
@POST
@Consumes({MediaType.APPLICATION_JSON + ";charset=utf-8"})
@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
public String createAgent(AgentTO input) {
try{
// Agent agent = input.createAgent()
// PersistenceService.getInstance().save(agent);
return input.getName();
} catch (Exception se) {
se.printStackTrace();
}
return null;
}
这是我想收到的对象:
@XmlRootElement
public class AgentTO {
private String name;
private String phone;
public AgentTO(){}
public AgentTO(String phone, String name){
this.phone = phone;
this.name = name;
}
我正在做这样的 POST:
curl -H "Content-Type: application/json" -v -X POST -d '{"phone":"123","name":"asd2"}' http://127.0.0.1:8080/project/agents
我之前制作的资源就像这个一样,但这似乎不想工作:P
你能帮我解决这个问题吗?
问候, 马丁
【问题讨论】:
-
您确定异常来自那里,您正在发布 json,但它正在尝试解组 XML?
-
我有另一个资源,我只是在执行上述 POST 时收到该错误。我试过没有 CONTENT-JSON 标头,我得到“服务器拒绝了这个请求,因为请求实体的格式不受所请求方法的请求资源支持”
-
您显示的异常
org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUnmarshaller.java:806)来自 XML 解组器,对您发布的 json 没有意义。 -
你说它正在通过另一个代码?但问题是当我更改任何注释时,例如更改为@PUT,它告诉我该方法不接受 PUT
-
我的印象是它错误地尝试将 JSON 请求正文解析为 XML 以填充
AgentTO实例。
标签: java rest jersey marshalling unmarshalling