Project: servicemix4-specs
Code Examples
/**
 * Licensed to the Apache Software Foundation (ASF) under one or more 
 * contributor license agreements.  See the NOTICE file distributed with 
 * this work for additional information regarding copyright ownership. 
 * The ASF licenses this file to You 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. 
 */
package javax.xml.bind; 
 
import java.io.File; 
import java.io.OutputStream; 
import java.io.Writer; 
import java.io.IOException; 
import java.io.Reader; 
import java.io.InputStream; 
import java.net.URI; 
import java.net.URL; 
import java.net.URLConnection; 
import java.net.URISyntaxException; 
import java.net.MalformedURLException; 
import java.beans.Introspector; 
 
import javax.xml.transform.Result; 
import javax.xml.transform.Source; 
import javax.xml.transform.stream.StreamResult; 
import javax.xml.transform.stream.StreamSource; 
import javax.xml.bind.annotation.XmlRootElement; 
import javax.xml.namespace.QName; 
 
final public class JAXB { 
 
    private JAXB() { 
    } 
 
    public static void marshal(Object object, File file) { 
        if (file == null) { 
            throw new IllegalStateException("No file is given"); 
        } 
        marshal(object, new StreamResult(file)); 
    } 
 
    public static void marshal(Object object, OutputStream os) { 
        if (os == null) { 
            throw new IllegalStateException("No output stream is given"); 
        } 
        marshal(object, new StreamResult(os)); 
    } 
 
    public static void marshal(Object object, Writer writer) { 
        if (writer == null) { 
            throw new IllegalStateException("No writer is given"); 
        } 
        marshal(object, new StreamResult(writer)); 
    } 
 
    public static void marshal(Object object, String str) { 
        if (str == null) { 
            throw new IllegalStateException("No string destination is given"); 
        } 
        try { 
            marshal(object, new URI(str)); 
        } catch (URISyntaxException e) { 
            marshal(object, new File(str)); 
        } 
    } 
 
    public static void marshal(Object object, URI uri) { 
        if (uri == null) { 
            throw new IllegalStateException("No uri is given"); 
        } 
        try { 
            marshal(object, uri.toURL()); 
        } catch (IOException e) { 
            throw new DataBindingException(e); 
        } 
    } 
 
    public static void marshal(Object object, URL url) { 
        if (url == null) { 
            throw new IllegalStateException("No url is given"); 
        } 
        try { 
            URLConnection con = url.openConnection(); 
            con.setDoOutput(true); 
            con.setDoInput(false); 
            con.connect(); 
            marshal(object, new StreamResult(con.getOutputStream())); 
        } catch (IOException e) { 
            throw new DataBindingException(e); 
        } 
    } 
 
    public static void marshal(Object object, Result result) { 
        try { 
            JAXBContext context; 
            if (object instanceof JAXBElement) { 
                context = getContext(((JAXBElement<?>) object).getDeclaredType()); 
            } else { 
                Class<?> clazz = object.getClass(); 
                XmlRootElement r = clazz.getAnnotation(XmlRootElement.class); 
                if (r == null) { 
                    // we need to infer the name 
                    object = new JAXBElement(new QName(Introspector.decapitalize(clazz.getSimpleName())), 
                                             clazz, object); 
                } 
                context = getContext(clazz); 
            } 
            Marshaller m = context.createMarshaller(); 
            m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,true); 
            m.marshal(object, result); 
        } catch (JAXBException e) { 
            throw new DataBindingException(e); 
        } 
    } 
 
    public static <T> T unmarshal(File file, Class<T> type) { 
        if (file == null) { 
            throw new IllegalStateException("No file is given"); 
        } 
        return unmarshal(new StreamSource(file), type); 
    } 
 
    public static <T> T unmarshal(URL url, Class<T> type) { 
        if (url == null) { 
            throw new IllegalStateException("No url is given"); 
        } 
        return unmarshal(new StreamSource(url.toExternalForm()), type); 
    } 
 
    public static <T> T unmarshal(URI uri, Class<T> type) { 
        if (uri == null) { 
            throw new IllegalStateException("No uri is given"); 
        } 
        try { 
            return unmarshal(uri.toURL(), type); 
        } catch (MalformedURLException e) { 
            throw new DataBindingException(e); 
        } 
    } 
 
    public static <T> T unmarshal(String str, Class<T> type) { 
        if (str == null) { 
            throw new IllegalStateException("No string destination is given"); 
        } 
        try { 
            return unmarshal(new URI(str), type); 
        } catch (URISyntaxException e) { 
            return unmarshal(new File(str), type); 
        } 
    } 
 
    public static <T> T unmarshal(InputStream is, Class<T> type) { 
        if (is == null) { 
            throw new IllegalStateException("No input stream is given"); 
        } 
        return unmarshal(new StreamSource(is), type); 
    } 
 
    public static <T> T unmarshal(Reader reader, Class<T> type) { 
        if (reader == null) { 
            throw new IllegalStateException("No reader is given"); 
        } 
        return unmarshal(new StreamSource(reader), type); 
    } 
 
    public static <T> T unmarshal(Source source, Class<T> type) { 
        try { 
            JAXBElement<T> item = getContext(type).createUnmarshaller().unmarshal(source, type); 
            return item.getValue(); 
        } catch (JAXBException e) { 
            throw new DataBindingException(e); 
        } 
    } 
 
    private static <T> JAXBContext getContext(Class<T> type) throws JAXBException { 
        return JAXBContext.newInstance(type); 
    } 
 
 
}