This commit is contained in:
@@ -129,7 +129,6 @@ public final class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final T result = this.creator.create();
|
final T result = this.creator.create();
|
||||||
final AtomicInteger index = new AtomicInteger();
|
final AtomicInteger index = new AtomicInteger();
|
||||||
while (in.hasNext()) {
|
while (in.hasNext()) {
|
||||||
|
|||||||
@@ -28,6 +28,10 @@ public final class ObjectEncoder<W extends Writer, T> implements Encodeable<W, T
|
|||||||
|
|
||||||
protected Factory factory;
|
protected Factory factory;
|
||||||
|
|
||||||
|
private boolean inited = false;
|
||||||
|
|
||||||
|
private final Object lock = new Object();
|
||||||
|
|
||||||
protected ObjectEncoder(Type type) {
|
protected ObjectEncoder(Type type) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
if (type instanceof ParameterizedType) {
|
if (type instanceof ParameterizedType) {
|
||||||
@@ -131,6 +135,7 @@ public final class ObjectEncoder<W extends Writer, T> implements Encodeable<W, T
|
|||||||
|
|
||||||
public void init(final Factory factory) {
|
public void init(final Factory factory) {
|
||||||
this.factory = factory;
|
this.factory = factory;
|
||||||
|
try {
|
||||||
if (type == Object.class) return;
|
if (type == Object.class) return;
|
||||||
//if (!(type instanceof Class)) throw new ConvertException("[" + type + "] is no a class");
|
//if (!(type instanceof Class)) throw new ConvertException("[" + type + "] is no a class");
|
||||||
final Class clazz = this.typeClass;
|
final Class clazz = this.typeClass;
|
||||||
@@ -178,6 +183,12 @@ public final class ObjectEncoder<W extends Writer, T> implements Encodeable<W, T
|
|||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
throw new ConvertException(ex);
|
throw new ConvertException(ex);
|
||||||
}
|
}
|
||||||
|
} finally {
|
||||||
|
inited = true;
|
||||||
|
synchronized (lock) {
|
||||||
|
lock.notifyAll();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -187,6 +198,15 @@ public final class ObjectEncoder<W extends Writer, T> implements Encodeable<W, T
|
|||||||
out.writeNull();
|
out.writeNull();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (!this.inited) {
|
||||||
|
synchronized (lock) {
|
||||||
|
try {
|
||||||
|
lock.wait();
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (value != null && value.getClass() != this.typeClass) {
|
if (value != null && value.getClass() != this.typeClass) {
|
||||||
final Class clz = value.getClass();
|
final Class clz = value.getClass();
|
||||||
out.wirteClassName(factory.getEntity(clz));
|
out.wirteClassName(factory.getEntity(clz));
|
||||||
|
|||||||
Reference in New Issue
Block a user