// ----------------------------------------------------------------------------- @Override public String serializeXML(SerializableDO p_object, String p_namespace) throws CoreException { StringBuilder l_buf = new StringBuilder(); DOFactory._DOMetaData l_do_md = null; // SerializeXML l_xml = null; String l_namespace = null; try { if (p_object != null) { l_namespace = ((p_namespace == null) || (p_namespace.isEmpty())) ? ("http://www.inventecsolutions.com/" + CoreUtils.truncateClassName(p_object.getClass().getName()) + "/") : p_namespace; l_do_md = DOFactory.getDOMetaData(p_object); addStartNode(l_buf, l_do_md.shortName, l_do_md.classRef, l_namespace); // l_buf.append ("<").append (l_do_md.shortName); // l_xml = p_object.getClass().getAnnotation(SerializeXML.class); // if (l_xml != null) { // if (l_xml.cName()) { // l_buf.append (" name=\""); // l_buf.append (l_do_md.className); // l_buf.append ("\" "); // } // } // l_buf.append (">"); for (int l_i = 0; l_i < l_do_md.fields.length; l_i++) { // System.out.println ("S[" + l_do_md.fields [l_i] + "]"); serializeObject( l_buf, l_do_md.fields[l_i], CoreUtils.getFieldValue( l_do_md.fields[l_i], p_object) // l_do_md.allFields[l_i].get (p_object) ); } addEndNode(l_buf, l_do_md.shortName); // l_buf.append ("</").append (l_do_md.shortName).append (">"); } } catch (Throwable e) { e.printStackTrace(); throw new CoreException("", e); } return l_buf.toString(); }
// ------------------------------------------------------------------------- private void serializeObject(StringBuilder p_buf, Field p_field, Object p_obj) throws Exception { String l_name = null; Field[] l_flds = null; int l_mod = 0; String[] l_args = null; SerializeXML l_ann = null; boolean l_substitute = false; if (p_field == null) { return; } l_ann = p_field.getAnnotation(SerializeXML.class); // System.out.println ("Field [" + p_field.getName() + "] Ann [" + l_ann + "] "); l_mod = p_field.getModifiers(); if (Modifier.isTransient(l_mod)) { return; } l_name = CoreUtils.truncateClassName(p_field.getName()); if (l_ann != null) { if ((l_ann.xmlTag() != null) && (l_ann.xmlTag().length() > 0)) { l_name = l_ann.xmlTag(); } // l_substitute = l_ann.substitute(); } if (p_field.getType().isArray()) { if (SerializableDO.class.isAssignableFrom(p_field.getType().getComponentType())) { if (p_obj != null) { addStartNode(p_buf, l_name); for (int l_i = 0; l_i < Array.getLength(p_obj); l_i++) { if (l_substitute) { // System.out.println ("*****" // + p_field.getType ().getComponentType ().getName() + " " + Array.get(p_obj, // l_i).getClass().getName()); addStartNode( p_buf, CoreUtils.truncateClassName(Array.get(p_obj, l_i).getClass().getName()), Array.get(p_obj, l_i).getClass(), null); } else { addStartNode( p_buf, CoreUtils.truncateClassName(p_field.getType().getComponentType().getName()), p_field.getType().getComponentType(), null); } l_flds = p_field.getType().getComponentType().getDeclaredFields(); for (int l_j = 0; l_j < l_flds.length; l_j++) { // System.err.println ("FIELD " // + l_flds [l_j]); if (Array.get(p_obj, l_i) != null) { serializeObject( p_buf, l_flds[l_j], CoreUtils.getFieldValue( l_flds[l_j], (SerializableDO) Array.get(p_obj, l_i)) // l_flds [l_j].get (Array.get(p_obj, l_i)) ); } } if (l_substitute) { addEndNode( p_buf, CoreUtils.truncateClassName(Array.get(p_obj, l_i).getClass().getName())); } else { addEndNode( p_buf, CoreUtils.truncateClassName(p_field.getType().getComponentType().getName())); } } addEndNode(p_buf, l_name); } } else if (CoreUtils.isTypeSupported(p_field.getType().getComponentType().getName())) { if (p_obj != null) { if (CoreUtils.isTypeByteArray(p_field.getType())) { addStartNode(p_buf, l_name); p_buf.append(CoreUtils.getStringValue(p_obj)); addEndNode(p_buf, l_name); } else { for (int l_i = 0; l_i < Array.getLength(p_obj); l_i++) { addStartNode(p_buf, l_name); p_buf.append(CoreUtils.getStringValue(Array.get(p_obj, l_i))); addEndNode(p_buf, l_name); } } } } else { l_args = new String[1]; l_args[0] = p_field.getType().getComponentType().getName(); throw new CoreException( "Exception for [" + p_field.getType().getComponentType().getName() + "]"); } } else { if (SerializableDO.class.isAssignableFrom(p_field.getType())) { if (p_obj != null) { // if (! l_substitute) { // addStartNode(p_buf, l_name); // } addStartNode( p_buf, l_name // CoreUtils.truncateClassName(p_obj.getClass ().getName()) , p_obj.getClass(), null); l_flds = p_obj.getClass().getDeclaredFields(); for (int l_i = 0; l_i < l_flds.length; l_i++) { serializeObject( p_buf, l_flds[l_i], CoreUtils.getFieldValue(l_flds[l_i], (SerializableDO) p_obj)); } addEndNode( p_buf, l_name // CoreUtils.truncateClassName(p_obj.getClass ().getName()) ); // if (! l_substitute) { // addEndNode(p_buf, l_name); // } } } else if (CoreUtils.isTypeSupported(p_field.getType().getName())) { // l_ann = // p_field.getAnnotation(SerializeXML.class); // System.out.println ("Field 4 [" + // p_field.getName() + "] Ann [" + l_ann + "] "); addStartNode(p_buf, l_name); p_buf.append(CoreUtils.getStringValue(p_obj, !Modifier.isVolatile(l_mod))); addEndNode(p_buf, l_name); } else { l_args = new String[1]; l_args[0] = p_field.getType().getName(); System.out.println(l_args[0]); throw new CoreException(MessageCodes.ECOD_CANNOT_SERIALIZE_FIELD, l_args); } } }