| /* | ||
| * Copyright 2001-2004 (C) MetaStuff, Ltd. All Rights Reserved. | ||
| * | ||
| * This software is open source. | ||
| * See the bottom of this file for the licence. | ||
| * | ||
| * $Id: JAXBSupport.java,v 1.1 2004/08/02 18:44:08 maartenc Exp $ | ||
| */ | ||
| package org.dom4j.jaxb; | ||
| import java.io.StringReader; | ||
| import javax.xml.bind.JAXBContext; | ||
| import javax.xml.bind.JAXBException; | ||
| import javax.xml.bind.Marshaller; | ||
| import javax.xml.bind.Unmarshaller; | ||
| import javax.xml.transform.Source; | ||
| import javax.xml.transform.stream.StreamSource; | ||
| import org.dom4j.dom.DOMDocument; | ||
| /** | ||
| * @author Wonne Keysers (Realsoftware.be) | ||
| */ | ||
| abstract class JAXBSupport { | ||
| private String contextPath; | ||
| private ClassLoader classloader; | ||
| private JAXBContext jaxbContext; | ||
| private Marshaller marshaller; | ||
| private Unmarshaller unmarshaller; | ||
| 0x | public JAXBSupport(String contextPath) { | |
| 0x | this.contextPath = contextPath; | |
| 0x | } | |
| 0x | public JAXBSupport(String contextPath, ClassLoader classloader) { | |
| 0x | this.contextPath = contextPath; | |
| 0x | this.classloader = classloader; | |
| 0x | } | |
| /** | ||
| * Marshals the given {@link javax.xml.bind.Element} in to its DOM4J counterpart. | ||
| * | ||
| * @param element JAXB Element to be marshalled | ||
| * @return the marshalled DOM4J {@link org.dom4j.Element} | ||
| * @throws JAXBException when an error occurs | ||
| */ | ||
| protected org.dom4j.Element marshal(javax.xml.bind.Element element) throws JAXBException { | ||
| 0x | Marshaller marshaller = getMarshaller(); | |
| 0x | DOMDocument doc = new DOMDocument(); | |
| 0x | marshaller.marshal(element, doc); | |
| 0x | return doc.getRootElement(); | |
| } | ||
| /** | ||
| * Unmarshalls the specified DOM4J {@link org.dom4j.Element} into a {@link javax.xml.bind.Element} | ||
| * @param element the DOM4J element to unmarshall | ||
| * @return the unmarshalled JAXB object | ||
| * @throws JAXBException when an error occurs | ||
| */protected javax.xml.bind.Element unmarshal(org.dom4j.Element element) throws JAXBException { | ||
| 0x | Unmarshaller unmarshaller = getUnmarshaller(); | |
| 0x | Source source = new StreamSource(new StringReader(element.asXML())); | |
| 0x | return (javax.xml.bind.Element) unmarshaller.unmarshal(source); | |
| } | ||
| private Marshaller getMarshaller() throws JAXBException { | ||
| 0/2 0x | if (marshaller == null) { | |
| 0x | marshaller = getContext().createMarshaller(); | |
| } | ||
| 0x | return marshaller; | |
| } | ||
| private Unmarshaller getUnmarshaller() throws JAXBException { | ||
| 0/2 0x | if (unmarshaller == null) { | |
| 0x | unmarshaller = getContext().createUnmarshaller(); | |
| } | ||
| 0x | return unmarshaller; | |
| } | ||
| private JAXBContext getContext() throws JAXBException { | ||
| 0/2 0x | if (jaxbContext == null) { | |
| 0/2 0x | if (classloader == null) { | |
| 0x | jaxbContext = JAXBContext.newInstance(contextPath); | |
| } | ||
| else { | ||
| 0x | jaxbContext = JAXBContext.newInstance(contextPath, classloader); | |
| } | ||
| } | ||
| 0x | return jaxbContext; | |
| } | ||
| } | ||
| /* | ||
| * Redistribution and use of this software and associated documentation | ||
| * ("Software"), with or without modification, are permitted provided | ||
| * that the following conditions are met: | ||
| * | ||
| * 1. Redistributions of source code must retain copyright | ||
| * statements and notices. Redistributions must also contain a | ||
| * copy of this document. | ||
| * | ||
| * 2. Redistributions in binary form must reproduce the | ||
| * above copyright notice, this list of conditions and the | ||
| * following disclaimer in the documentation and/or other | ||
| * materials provided with the distribution. | ||
| * | ||
| * 3. The name "DOM4J" must not be used to endorse or promote | ||
| * products derived from this Software without prior written | ||
| * permission of MetaStuff, Ltd. For written permission, | ||
| * please contact dom4j-info@metastuff.com. | ||
| * | ||
| * 4. Products derived from this Software may not be called "DOM4J" | ||
| * nor may "DOM4J" appear in their names without prior written | ||
| * permission of MetaStuff, Ltd. DOM4J is a registered | ||
| * trademark of MetaStuff, Ltd. | ||
| * | ||
| * 5. Due credit should be given to the DOM4J Project - | ||
| * http://www.dom4j.org | ||
| * | ||
| * THIS SOFTWARE IS PROVIDED BY METASTUFF, LTD. AND CONTRIBUTORS | ||
| * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT | ||
| * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND | ||
| * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL | ||
| * METASTUFF, LTD. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, | ||
| * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
| * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | ||
| * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
| * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
| * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
| * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | ||
| * OF THE POSSIBILITY OF SUCH DAMAGE. | ||
| * | ||
| * Copyright 2001-2004 (C) MetaStuff, Ltd. All Rights Reserved. | ||
| * | ||
| * $Id: JAXBSupport.java,v 1.1 2004/08/02 18:44:08 maartenc Exp $ | ||
| */ |