1 package com.aurea.maven.plugins.util;
2
3 import java.io.InputStream;
4 import java.io.OutputStream;
5
6 import javax.xml.bind.JAXBContext;
7 import javax.xml.bind.Marshaller;
8 import javax.xml.bind.Unmarshaller;
9 import javax.xml.bind.annotation.XmlRootElement;
10
11 public class JAXBHelper {
12
13 public static void marshal(Object o, OutputStream os) throws Exception {
14 try {
15 String jp = getJAXBPackage(o.getClass());
16 if (jp != null) {
17 JAXBContext ctxt = JAXBContext.newInstance(getJAXBPackage(o.getClass()));
18 Marshaller m = ctxt.createMarshaller();
19 m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
20 m.marshal(o, os);
21 }
22 } catch (Exception e) {
23 e.printStackTrace();
24 throw (e);
25 }
26 }
27
28 public static Object unmarshal(Class<?> c, InputStream is) throws Exception {
29
30 Object result = null;
31 String jp = getJAXBPackage(c);
32
33 try {
34 if (jp != null) {
35 JAXBContext ctxt = JAXBContext.newInstance(c);
36 Unmarshaller um = ctxt.createUnmarshaller();
37 result = um.unmarshal(is);
38 }
39 } catch (Exception e) {
40 e.printStackTrace();
41 throw (e);
42 }
43
44 return result;
45 }
46
47 @SuppressWarnings("unchecked")
48 private static String getJAXBPackage(@SuppressWarnings("rawtypes") Class clazz) {
49 if (clazz.getAnnotation(XmlRootElement.class) != null) {
50 return clazz.getPackage().getName();
51 } else {
52 if (clazz.getSuperclass() != null) {
53 return getJAXBPackage(clazz.getSuperclass());
54 } else {
55 return null;
56 }
57 }
58 }
59 }