hi
Follow is my code:
Resouce class file:
@Path("/jsonp")
@Produces("application/x-javascript")
public class JsonpResource {
private static final List<Person> persons = new ArrayList<Person>();
static {
persons.add(new Person("zhangsan","women","11"));
persons.add(new Person("lisi","man","12"));
persons.add(new Person("wangwu","women","21"));
}
@GET
@Path("/string")
public JSONWithPadding getString(@QueryParam("callback") String
callback) {
return new JSONWithPadding("'helloWorld'", callback);
}
@GET
@Path("/json")
public JSONWithPadding getJson(@QueryParam("callback") String callback)
throws Exception {
JSONObject obj = new JSONObject();
obj.put("name1", "jackDou");
obj.put("name2", "redhacker");
obj.put("name3", "beanor");
return new JSONWithPadding(obj, callback);
}
@GET
@Path("/jaxb")
public JSONWithPadding getJaxb(@QueryParam("callback") String callback)
throws Exception {
return new JSONWithPadding(new
GenericEntity<List<Person>>(persons){}, callback);
}
}
Jaxb class file:
package com.jersey.sample.model;
import java.util.HashSet;
import java.util.Set;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "person")
public class Person {
private String name;
private String sex;
private String age;
private int mark;
private Set<Child> childSet = new HashSet<Child>();
public Person(String name, String sex, String age) {
super();
this.name = name;
this.sex = sex;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
/**
* @return the childSet
*/
public Set<Child> getChildSet() {
return childSet;
}
/**
* @param childSet the childSet to set
*/
public void setChildSet(Set<Child> childSet) {
this.childSet = childSet;
}
/**
* @return the mark
*/
public int getMark() {
return mark;
}
/**
* @param mark the mark to set
*/
public void setMark(int mark) {
this.mark = mark;
}
}
Provider class file:
@Provider
public final class JAXBContextResolver implements
ContextResolver<JAXBContext> {
private final JAXBContext context;
private final Set<Class> types;
private final Class[] cTypes = {Person.class};
public JAXBContextResolver() throws Exception {
this.types = new HashSet(Arrays.asList(cTypes));
this.context = new
JSONJAXBContext(JSONConfiguration.natural().build(), cTypes);
}
public JAXBContext getContext(Class<?> objectType) {
return (types.contains(objectType)) ? context : null;
}
}
Jsp File:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"
http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
function stringCallback(stringObj) {
document.writeln("<p>============== stringCallback result =========</p>");
document.writeln(stringObj);
}
function jsonCallback(jsonObj) {
document.writeln("<p>============== jsonCallback result =========</p>");
document.writeln(jsonObj["name1"]);
document.writeln(jsonObj.name2);
document.writeln(jsonObj.name3)
}
function jaxbCallback(jaxbObj) {
document.writeln("<p>============== jaxbCallback result =========</p>");
document.writeln(jaxbObj);
}
</script>
<script type="text/javascript"
src="/jerseydemo/resources/jsonp/string?callback=stringCallback"></script>
<script type="text/javascript"
src="/jerseydemo/resources/jsonp/json?callback=jsonCallback"></script>
<script type="text/javascript"
src="/jerseydemo/resources/jsonp/jaxb?callback=jaxbCallback"></script>
</body>
</html>
Run Console log:
2009-3-3 17:35:24
com.sun.jersey.json.impl.provider.entity.JSONWithPaddingProvider writeTo
严重: [failed to localize]
error.jsonp.msg.body.writer.not.found([com.jersey.sample.model.Person_at_1735602,
com.jersey.sample.model.Person_at_113cf49,
com.jersey.sample.model.Person_at_18df055], application/json)
2009-3-3 17:35:24 com.sun.jersey.server.impl.application.WebApplicationImpl
onException
严重: Internal server error
javax.ws.rs.WebApplicationException
at
com.sun.jersey.json.impl.provider.entity.JSONWithPaddingProvider.writeTo(JSONWithPaddingProvider.java:127)
at
com.sun.jersey.json.impl.provider.entity.JSONWithPaddingProvider.writeTo(JSONWithPaddingProvider.java:67)
at
com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:254)
at
com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:578)
at
com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:502)
at
com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:493)
at
com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:308)
at
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:314)
at
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:239)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.jersey.sample.filter.AuthFilter.doFilter(AuthFilter.java:38)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:595)
(1)<script type="text/javascript"
src="/jerseydemo/resources/jsonp/string?callback=stringCallback"></script>
(2)<script type="text/javascript"
src="/jerseydemo/resources/jsonp/json?callback=jsonCallback"></script>
(3)<script type="text/javascript"
src="/jerseydemo/resources/jsonp/jaxb?callback=jaxbCallback"></script>
(1)(2) are working nice,But (3) is working bad.
any help?
--
View this message in context: http://n2.nabble.com/Jsonp-issue%3Ajaxb-can%27t-convert-to-json-object-to-user-client.-tp2414324p2414324.html
Sent from the Jersey mailing list archive at Nabble.com.