// ----------------------------------------------------------------------------- @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(); }
// ------------------------------------------------------------------------- protected void unmarshall( Class<?> p_class, SerializableDO p_parent, Element p_elem, XMLParser p_parser) throws Exception { Node l_node; NodeList l_list; int l_nbr = 0; Object l_dto; int l_occ; String[] l_args; HashSet<String> l_xml_fields = new HashSet<>(); Field[] l_flds; String l_fld_node_name; SerializeXML l_xmlann; l_list = p_elem.getChildNodes(); if ((l_list == null) || ((l_nbr = l_list.getLength()) == 0)) { return; } for (int l_i = 0; l_i < l_nbr; l_i++) { l_node = l_list.item(l_i); if (!(l_node instanceof Element)) { continue; } l_xml_fields.add(getNodeNameNS(l_node)); } // System.out.println ("ArrayList Start *** " + l_xml_fields); l_flds = p_class.getDeclaredFields(); for (Field l_fld : l_flds) { if (Modifier.isTransient(l_fld.getModifiers())) { continue; } l_xmlann = l_fld.getAnnotation(SerializeXML.class); l_fld_node_name = getNodeNameFromField(l_fld); l_occ = 0; l_node = p_parser.getDirectElement(l_fld_node_name, 0, p_elem); // System.out.println ("Finding Node [" + l_fld_node_name + "] " + l_node + " " + // p_elem); // if (l_node == null) { // return; // } l_xml_fields.remove(l_fld_node_name); if (l_fld.getType().isArray()) { if (SerializableDO.class.isAssignableFrom(l_fld.getType().getComponentType())) { l_occ = p_parser.getDirectNbrElements( CoreUtils.truncateClassName(l_fld.getType().getComponentType().getName()), (Element) l_node); if (l_occ > 0) { l_dto = Array.newInstance(l_fld.getType().getComponentType(), l_occ); CoreUtils.setFieldValue(l_fld, p_parent, l_dto); for (int l_j = 0; l_j < l_occ; l_j++) { Array.set(l_dto, l_j, l_fld.getType().getComponentType().newInstance()); System.out.println("Locating... " + l_fld); unmarshall( l_fld.getType().getComponentType(), (SerializableDO) Array.get(l_dto, l_j), p_parser.getDirectElement( CoreUtils.truncateClassName(l_fld.getType().getComponentType().getName()), l_j, (Element) l_node), p_parser); } } } else if (CoreUtils.isTypeSupported(l_fld.getType().getComponentType().getName())) { l_occ = p_parser.getDirectNbrElements(l_fld_node_name, p_elem); if (l_occ > 0) { l_dto = Array.newInstance(l_fld.getType().getComponentType(), l_occ); CoreUtils.setFieldValue(l_fld, p_parent, l_dto); for (int l_j = 0; l_j < l_occ; l_j++) { // System.out.println("*** " + l_fld); Array.set( l_dto, l_j, CoreUtils.getObjectValue( l_fld.getType().getComponentType(), getElementText(p_parser.getDirectElement(l_fld_node_name, l_j, p_elem)))); } } } else { l_args = new String[1]; l_args[0] = l_fld.getType().getName(); throw new CoreException(""); } } else { if (SerializableDO.class.isAssignableFrom(l_fld.getType())) { if (l_node != null) { if (l_xmlann != null) { if (l_xmlann.substitute()) { l_dto = getNodeClassFromChild(l_node).newInstance(); CoreUtils.setFieldValue(l_fld, p_parent, l_dto); unmarshall( l_dto.getClass() // l_fld.getType () , (SerializableDO) l_dto, (Element) (l_node = getNodeFromChild(l_node)), p_parser); } else { l_dto = l_fld.getType().newInstance(); CoreUtils.setFieldValue(l_fld, p_parent, l_dto); unmarshall(l_fld.getType(), (SerializableDO) l_dto, (Element) l_node, p_parser); } } else { l_dto = l_fld.getType().newInstance(); CoreUtils.setFieldValue(l_fld, p_parent, l_dto); unmarshall(l_fld.getType(), (SerializableDO) l_dto, (Element) l_node, p_parser); } } } else if (CoreUtils.isTypeSupported(l_fld.getType().getName())) { // System.out.println ("A " + l_fld + " " + l_node + " " + p_parent); if (l_node != null) { CoreUtils.setFieldValue( l_fld, p_parent, CoreUtils.getObjectValue(l_fld.getType(), getElementText((Element) l_node))); } } else { l_args = new String[1]; l_args[0] = l_fld.getType().getName(); throw new CoreException(MessageCodes.ECOD_FATAL_ERROR); } } } if (l_xml_fields.size() > 0) { System.out.println("WARNING *** Unable to process fields in XML [" + l_xml_fields + "]"); } }
// ------------------------------------------------------------------------- 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); } } }