import java.lang.reflect.*; import java.util.ArrayList; public class JAXB { // Consts private String[] datatypes = { "class java.lang.String", "boolean", "byte", "char", "double", "float", "int", "long", "short" }; private enum Collection { primitiv, object, array, arraylist, stack, queue, deque, hashmap, hahtable, unknown } /* * private final int PUBLIC = 1; private final int PRIVATE = 2; private final * int PROTECTED = 4; !!! private final int STATIC = 8; private final int FINAL * = 16; !!! private final int SYNCHRONIZED = 32; private final int VOLATILE = * 64; private final int TRANSIENT = 128; !!! private final int NATIVE = 256; * private final int INTERFACE = 512; !!! private final int ABSTRACT = 1024; !!! * private final int STRICT = 2048; */ private String stepSpaces = " "; private StringBuilder sb = null; private boolean isNodeLowercase = false; public void setNode2Lowercase(boolean lowercase) { isNodeLowercase = lowercase; } /*** * @author Michael Wilhelm, HS-Harz * @version 0,9 convertObj2XML * @param one object * @return the xml string */ public String convertObj2XML(Object obj) { int step = 0; createStringBuilder(); convertObj2XML(obj, null, "", step); return sb.toString(); } /*** * @author Michael Wilhelm, HS-Harz * @version 0,9 convertObj2XML * @param one object * @return the xml string */ public String convertObj2XML(Object obj, String root) { int step = 0; createStringBuilder(); convertObj2XML(obj, null, root, step); return sb.toString(); } /*** * @author Michael Wilhelm, HS-Harz * @version 0,9 convertArray2XML * @param one array of objects * @return the xml string with a parent and a 'list' of the objects (name of the * root: add a 's') * @see convertArray2XML(Object[] objs, String root) */ public String convertArray2XML(Object[] objs) { createStringBuilder(); int step = 0; convertObj2XMLArray(objs, "", step); return sb.toString(); } /*** * @author Michael Wilhelm, HS-Harz * @version 0,9 convertArray2XML * @param one array of objects, a name for the root * @return the xml string with a parent and a 'list' of the objects (name of the * root: root) * @see convertArray2XML(Object[] objs, String root) */ public String convertArray2XML(Object[] objs, String root) { createStringBuilder(); int step = 0; convertObj2XMLArray(objs, root, step); return sb.toString(); } /*** * @author Michael Wilhelm, HS-Harz * @version 0,9 convertArrayList2XML * @param one arraylist of objects * @return the xml string with a parent and a 'list' of the objects (name of the * root: add a 's') * @see convertArray2XML(ArrayList objs, String root) */ public String convertArrayList2XML(ArrayList objs) { createStringBuilder(); int step = 0; convertObj2XMLArrayList(objs, "", step); return sb.toString(); } /*** * @author Michael Wilhelm, HS-Harz * @version 0,9 convertArray2XML * @param one array of objects, a name for the root * @return the xml string with a parent and a 'list' of the objects (name of the * root: root) * @see convertArrayList2XML(Object[] objs) */ public String convertArrayList2XML(ArrayList objs, String root) { createStringBuilder(); int step = 0; convertObj2XMLArrayList(objs, root, step); return sb.toString(); } // 'init'-methods public JAXB(String stepSpaces) { this.stepSpaces = stepSpaces; } // intern methods public void addSpaces(int step) { for (int i = 1; i <= step; i++) { sb.append(stepSpaces); } } public void addNode2SBFirst(String item) { sb.append("<"); if (isNodeLowercase) { sb.append(item.toLowerCase()); } else { sb.append(item); } sb.append(">"); sb.append("\n"); } public void addNode2SBLast(String item) { sb.append(""); sb.append("\n"); } public void addAttrib(String item, Object obj) { sb.append("<"); sb.append(item); sb.append(">"); sb.append(obj.toString()); sb.append(""); sb.append("\n"); } private Object addAttribWithMethode(Object obj, Method[] methods, String classNname, String attribname) { Object result = null; try { String search = classNname.toLowerCase() + ".get" + attribname.toLowerCase(); for (Method method : methods) { // search Person.getAttrib String mName = method.toString().toLowerCase(); // public java.lang.String Person.getAddress() int index = mName.indexOf(search); if (index > 0) { // System.out.println(mName); result = method.invoke(obj); } } } catch (IllegalAccessException e) { System.out.println("addAttribWithMethode: " + e.toString()); } catch (InvocationTargetException e) { System.out.println("addAttribWithMethode: " + e.toString()); } return result; } // deque stack queue hashtable hashMap // class Room [LRoom [Ljava.lang.Object; private Collection checkObject(String type) { for (String datatype : datatypes) { if (datatype.equals(type)) { return Collection.primitiv; } } if (type.startsWith("class [L")) { return Collection.array; } else if (type.startsWith("java.util.ArrayList<")) { return Collection.arraylist; } else { return Collection.object; } } private void createStringBuilder() { sb = new StringBuilder(); // there is no clear() methods sb.append(""); sb.append("\n"); } public void convertObj2XMLArray(Object[] objs, String root, int step) { Class c = objs.getClass(); String nameArray = c.getName(); if (objs.length > 0) { Class cl = objs[0].getClass(); nameArray = cl.getName() + "s"; } if (root.length() > 0) { nameArray = root; } System.out.println("nameArray: " + nameArray); addSpaces(step); addNode2SBFirst(nameArray); step++; for (Object obj : objs) { convertObj2XML(obj, null, "", step); } step--; addSpaces(step); addNode2SBLast(nameArray); } public void convertObj2XMLArrayList(ArrayList objs, String root, int step) { Class c = objs.getClass(); String name = c.getName(); /* * System.out.println("Name: " + name + " step: " + step + "\n"); * * String simplename = c.getSimpleName(); System.out.println("simplename: " + * simplename + "\n"); * * String typename = c.getTypeName(); System.out.println("typename: " + typename * + "\n"); * * String canonicalName = c.getCanonicalName(); * System.out.println("canonicalName: " + canonicalName + "\n"); */ String nameArray = c.getName(); int anz = objs.size(); if (objs.size() > 0) { Class cl = objs.get(0).getClass(); nameArray = cl.getName() + "s"; } System.out.println("nameArray: " + nameArray); addSpaces(step); if (root.length() > 0) { addNode2SBFirst(root); } else { addNode2SBFirst(nameArray); } step++; for (Object obj : objs) { convertObj2XML(obj, null, "", step); } step--; addSpaces(step); if (root.length() > 0) { addNode2SBLast(root); } else { addNode2SBLast(nameArray); } } public void convertObj2XML(Object obj, Class paramClass, String root, int step) { try { Class c = obj.getClass(); if (paramClass != null) { c = paramClass; } String name = c.getName(); // System.out.println("Name: " + name + " step: " + step + "\n"); String simplename = c.getSimpleName(); // System.out.println("simplename: " + simplename + "\n"); String typename = c.getTypeName(); // System.out.println("typename: " + typename + "\n"); String canonicalName = c.getCanonicalName(); // System.out.println("canonicalName: " + canonicalName + "\n"); if (root.length() > 0) { simplename = root; } Method[] methods = c.getMethods(); Field[] fields; fields = c.getDeclaredFields(); Class superclass = c.getSuperclass(); String superclassName = superclass.getName(); if (!superclassName.equals("java.lang.Object")) { convertObj2XML(obj, superclass, "", step); } else { addSpaces(step); addNode2SBFirst(simplename); } step++; int n = fields.length; for (int i = 0; i < n; i++) { Field attrib = fields[i]; String attribname = attrib.getName(); Object objValue = null; int m = attrib.getModifiers(); Type type = attrib.getGenericType(); // System.out.println("modifier: " + m + " type: " + type.toString()); if ((m & Modifier.TRANSIENT) == 0) { Collection coll = checkObject(type.toString()); switch (coll) { case primitiv: if ((m & Modifier.PUBLIC) > 0) { objValue = attrib.get(obj); } else if (((m & Modifier.PRIVATE) > 0) || ((m & Modifier.PROTECTED) > 0)) { objValue = addAttribWithMethode(obj, methods, simplename, attribname); } break; case object: convertObj2XML(attrib.get(obj), null, "", step); break; case array: convertObj2XMLArray((Object[]) attrib.get(obj), "", step); break; case arraylist: convertObj2XMLArrayList((ArrayList) attrib.get(obj), "", step); break; default: break; } if (objValue != null) { addSpaces(step); addAttrib(attribname, objValue); } } // if } step--; addSpaces(step); addNode2SBLast(simplename); } catch (IllegalAccessException e) { System.out.println("IllegalAccessException: " + e.toString()); } } public String convertObj2JSON(Object obj) { StringBuilder sb = new StringBuilder(); try { Class c = obj.getClass(); Field[] fields; fields = c.getDeclaredFields(); // { {"name": "Meier59", "mnr":12345} sb.append("{"); int n = fields.length - 1; for (int i = 0; i < n; i++) { Field field = fields[i]; sb.append("\""); sb.append(field.getName()); sb.append("\": "); String s = field.getType().toString(); if (s.indexOf("String") > 0) { sb.append("\""); sb.append(field.get(obj)); sb.append("\""); } else { sb.append(field.get(obj)); } if (i < n - 1) { sb.append(", "); } } sb.append("}"); } catch (IllegalAccessException e) { } return sb.toString(); } }