domserializerimpl.java

来自「JAVA的一些源码 JAVA2 STANDARD EDITION DEVELO」· Java 代码 · 共 1,175 行 · 第 1/4 页

JAVA
1,175
字号
                String msg =                    DOMMessageFormatter.formatMessage(                        DOMMessageFormatter.DOM_DOMAIN,                        "TYPE_MISMATCH_ERR",                        new Object[] { name });                throw new DOMException(DOMException.NOT_FOUND_ERR, msg);            }        } else if (            name.equalsIgnoreCase(Constants.DOM_RESOURCE_RESOLVER)                || name.equalsIgnoreCase(Constants.DOM_SCHEMA_LOCATION)                || name.equalsIgnoreCase(Constants.DOM_SCHEMA_TYPE)                && value != null) {            String msg =                DOMMessageFormatter.formatMessage(                    DOMMessageFormatter.DOM_DOMAIN,                    "FEATURE_NOT_SUPPORTED",                    new Object[] { name });            throw new DOMException(DOMException.NOT_SUPPORTED_ERR, msg);        } else {            String msg =                DOMMessageFormatter.formatMessage(                    DOMMessageFormatter.DOM_DOMAIN,                    "FEATURE_NOT_FOUND",                    new Object[] { name });            throw new DOMException(DOMException.NOT_FOUND_ERR, msg);        }    }    /** DOM L3-EXPERIMENTAL:     * Check if parameter can be set     */	public boolean canSetParameter(String name, Object state) {		if (state instanceof Boolean){			boolean value = ((Boolean)state).booleanValue();			if (name.equalsIgnoreCase(Constants.DOM_NAMESPACES)			|| name.equalsIgnoreCase(Constants.DOM_SPLIT_CDATA)			|| name.equalsIgnoreCase(Constants.DOM_DISCARD_DEFAULT_CONTENT)			|| name.equalsIgnoreCase(Constants.DOM_XMLDECL)            || name.equalsIgnoreCase(Constants.DOM_WELLFORMED)            || name.equalsIgnoreCase(Constants.DOM_INFOSET)            || name.equalsIgnoreCase(Constants.DOM_ENTITIES)            || name.equalsIgnoreCase(Constants.DOM_CDATA_SECTIONS)            || name.equalsIgnoreCase(Constants.DOM_COMMENTS)){	            // both values supported				return true;			}			else if (name.equalsIgnoreCase(Constants.DOM_CANONICAL_FORM)			    || name.equalsIgnoreCase(Constants.DOM_VALIDATE_IF_SCHEMA)			    || name.equalsIgnoreCase(Constants.DOM_VALIDATE)			    || name.equalsIgnoreCase(Constants.DOM_CHECK_CHAR_NORMALIZATION)			    || name.equalsIgnoreCase(Constants.DOM_DATATYPE_NORMALIZATION)			    || name.equalsIgnoreCase(Constants.DOM_FORMAT_PRETTY_PRINT)){				// true is not supported				return !value;			}			else if(name.equalsIgnoreCase(Constants.DOM_NORMALIZE_CHARACTERS)){				return false;			}			else if (name.equalsIgnoreCase(Constants.DOM_NAMESPACE_DECLARATIONS)			        || name.equalsIgnoreCase(Constants.DOM_ELEMENT_CONTENT_WHITESPACE)			        || name.equalsIgnoreCase(Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS)) {				// false is not supported				return value;			        }		}		else if (name.equalsIgnoreCase(Constants.DOM_ERROR_HANDLER) &&				state == null || state instanceof DOMErrorHandler){			return true;		}	    return false;    }    /**     *  DOM Level 3 Core CR - Experimental.     *      *  The list of the parameters supported by this      * <code>DOMConfiguration</code> object and for which at least one value      * can be set by the application. Note that this list can also contain      * parameter names defined outside this specification.      */    public DOMStringList getParameterNames() {    	     	if (fRecognizedParameters == null){			Vector parameters = new Vector();			//Add DOM recognized parameters			//REVISIT: Would have been nice to have a list of 			//recognized parameters.			parameters.add(Constants.DOM_NAMESPACES);			parameters.add(Constants.DOM_SPLIT_CDATA);			parameters.add(Constants.DOM_DISCARD_DEFAULT_CONTENT);			parameters.add(Constants.DOM_XMLDECL);			parameters.add(Constants.DOM_CANONICAL_FORM);			parameters.add(Constants.DOM_VALIDATE_IF_SCHEMA);			parameters.add(Constants.DOM_VALIDATE);			parameters.add(Constants.DOM_CHECK_CHAR_NORMALIZATION);			parameters.add(Constants.DOM_DATATYPE_NORMALIZATION);			parameters.add(Constants.DOM_FORMAT_PRETTY_PRINT);			//parameters.add(Constants.DOM_NORMALIZE_CHARACTERS);			parameters.add(Constants.DOM_WELLFORMED);			parameters.add(Constants.DOM_INFOSET);			parameters.add(Constants.DOM_NAMESPACE_DECLARATIONS);			parameters.add(Constants.DOM_ELEMENT_CONTENT_WHITESPACE);			parameters.add(Constants.DOM_ENTITIES);			parameters.add(Constants.DOM_CDATA_SECTIONS);			parameters.add(Constants.DOM_COMMENTS);			parameters.add(Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS);			parameters.add(Constants.DOM_ERROR_HANDLER);			//parameters.add(Constants.DOM_SCHEMA_LOCATION);			//parameters.add(Constants.DOM_SCHEMA_TYPE);						//Add recognized xerces features and properties						fRecognizedParameters = new DOMStringListImpl(parameters);		    		    	}    	return fRecognizedParameters; 	    }	        /** DOM L3-EXPERIMENTAL:     * Getter for boolean and object parameters     */    public Object getParameter(String name) throws DOMException {        if (name.equalsIgnoreCase(Constants.DOM_COMMENTS)) {            return ((features & COMMENTS) != 0) ? Boolean.TRUE : Boolean.FALSE;		} else if(name.equalsIgnoreCase(Constants.DOM_NORMALIZE_CHARACTERS)){			return null;        } else if (name.equalsIgnoreCase(Constants.DOM_NAMESPACES)) {            return (features & NAMESPACES) != 0 ? Boolean.TRUE : Boolean.FALSE;        } else if (name.equalsIgnoreCase(Constants.DOM_XMLDECL)) {            return (features & XMLDECL) != 0 ? Boolean.TRUE : Boolean.FALSE;        } else if (name.equalsIgnoreCase(Constants.DOM_CDATA_SECTIONS)) {            return (features & CDATA) != 0 ? Boolean.TRUE : Boolean.FALSE;        } else if (name.equalsIgnoreCase(Constants.DOM_ENTITIES)) {            return (features & ENTITIES) != 0 ? Boolean.TRUE : Boolean.FALSE;        } else if (name.equalsIgnoreCase(Constants.DOM_SPLIT_CDATA)) {            return (features & SPLITCDATA) != 0 ? Boolean.TRUE : Boolean.FALSE;        } else if (name.equalsIgnoreCase(Constants.DOM_WELLFORMED)) {            return (features & WELLFORMED) != 0 ? Boolean.TRUE : Boolean.FALSE;        } else if (name.equalsIgnoreCase(Constants.DOM_ELEMENT_CONTENT_WHITESPACE) ||                   name.equalsIgnoreCase(Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS)                    || name.equalsIgnoreCase(Constants.DOM_NAMESPACE_DECLARATIONS)) {            return Boolean.TRUE;        }else if (name.equalsIgnoreCase(Constants.DOM_DISCARD_DEFAULT_CONTENT)){            return ((features & DISCARDDEFAULT)!=0)?Boolean.TRUE:Boolean.FALSE;        }else if (name.equalsIgnoreCase(Constants.DOM_INFOSET)){            if ((features & ENTITIES) == 0 &&                 (features & CDATA) ==0 &&                 (features & NAMESPACES) !=0 &&                 (features & WELLFORMED) !=0 &&                 (features & COMMENTS) !=0){                     return Boolean.TRUE;                 }                                  return Boolean.FALSE;        } else if (name.equalsIgnoreCase (Constants.DOM_FORMAT_PRETTY_PRINT)                || name.equalsIgnoreCase(Constants.DOM_CANONICAL_FORM)                || name.equalsIgnoreCase(Constants.DOM_VALIDATE_IF_SCHEMA)                || name.equalsIgnoreCase(Constants.DOM_CHECK_CHAR_NORMALIZATION)                || name.equalsIgnoreCase(Constants.DOM_VALIDATE)                || name.equalsIgnoreCase(Constants.DOM_VALIDATE_IF_SCHEMA)                || name.equalsIgnoreCase(Constants.DOM_DATATYPE_NORMALIZATION)) {            return Boolean.FALSE;        } else if (name.equalsIgnoreCase(Constants.DOM_ERROR_HANDLER)) {            return fErrorHandler;        } else if (            name.equalsIgnoreCase(Constants.DOM_RESOURCE_RESOLVER)                || name.equalsIgnoreCase(Constants.DOM_SCHEMA_LOCATION)                || name.equalsIgnoreCase(Constants.DOM_SCHEMA_TYPE)) {            String msg =                DOMMessageFormatter.formatMessage(                    DOMMessageFormatter.DOM_DOMAIN,                    "FEATURE_NOT_SUPPORTED",                    new Object[] { name });            throw new DOMException(DOMException.NOT_SUPPORTED_ERR, msg);        } else {            String msg =                DOMMessageFormatter.formatMessage(                    DOMMessageFormatter.DOM_DOMAIN,                    "FEATURE_NOT_FOUND",                    new Object[] { name });            throw new DOMException(DOMException.NOT_FOUND_ERR, msg);        }    }    /**     * DOM L3 EXPERIMENTAL:     *  Serialize the specified node as described above in the description of     * <code>LSSerializer</code>. The result of serializing the node is     * returned as a string. Writing a Document or Entity node produces a     * serialized form that is well formed XML. Writing other node types     * produces a fragment of text in a form that is not fully defined by     * this document, but that should be useful to a human for debugging or     * diagnostic purposes.     * @param wnode  The node to be written.     * @return  Returns the serialized data, or <code>null</code> in case a     *   failure occured and the failure wasn't canceled by the error     *   handler.     * @exception DOMException     *    DOMSTRING_SIZE_ERR: The resulting string is too long to fit in a     *   <code>DOMString</code>.     */    public String writeToString(Node wnode) throws DOMException, LSException {        // determine which serializer to use:        Document doc = (wnode.getNodeType() == Node.DOCUMENT_NODE)?(Document)wnode:wnode.getOwnerDocument();        Method getVersion = null;        XMLSerializer ser = null;        String ver = null;        // this should run under JDK 1.1.8...        try {            getVersion = doc.getClass().getMethod("getXmlVersion", new Class[]{});            if(getVersion != null ) {                ver = (String)getVersion.invoke(doc, null);            }        } catch (Exception e) {            // no way to test the version...            // ignore the exception        }        if(ver != null && ver.equals("1.1")) {            if(xml11Serializer == null) {                xml11Serializer = new XML11Serializer();                initSerializer(xml11Serializer);            }            // copy setting from "main" serializer to XML 1.1 serializer            copySettings(serializer, xml11Serializer);            ser = xml11Serializer;        } else {            ser = serializer;        }        StringWriter destination = new StringWriter();        try {            prepareForSerialization(ser, wnode);            ser._format.setEncoding("UTF-16");            ser.setOutputCharStream(destination);            if (wnode == null)                return null;            else if (wnode.getNodeType() == Node.DOCUMENT_NODE)                ser.serialize((Document)wnode);            else if (wnode.getNodeType() == Node.DOCUMENT_FRAGMENT_NODE)                ser.serialize((DocumentFragment)wnode);            else if (wnode.getNodeType() == Node.ELEMENT_NODE)                ser.serialize((Element)wnode);            else                return null;        } catch (RuntimeException e) {            if (e == DOMNormalizer.abort){                // stopped at user request                return null;            }            throw new LSException(LSException.SERIALIZE_ERR, e.toString());                    } catch (IOException ioe) {	        String msg = DOMMessageFormatter.formatMessage(			    DOMMessageFormatter.DOM_DOMAIN,				"STRING_TOO_LONG",				new Object[] { ioe.getMessage()});            throw new DOMException(DOMException.DOMSTRING_SIZE_ERR,msg);        }        return destination.toString();    }    /**     * DOM L3 EXPERIMENTAL:     * The end-of-line sequence of characters to be used in the XML being     * written out. The only permitted values are these:     * <dl>     * <dt><code>null</code></dt>     * <dd>     * Use a default end-of-line sequence. DOM implementations should choose     * the default to match the usual convention for text files in the     * environment being used. Implementations must choose a default     * sequence that matches one of those allowed by  2.11 "End-of-Line     * Handling". </dd>     * <dt>CR</dt>     * <dd>The carriage-return character (#xD).</dd>     * <dt>CR-LF</dt>     * <dd> The     * carriage-return and line-feed characters (#xD #xA). </dd>     * <dt>LF</dt>     * <dd> The line-feed     * character (#xA). </dd>     * </dl>     * <br>The default value for this attribute is <code>null</code>.     */    public void setNewLine(String newLine) {        serializer._format.setLineSeparator(newLine);    }    /**     * DOM L3 EXPERIMENTAL:     * The end-of-line sequence of characters to be used in the XML being     * written out. The only permitted values are these:

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?