mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
Fix for Issue 43 - Support for JSON unmarshalling of @XmlRootElement
beans.
This commit is contained in:
@@ -216,23 +216,21 @@ public class DJsonContext implements JsonContext {
|
||||
|
||||
} else {
|
||||
BeanDescriptor<?> d = getDecriptor(o.getClass());
|
||||
WriteJsonContext ctx = new WriteJsonContext(buffer, pretty, dfltValueAdapter, options, requestCallback);
|
||||
WriteJsonContext ctx = new WriteJsonContext(buffer, pretty, dfltValueAdapter, options, requestCallback, server);
|
||||
d.jsonWrite(ctx, o);
|
||||
ctx.end();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private <T> void toJsonFromCollection(Collection<T> c, WriteJsonBuffer buffer, boolean pretty,
|
||||
JsonWriteOptions options, String requestCallback){
|
||||
private <T> void toJsonFromCollection(Collection<T> c, WriteJsonBuffer buffer, boolean pretty, JsonWriteOptions options, String requestCallback){
|
||||
|
||||
Iterator<T> it = c.iterator();
|
||||
if (!it.hasNext()){
|
||||
buffer.append("[]");
|
||||
return;
|
||||
return;
|
||||
}
|
||||
|
||||
WriteJsonContext ctx = new WriteJsonContext(buffer, pretty, dfltValueAdapter, options, requestCallback);
|
||||
WriteJsonContext ctx = new WriteJsonContext(buffer, pretty, dfltValueAdapter, options, requestCallback, server);
|
||||
|
||||
Object o = it.next();
|
||||
BeanDescriptor<?> d = getDecriptor(o.getClass());
|
||||
@@ -248,15 +246,14 @@ public class DJsonContext implements JsonContext {
|
||||
ctx.end();
|
||||
}
|
||||
|
||||
private void toJsonFromMap(Map<Object,Object> map, WriteJsonBuffer buffer, boolean pretty,
|
||||
JsonWriteOptions options, String requestCallback){
|
||||
private void toJsonFromMap(Map<Object,Object> map, WriteJsonBuffer buffer, boolean pretty, JsonWriteOptions options, String requestCallback){
|
||||
|
||||
if (map.isEmpty()){
|
||||
buffer.append("{}");
|
||||
return;
|
||||
}
|
||||
|
||||
WriteJsonContext ctx = new WriteJsonContext(buffer, pretty, dfltValueAdapter, options, requestCallback);
|
||||
WriteJsonContext ctx = new WriteJsonContext(buffer, pretty, dfltValueAdapter, options, requestCallback, server);
|
||||
|
||||
Set<Entry<Object,Object>> entrySet = map.entrySet();
|
||||
Iterator<Entry<Object, Object>> it = entrySet.iterator();
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.avaje.ebeaninternal.server.text.json;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -10,6 +12,8 @@ import com.avaje.ebean.text.json.JsonValueAdapter;
|
||||
import com.avaje.ebean.text.json.JsonWriteBeanVisitor;
|
||||
import com.avaje.ebean.text.json.JsonWriteOptions;
|
||||
import com.avaje.ebean.text.json.JsonWriter;
|
||||
import com.avaje.ebeaninternal.api.SpiEbeanServer;
|
||||
import com.avaje.ebeaninternal.server.deploy.BeanDescriptor;
|
||||
import com.avaje.ebeaninternal.server.type.EscapeJson;
|
||||
import com.avaje.ebeaninternal.server.type.ScalarType;
|
||||
import com.avaje.ebeaninternal.server.util.ArrayStack;
|
||||
@@ -17,6 +21,8 @@ import com.avaje.ebeaninternal.server.util.ArrayStack;
|
||||
|
||||
public class WriteJsonContext implements JsonWriter {
|
||||
|
||||
private final SpiEbeanServer server;
|
||||
|
||||
private final WriteJsonBuffer buffer;
|
||||
|
||||
private final boolean pretty;
|
||||
@@ -40,8 +46,9 @@ public class WriteJsonContext implements JsonWriter {
|
||||
boolean assocOne;
|
||||
|
||||
public WriteJsonContext(WriteJsonBuffer buffer, boolean pretty, JsonValueAdapter dfltValueAdapter,
|
||||
JsonWriteOptions options, String requestCallback){
|
||||
JsonWriteOptions options, String requestCallback, SpiEbeanServer server){
|
||||
|
||||
this.server = server;
|
||||
this.buffer = buffer;
|
||||
this.pretty = pretty;
|
||||
this.pathStack = new PathStack();
|
||||
@@ -61,6 +68,38 @@ public class WriteJsonContext implements JsonWriter {
|
||||
buffer.append(requestCallback).append("(");
|
||||
}
|
||||
}
|
||||
|
||||
public void toJson(String name, Collection<?> c) {
|
||||
|
||||
internalAppendKeyBegin(name);
|
||||
|
||||
Iterator<?> it = c.iterator();
|
||||
if (!it.hasNext()){
|
||||
buffer.append("[]");
|
||||
return;
|
||||
}
|
||||
|
||||
Object o = it.next();
|
||||
BeanDescriptor<?> d = getDecriptor(o.getClass());
|
||||
|
||||
appendArrayBegin();
|
||||
d.jsonWrite(this, o);
|
||||
while (it.hasNext()) {
|
||||
appendComma();
|
||||
Object t = it.next();
|
||||
d.jsonWrite(this, t);
|
||||
}
|
||||
appendArrayEnd();
|
||||
}
|
||||
|
||||
private <T> BeanDescriptor<T> getDecriptor(Class<T> cls) {
|
||||
BeanDescriptor<T> d = server.getBeanDescriptor(cls);
|
||||
if (d == null){
|
||||
String msg = "No BeanDescriptor found for "+cls;
|
||||
throw new RuntimeException(msg);
|
||||
}
|
||||
return d;
|
||||
}
|
||||
|
||||
public void appendRawValue(String key, String rawJsonValue) {
|
||||
appendKeyWithComma(key, true);
|
||||
|
||||
Reference in New Issue
Block a user