in openwire-generator/src/main/java/org/apache/activemq/openwire/generator/builtin/UniversalMarshallerGenerator.java [439:541]
private void writeLooseUnmarshal(PrintWriter out, OpenWireTypeDescriptor openWireType) {
out.println(" /**");
out.println(" * Un-marshal an object instance from the data input stream");
out.println(" *");
out.println(" * @param target the object to un-marshal");
out.println(" * @param dataIn the data input stream to build the object from");
out.println(" *");
out.println(" * @throws IOException if an error occurs while writing the data");
out.println(" */");
out.println(" public void looseUnmarshal(OpenWireFormat wireFormat, Object target, DataInput dataIn) throws IOException {");
out.println(" super.looseUnmarshal(wireFormat, target, dataIn);");
if (openWireType.hasProperties()) {
out.println("");
out.println(" " + openWireType.getTypeName() + " info = (" + openWireType.getTypeName() + ") target;");
if (isOpenWireVersionNeeded(openWireType)) {
out.println(" int version = wireFormat.getVersion();");
}
out.println("");
}
if (openWireType.isMarshalAware()) {
out.println(" info.beforeUnmarshall(wireFormat);");
}
for (final OpenWirePropertyDescriptor property : openWireType.getProperties()) {
final int size = property.getSize();
final String typeName = property.getTypeName();
final String setter = property.getSetterName();
String indent = " ";
if (property.getVersion() > 1) {
indent = indent + " ";
out.println(" if (version >= " + property.getVersion() + ") {");
}
if (property.isArray() && !typeName.equals("byte[]")) {
final String arrayType = property.getType().getComponentType().getSimpleName();
if (size > 0) {
out.println(indent + "{");
out.println(indent + " " + arrayType + " value[] = new " + arrayType + "[" + size + "];");
out.println(indent + " " + "for (int i = 0; i < " + size + "; i++) {");
out.println(indent + " value[i] = (" + arrayType + ") looseUnmarsalNestedObject(wireFormat,dataIn);");
out.println(indent + " }");
out.println(indent + " info." + setter + "(value);");
out.println(indent + "}");
} else {
out.println(indent + "if (dataIn.readBoolean()) {");
out.println(indent + " short size = dataIn.readShort();");
out.println(indent + " " + arrayType + " value[] = new " + arrayType + "[size];");
out.println(indent + " for (int i = 0; i < size; i++) {");
out.println(indent + " value[i] = (" + arrayType + ") looseUnmarsalNestedObject(wireFormat,dataIn);");
out.println(indent + " }");
out.println(indent + " info." + setter + "(value);");
out.println(indent + "} else {");
out.println(indent + " info." + setter + "(null);");
out.println(indent + "}");
}
} else {
if (typeName.equals("boolean")) {
out.println(indent + "info." + setter + "(dataIn.readBoolean());");
} else if (typeName.equals("byte")) {
out.println(indent + "info." + setter + "(dataIn.readByte());");
} else if (typeName.equals("char")) {
out.println(indent + "info." + setter + "(dataIn.readChar());");
} else if (typeName.equals("short")) {
out.println(indent + "info." + setter + "(dataIn.readShort());");
} else if (typeName.equals("int")) {
out.println(indent + "info." + setter + "(dataIn.readInt());");
} else if (typeName.equals("long")) {
out.println(indent + "info." + setter + "(looseUnmarshalLong(wireFormat, dataIn));");
} else if (typeName.equals("String")) {
out.println(indent + "info." + setter + "(looseUnmarshalString(dataIn));");
} else if (typeName.equals("byte[]")) {
if (size > 0) {
out.println(indent + "info." + setter + "(looseUnmarshalConstByteArray(dataIn, " + size + "));");
} else {
out.println(indent + "info." + setter + "(looseUnmarshalByteArray(dataIn));");
}
} else if (typeName.equals("Buffer")) {
out.println(indent + "info." + setter + "(looseUnmarshalByteSequence(dataIn));");
} else if (property.isThrowable()) {
out.println(indent + "info." + setter + "((" + typeName + ") looseUnmarsalThrowable(wireFormat, dataIn));");
} else if (property.isCached()) {
out.println(indent + "info." + setter + "((" + typeName + ") looseUnmarsalCachedObject(wireFormat, dataIn));");
} else {
out.println(indent + "info." + setter + "((" + typeName + ") looseUnmarsalNestedObject(wireFormat, dataIn));");
}
}
if (property.getVersion() > 1) {
out.println(" }");
}
}
if (openWireType.isMarshalAware()) {
out.println("");
out.println(" info.afterUnmarshall(wireFormat);");
}
out.println(" }");
}