| /** |
| * 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); |
| } |
| |
| |
| } |