All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.magicwerk.brownies.jdom.JaxbTools Maven / Gradle / Ivy

/*
 * Copyright 2015 by Thomas Mauch
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * $Id$
 */
package org.magicwerk.brownies.jdom;

import java.io.Reader;
import java.io.StringWriter;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.namespace.QName;
import javax.xml.transform.stream.StreamSource;

import org.magicwerk.brownies.core.StreamTools;
import org.magicwerk.brownies.core.exceptions.WrapperException;

/**
 * Helper tools for JAXB serialization.
 *
 * @author Thomas Mauch
 * @version $Id$
 */
public class JaxbTools {

	// This class is in Brownies-Jdom as needed libraries like xml-apis and xercesImpl are declared here. 
	// Otherwise an error will be raised:
	// org.xml.sax.SAXNotRecognizedException: Feature 'http://javax.xml.XMLConstants/feature/secure-processing' is not recognized.

	public static String toJaxb(Object obj) {
		try {
			@SuppressWarnings("unchecked")
			Class clazz = (Class) obj.getClass();
			JAXBContext jc = JAXBContext.newInstance(clazz);
			QName qname = new QName(clazz.getSimpleName());
			JAXBElement je = new JAXBElement(qname, clazz, obj);
			Marshaller marshaller = jc.createMarshaller();
			marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
			StringWriter sw = new StringWriter();
			marshaller.marshal(je, sw);
			return sw.toString();
		} catch (Exception e) {
			throw new WrapperException(e);
		}
	}

	public static  T fromJaxb(String xml, Class clazz) {
		try {
			JAXBContext jc = JAXBContext.newInstance(clazz);
			Reader reader = StreamTools.getReader(xml);
			StreamSource source = new StreamSource(reader);
			Unmarshaller unmarshaller = jc.createUnmarshaller();
			JAXBElement je = unmarshaller.unmarshal(source, clazz);
			T obj = je.getValue();
			return obj;
		} catch (Exception e) {
			throw new WrapperException(e);
		}
	}

}