abstractmarshallerimpl.java
来自「RESIN 3.2 最新源码」· Java 代码 · 共 302 行
JAVA
302 行
/** Copyright (c) 1998-2007 Caucho Technology -- all rights reserved** This file is part of Resin(R) Open Source** Each copy or derived work must preserve the copyright notice and this* notice unmodified.** Resin Open Source is free software; you can redistribute it and/or modify* it under the terms of the GNU General Public License as published by* the Free Software Foundation; either version 2 of the License, or* (at your option) any later version.** Resin Open Source is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty* of NON-INFRINGEMENT. See the GNU General Public License for more* details.** You should have received a copy of the GNU General Public License* along with Resin Open Source; if not, write to the** Free Software Foundation, Inc.* 59 Temple Place, Suite 330* Boston, MA 02111-1307 USA** @author Scott Ferguson*/package javax.xml.bind.helpers;import org.w3c.dom.Node;import org.xml.sax.ContentHandler;import javax.xml.bind.JAXBException;import javax.xml.bind.Marshaller;import javax.xml.bind.PropertyException;import javax.xml.bind.ValidationEvent;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.XMLOutputFactory;import javax.xml.stream.XMLStreamException;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.validation.Schema;import java.io.OutputStream;import java.io.UnsupportedEncodingException;import java.io.Writer;import java.util.HashMap;public abstract class AbstractMarshallerImpl implements Marshaller{ private XMLOutputFactory _factory; private AttachmentMarshaller _attachmentMarshaller; private String _encoding = "UTF-8"; private ValidationEventHandler _validationEventHandler = _defaultValidationEventHandler; private Listener _listener; private boolean _formattedOutput = false; private boolean _fragment = false; private String _noNSSchemaLocation; private Schema _schema; private String _schemaLocation; private HashMap<String,Object> _properties = new HashMap<String,Object>(); private HashMap<Class,XmlAdapter> _adapters = new HashMap<Class,XmlAdapter>(); private static final ValidationEventHandler _defaultValidationEventHandler = new DefaultValidationEventHandler() { public boolean handleEvent(ValidationEvent event) { if (event == null) throw new IllegalArgumentException(); return event.getSeverity() != ValidationEvent.FATAL_ERROR; } }; private final HashMap<String,String> _ianaToJavaEncoding = new HashMap<String,String>(); public AbstractMarshallerImpl() { _ianaToJavaEncoding.put("UTF-8", "UTF8"); // XXX add more encodings } public <A extends XmlAdapter> A getAdapter(Class<A> type) { return (A)_adapters.get(type); } public AttachmentMarshaller getAttachmentMarshaller() { return _attachmentMarshaller; } protected String getEncoding() { return _encoding; } public ValidationEventHandler getEventHandler() throws JAXBException { return _validationEventHandler; } protected String getJavaEncoding(String encoding) throws UnsupportedEncodingException { if (_ianaToJavaEncoding.containsKey(encoding)) return _ianaToJavaEncoding.get(encoding); throw new UnsupportedEncodingException(encoding); } public Listener getListener() { return _listener; } public Node getNode(Object obj) throws JAXBException { throw new UnsupportedOperationException(); } protected String getNoNSSchemaLocation() { return _noNSSchemaLocation; } public Object getProperty(String name) throws PropertyException { if (name.equals("jaxb.encoding")) { return getEncoding(); } else if (name.equals("jaxb.formatted.output")) { return _formattedOutput; } else if (name.equals("jaxb.schemaLocation")) { return getSchemaLocation(); } else if (name.equals("jaxb.noNamespaceSchemaLocation")) { return getNoNSSchemaLocation(); } else if (name.equals("jaxb.fragment")) { return _fragment; } else if (_properties.containsKey(name)) { return _properties.get(name); } throw new PropertyException(name); } public Schema getSchema() { return _schema; } protected String getSchemaLocation() { return _schemaLocation; } protected boolean isFormattedOutput() { return _formattedOutput; } protected boolean isFragment() { return _fragment; } public final void marshal(Object obj, ContentHandler handler) throws JAXBException { SAXResult result = new SAXResult(handler); marshal(obj, result); } public final void marshal(Object obj, Node node) throws JAXBException { DOMResult result = new DOMResult(node); marshal(obj, result); } private XMLOutputFactory getXMLOutputFactory() { if (_factory == null) { _factory = XMLOutputFactory.newInstance(); _factory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, Boolean.TRUE); } return _factory; } public final void marshal(Object obj, OutputStream os) throws JAXBException { marshal(obj, new StreamResult(os)); } public final void marshal(Object obj, Writer w) throws JAXBException { marshal(obj, new StreamResult(w)); } public <A extends XmlAdapter> void setAdapter(Class<A> type, A adapter) { _adapters.put(type, adapter); } public void setAdapter(XmlAdapter adapter) { _adapters.put((Class)adapter.getClass(), adapter); } public void setAttachmentMarshaller(AttachmentMarshaller am) { _attachmentMarshaller = am; } protected void setEncoding(String encoding) { _encoding = encoding; } public void setEventHandler(ValidationEventHandler handler) throws JAXBException { _validationEventHandler = handler; } protected void setFormattedOutput(boolean v) { _formattedOutput = v; } protected void setFragment(boolean v) { _fragment = v; } public void setListener(Listener listener) { _listener = listener; } protected void setNoNSSchemaLocation(String location) { _noNSSchemaLocation = location; } public void setProperty(String name, Object value) throws PropertyException { if (name.equals("jaxb.encoding")) { setEncoding((String)value); } else if (name.equals("jaxb.formatted.output")) { setFormattedOutput(((Boolean)value).booleanValue()); } else if (name.equals("jaxb.schemaLocation")) { setSchemaLocation((String)value); } else if (name.equals("jaxb.noNamespaceSchemaLocation")) { setNoNSSchemaLocation((String)value); } else if (name.equals("jaxb.fragment")) { setFragment(((Boolean)value).booleanValue()); } else { _properties.put(name, value); } } public void setSchema(Schema schema) { _schema = schema; } protected void setSchemaLocation(String location) { _schemaLocation = location; } public void marshal(Object obj, XMLEventWriter writer) throws JAXBException { throw new UnsupportedOperationException("subclasses must override this"); } public void marshal(Object obj, XMLStreamWriter writer) throws JAXBException { throw new UnsupportedOperationException("subclasses must override this"); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?