/** * 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.helpers; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.io.Writer; import java.io.File; import java.io.FileOutputStream; import java.io.BufferedOutputStream; import java.io.IOException; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.PropertyException; import javax.xml.bind.ValidationEventHandler; import javax.xml.bind.annotation.adapters.XmlAdapter; import javax.xml.bind.attachment.AttachmentMarshaller; import javax.xml.stream.XMLEventWriter; import javax.xml.stream.XMLStreamWriter; import javax.xml.transform.dom.DOMResult; import javax.xml.transform.sax.SAXResult; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.Result; import javax.xml.validation.Schema; import org.w3c.dom.Node; import org.xml.sax.ContentHandler; public abstract class AbstractMarshallerImpl implements Marshaller { static String aliases[] = { "UTF-8", "UTF8", "UTF-16", "Unicode", "UTF-16BE", "UnicodeBigUnmarked", "UTF-16LE", "UnicodeLittleUnmarked", "US-ASCII", "ASCII", "TIS-620", "TIS620", "ISO-10646-UCS-2", "Unicode", "EBCDIC-CP-US", "cp037", "EBCDIC-CP-CA", "cp037", "EBCDIC-CP-NL", "cp037", "EBCDIC-CP-WT", "cp037", "EBCDIC-CP-DK", "cp277", "EBCDIC-CP-NO", "cp277", "EBCDIC-CP-FI", "cp278", "EBCDIC-CP-SE", "cp278", "EBCDIC-CP-IT", "cp280", "EBCDIC-CP-ES", "cp284", "EBCDIC-CP-GB", "cp285", "EBCDIC-CP-FR", "cp297", "EBCDIC-CP-AR1", "cp420", "EBCDIC-CP-HE", "cp424", "EBCDIC-CP-BE", "cp500", "EBCDIC-CP-CH", "cp500", "EBCDIC-CP-ROECE", "cp870", "EBCDIC-CP-YU", "cp870", "EBCDIC-CP-IS", "cp871", "EBCDIC-CP-AR2", "cp918" }; private ValidationEventHandler eventHandler = new DefaultValidationEventHandler(); private String encoding = "UTF-8"; private String schemaLocation; private String noNSSchemaLocation; private boolean formattedOutput; private boolean fragment; public void marshal(Object obj, File file) throws JAXBException { checkNotNull(obj, "obj", file, "file"); try { OutputStream os = new BufferedOutputStream(new FileOutputStream(file)); try { marshal(obj, new StreamResult(os)); } finally { os.close(); } } catch (IOException e) { throw new JAXBException(e); } } public final void marshal(Object obj, OutputStream os) throws JAXBException { checkNotNull(obj, "obj", os, "os"); marshal(obj, new StreamResult(os)); } public final void marshal(Object obj, Writer w) throws JAXBException { checkNotNull(obj, "obj", w, "writer"); marshal(obj, new StreamResult(w)); } public final void marshal(Object obj, ContentHandler handler) throws JAXBException { checkNotNull(obj, "obj", handler, "handler"); marshal(obj, new SAXResult(handler)); } public final void marshal(Object obj, Node node) throws JAXBException { checkNotNull(obj, "obj", node, "node"); marshal(obj, new DOMResult(node)); } public Node getNode(Object obj) throws JAXBException { checkNotNull(obj, "obj", "foo", "bar"); throw new UnsupportedOperationException(); } protected String getEncoding() { return encoding; } protected void setEncoding(String encoding) { this.encoding = encoding; } protected String getSchemaLocation() { return schemaLocation; } protected void setSchemaLocation(String location) { schemaLocation = location; } protected String getNoNSSchemaLocation() { return noNSSchemaLocation; } protected void setNoNSSchemaLocation(String location) { noNSSchemaLocation = location; } protected boolean isFormattedOutput() { return formattedOutput; } protected void setFormattedOutput(boolean v) { formattedOutput = v; } protected boolean isFragment() { return fragment; } protected void setFragment(boolean v) { fragment = v; } protected String getJavaEncoding(String encoding) throws UnsupportedEncodingException { try { "dummy".getBytes(encoding); return encoding; } catch (UnsupportedEncodingException e) { } for (int i = 0; i < aliases.length; i += 2) { if (encoding.equals(aliases[i])) { "dummy".getBytes(aliases[i + 1]); return aliases[i + 1]; } } throw new UnsupportedEncodingException(encoding); } public void setProperty(String name, Object value) throws PropertyException { if (name == null) { throw new IllegalArgumentException("name must not be null"); } if (JAXB_ENCODING.equals(name)) { checkString(name, value); setEncoding((String) value); } else if (JAXB_FORMATTED_OUTPUT.equals(name)) { checkBoolean(name, value); setFormattedOutput(((Boolean) value).booleanValue()); } else if (JAXB_NO_NAMESPACE_SCHEMA_LOCATION.equals(name)) { checkString(name, value); setNoNSSchemaLocation((String) value); } else if (JAXB_SCHEMA_LOCATION.equals(name)) { checkString(name, value); setSchemaLocation((String) value); } else if (JAXB_FRAGMENT.equals(name)) { checkBoolean(name, value); setFragment(((Boolean) value).booleanValue()); } else { throw new PropertyException(name, value); } } public Object getProperty(String name) throws PropertyException { if (name == null) { throw new IllegalArgumentException("name must not be null"); } if (JAXB_ENCODING.equals(name)) { return getEncoding(); } else if (JAXB_FORMATTED_OUTPUT.equals(name)) { return isFormattedOutput() ? Boolean.TRUE : Boolean.FALSE; } else if (JAXB_NO_NAMESPACE_SCHEMA_LOCATION.equals(name)) { return getNoNSSchemaLocation(); } else if (JAXB_SCHEMA_LOCATION.equals(name)) { return getSchemaLocation(); } else if (JAXB_FRAGMENT.equals(name)) { return isFragment() ? Boolean.TRUE : Boolean.FALSE; } else { throw new PropertyException(name); } } public ValidationEventHandler getEventHandler() throws JAXBException { return eventHandler; } public void setEventHandler(ValidationEventHandler handler) throws JAXBException { if (handler == null) { eventHandler = new DefaultValidationEventHandler(); } else { eventHandler = handler; } } private void checkBoolean(String name, Object value) throws PropertyException { if (!(value instanceof Boolean)) { throw new PropertyException(name + " must be a boolean"); } } private void checkString(String name, Object value) throws PropertyException { if (!(value instanceof String)) { throw new PropertyException(name + " must be a string"); } } private void checkNotNull(Object o1, String o1Name, Object o2, String o2Name) { if (o1 == null) { throw new IllegalArgumentException(o1Name + " must not be null"); } if (o2 == null) { throw new IllegalArgumentException(o2Name + " must not be null"); } } public void marshal(Object obj, XMLEventWriter writer) throws JAXBException { throw new UnsupportedOperationException(); } public void marshal(Object obj, XMLStreamWriter writer) throws JAXBException { throw new UnsupportedOperationException(); } public void setSchema(Schema schema) { throw new UnsupportedOperationException(); } public Schema getSchema() { throw new UnsupportedOperationException(); } public void setAdapter(XmlAdapter adapter) { if (adapter == null) { throw new IllegalArgumentException(); } setAdapter((Class<XmlAdapter>) adapter.getClass(), adapter); } public <A extends XmlAdapter> void setAdapter(Class<A> type, A adapter) { throw new UnsupportedOperationException(); } public <A extends XmlAdapter> A getAdapter(Class<A> type) { throw new UnsupportedOperationException(); } public void setAttachmentMarshaller(AttachmentMarshaller am) { throw new UnsupportedOperationException(); } public AttachmentMarshaller getAttachmentMarshaller() { throw new UnsupportedOperationException(); } public void setListener(javax.xml.bind.Marshaller.Listener listener) { throw new UnsupportedOperationException(); } public javax.xml.bind.Marshaller.Listener getListener() { throw new UnsupportedOperationException(); } }