Package org.apache.xml.serialize

Source Code of org.apache.xml.serialize.DOMSerializerImpl

package org.apache.xml.serialize;

import java.io.IOException;
import java.io.OutputStream;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.lang.reflect.Method;
import java.util.Vector;
import org.apache.xerces.dom.CoreDocumentImpl;
import org.apache.xerces.dom.DOMErrorImpl;
import org.apache.xerces.dom.DOMLocatorImpl;
import org.apache.xerces.dom.DOMMessageFormatter;
import org.apache.xerces.dom.DOMNormalizer;
import org.apache.xerces.dom.DOMStringListImpl;
import org.apache.xerces.impl.XMLEntityManager;
import org.apache.xerces.util.DOMUtil;
import org.apache.xerces.util.NamespaceSupport;
import org.apache.xerces.util.SymbolTable;
import org.apache.xerces.util.XML11Char;
import org.apache.xerces.util.XMLChar;
import org.w3c.dom.Attr;
import org.w3c.dom.CharacterData;
import org.w3c.dom.Comment;
import org.w3c.dom.DOMConfiguration;
import org.w3c.dom.DOMError;
import org.w3c.dom.DOMErrorHandler;
import org.w3c.dom.DOMException;
import org.w3c.dom.DOMStringList;
import org.w3c.dom.Document;
import org.w3c.dom.DocumentFragment;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.ProcessingInstruction;
import org.w3c.dom.ls.LSException;
import org.w3c.dom.ls.LSOutput;
import org.w3c.dom.ls.LSSerializer;
import org.w3c.dom.ls.LSSerializerFilter;

/** @deprecated */
public class DOMSerializerImpl
  implements LSSerializer, DOMConfiguration
{
  private XMLSerializer serializer = new XMLSerializer();
  private XML11Serializer xml11Serializer;
  private DOMStringList fRecognizedParameters;
  protected short features = 0;
  protected static final short NAMESPACES = 1;
  protected static final short WELLFORMED = 2;
  protected static final short ENTITIES = 4;
  protected static final short CDATA = 8;
  protected static final short SPLITCDATA = 16;
  protected static final short COMMENTS = 32;
  protected static final short DISCARDDEFAULT = 64;
  protected static final short INFOSET = 128;
  protected static final short XMLDECL = 256;
  protected static final short NSDECL = 512;
  protected static final short DOM_ELEMENT_CONTENT_WHITESPACE = 1024;
  protected static final short PRETTY_PRINT = 2048;
  private DOMErrorHandler fErrorHandler = null;
  private final DOMErrorImpl fError = new DOMErrorImpl();
  private final DOMLocatorImpl fLocator = new DOMLocatorImpl();

  public DOMSerializerImpl()
  {
    initSerializer(this.serializer);
  }

  public DOMConfiguration getDomConfig()
  {
    return this;
  }

  public void setParameter(String paramString, Object paramObject)
    throws DOMException
  {
    if ((paramObject instanceof Boolean))
    {
      boolean bool = ((Boolean)paramObject).booleanValue();
      if (paramString.equalsIgnoreCase("infoset"))
      {
        if (bool)
        {
          this.features = (short)(this.features & 0xFFFFFFFB);
          this.features = (short)(this.features & 0xFFFFFFF7);
          this.features = (short)(this.features | 0x1);
          this.features = (short)(this.features | 0x200);
          this.features = (short)(this.features | 0x2);
          this.features = (short)(this.features | 0x20);
        }
      }
      else if (paramString.equalsIgnoreCase("xml-declaration"))
      {
        this.features = (bool ? (short)(this.features | 0x100) : (short)(this.features & 0xFFFFFEFF));
      }
      else if (paramString.equalsIgnoreCase("namespaces"))
      {
        this.features = (bool ? (short)(this.features | 0x1) : (short)(this.features & 0xFFFFFFFE));
        this.serializer.fNamespaces = bool;
      }
      else if (paramString.equalsIgnoreCase("split-cdata-sections"))
      {
        this.features = (bool ? (short)(this.features | 0x10) : (short)(this.features & 0xFFFFFFEF));
      }
      else if (paramString.equalsIgnoreCase("discard-default-content"))
      {
        this.features = (bool ? (short)(this.features | 0x40) : (short)(this.features & 0xFFFFFFBF));
      }
      else if (paramString.equalsIgnoreCase("well-formed"))
      {
        this.features = (bool ? (short)(this.features | 0x2) : (short)(this.features & 0xFFFFFFFD));
      }
      else if (paramString.equalsIgnoreCase("entities"))
      {
        this.features = (bool ? (short)(this.features | 0x4) : (short)(this.features & 0xFFFFFFFB));
      }
      else if (paramString.equalsIgnoreCase("cdata-sections"))
      {
        this.features = (bool ? (short)(this.features | 0x8) : (short)(this.features & 0xFFFFFFF7));
      }
      else if (paramString.equalsIgnoreCase("comments"))
      {
        this.features = (bool ? (short)(this.features | 0x20) : (short)(this.features & 0xFFFFFFDF));
      }
      else if (paramString.equalsIgnoreCase("format-pretty-print"))
      {
        this.features = (bool ? (short)(this.features | 0x800) : (short)(this.features & 0xFFFFF7FF));
      }
      else
      {
        String str2;
        if ((paramString.equalsIgnoreCase("canonical-form")) || (paramString.equalsIgnoreCase("validate-if-schema")) || (paramString.equalsIgnoreCase("validate")) || (paramString.equalsIgnoreCase("check-character-normalization")) || (paramString.equalsIgnoreCase("datatype-normalization")) || (paramString.equalsIgnoreCase("normalize-characters")))
        {
          if (bool)
          {
            str2 = DOMMessageFormatter.formatMessage("http://www.w3.org/dom/DOMTR", "FEATURE_NOT_SUPPORTED", new Object[] { paramString });
            throw new DOMException(9, str2);
          }
        }
        else if (paramString.equalsIgnoreCase("namespace-declarations"))
        {
          this.features = (bool ? (short)(this.features | 0x200) : (short)(this.features & 0xFFFFFDFF));
          this.serializer.fNamespacePrefixes = bool;
        }
        else if ((paramString.equalsIgnoreCase("element-content-whitespace")) || (paramString.equalsIgnoreCase("ignore-unknown-character-denormalizations")))
        {
          if (!bool)
          {
            str2 = DOMMessageFormatter.formatMessage("http://www.w3.org/dom/DOMTR", "FEATURE_NOT_SUPPORTED", new Object[] { paramString });
            throw new DOMException(9, str2);
          }
        }
        else
        {
          str2 = DOMMessageFormatter.formatMessage("http://www.w3.org/dom/DOMTR", "FEATURE_NOT_FOUND", new Object[] { paramString });
          throw new DOMException(9, str2);
        }
      }
    }
    else
    {
      String str1;
      if (paramString.equalsIgnoreCase("error-handler"))
      {
        if ((paramObject == null) || ((paramObject instanceof DOMErrorHandler)))
        {
          this.fErrorHandler = ((DOMErrorHandler)paramObject);
        }
        else
        {
          str1 = DOMMessageFormatter.formatMessage("http://www.w3.org/dom/DOMTR", "TYPE_MISMATCH_ERR", new Object[] { paramString });
          throw new DOMException(17, str1);
        }
      }
      else
      {
        if ((paramString.equalsIgnoreCase("resource-resolver")) || (paramString.equalsIgnoreCase("schema-location")) || ((paramString.equalsIgnoreCase("schema-type")) && (paramObject != null)))
        {
          str1 = DOMMessageFormatter.formatMessage("http://www.w3.org/dom/DOMTR", "FEATURE_NOT_SUPPORTED", new Object[] { paramString });
          throw new DOMException(9, str1);
        }
        str1 = DOMMessageFormatter.formatMessage("http://www.w3.org/dom/DOMTR", "FEATURE_NOT_FOUND", new Object[] { paramString });
        throw new DOMException(8, str1);
      }
    }
  }

  public boolean canSetParameter(String paramString, Object paramObject)
  {
    if (paramObject == null)
      return true;
    if ((paramObject instanceof Boolean))
    {
      boolean bool = ((Boolean)paramObject).booleanValue();
      if ((paramString.equalsIgnoreCase("namespaces")) || (paramString.equalsIgnoreCase("split-cdata-sections")) || (paramString.equalsIgnoreCase("discard-default-content")) || (paramString.equalsIgnoreCase("xml-declaration")) || (paramString.equalsIgnoreCase("well-formed")) || (paramString.equalsIgnoreCase("infoset")) || (paramString.equalsIgnoreCase("entities")) || (paramString.equalsIgnoreCase("cdata-sections")) || (paramString.equalsIgnoreCase("comments")) || (paramString.equalsIgnoreCase("format-pretty-print")) || (paramString.equalsIgnoreCase("namespace-declarations")))
        return true;
      if ((paramString.equalsIgnoreCase("canonical-form")) || (paramString.equalsIgnoreCase("validate-if-schema")) || (paramString.equalsIgnoreCase("validate")) || (paramString.equalsIgnoreCase("check-character-normalization")) || (paramString.equalsIgnoreCase("datatype-normalization")) || (paramString.equalsIgnoreCase("normalize-characters")))
        return !bool;
      if ((paramString.equalsIgnoreCase("element-content-whitespace")) || (paramString.equalsIgnoreCase("ignore-unknown-character-denormalizations")))
        return bool;
    }
    else if (((paramString.equalsIgnoreCase("error-handler")) && (paramObject == null)) || ((paramObject instanceof DOMErrorHandler)))
    {
      return true;
    }
    return false;
  }

  public DOMStringList getParameterNames()
  {
    if (this.fRecognizedParameters == null)
    {
      Vector localVector = new Vector();
      localVector.add("namespaces");
      localVector.add("split-cdata-sections");
      localVector.add("discard-default-content");
      localVector.add("xml-declaration");
      localVector.add("canonical-form");
      localVector.add("validate-if-schema");
      localVector.add("validate");
      localVector.add("check-character-normalization");
      localVector.add("datatype-normalization");
      localVector.add("format-pretty-print");
      localVector.add("normalize-characters");
      localVector.add("well-formed");
      localVector.add("infoset");
      localVector.add("namespace-declarations");
      localVector.add("element-content-whitespace");
      localVector.add("entities");
      localVector.add("cdata-sections");
      localVector.add("comments");
      localVector.add("ignore-unknown-character-denormalizations");
      localVector.add("error-handler");
      this.fRecognizedParameters = new DOMStringListImpl(localVector);
    }
    return this.fRecognizedParameters;
  }

  public Object getParameter(String paramString)
    throws DOMException
  {
    if (paramString.equalsIgnoreCase("comments"))
      return (this.features & 0x20) != 0 ? Boolean.TRUE : Boolean.FALSE;
    if (paramString.equalsIgnoreCase("namespaces"))
      return (this.features & 0x1) != 0 ? Boolean.TRUE : Boolean.FALSE;
    if (paramString.equalsIgnoreCase("xml-declaration"))
      return (this.features & 0x100) != 0 ? Boolean.TRUE : Boolean.FALSE;
    if (paramString.equalsIgnoreCase("cdata-sections"))
      return (this.features & 0x8) != 0 ? Boolean.TRUE : Boolean.FALSE;
    if (paramString.equalsIgnoreCase("entities"))
      return (this.features & 0x4) != 0 ? Boolean.TRUE : Boolean.FALSE;
    if (paramString.equalsIgnoreCase("split-cdata-sections"))
      return (this.features & 0x10) != 0 ? Boolean.TRUE : Boolean.FALSE;
    if (paramString.equalsIgnoreCase("well-formed"))
      return (this.features & 0x2) != 0 ? Boolean.TRUE : Boolean.FALSE;
    if (paramString.equalsIgnoreCase("namespace-declarations"))
      return (this.features & 0x200) != 0 ? Boolean.TRUE : Boolean.FALSE;
    if ((paramString.equalsIgnoreCase("element-content-whitespace")) || (paramString.equalsIgnoreCase("ignore-unknown-character-denormalizations")))
      return Boolean.TRUE;
    if (paramString.equalsIgnoreCase("discard-default-content"))
      return (this.features & 0x40) != 0 ? Boolean.TRUE : Boolean.FALSE;
    if (paramString.equalsIgnoreCase("format-pretty-print"))
      return (this.features & 0x800) != 0 ? Boolean.TRUE : Boolean.FALSE;
    if (paramString.equalsIgnoreCase("infoset"))
    {
      if (((this.features & 0x4) == 0) && ((this.features & 0x8) == 0) && ((this.features & 0x1) != 0) && ((this.features & 0x200) != 0) && ((this.features & 0x2) != 0) && ((this.features & 0x20) != 0))
        return Boolean.TRUE;
      return Boolean.FALSE;
    }
    if ((paramString.equalsIgnoreCase("normalize-characters")) || (paramString.equalsIgnoreCase("canonical-form")) || (paramString.equalsIgnoreCase("validate-if-schema")) || (paramString.equalsIgnoreCase("check-character-normalization")) || (paramString.equalsIgnoreCase("validate")) || (paramString.equalsIgnoreCase("validate-if-schema")) || (paramString.equalsIgnoreCase("datatype-normalization")))
      return Boolean.FALSE;
    if (paramString.equalsIgnoreCase("error-handler"))
      return this.fErrorHandler;
    if ((paramString.equalsIgnoreCase("resource-resolver")) || (paramString.equalsIgnoreCase("schema-location")) || (paramString.equalsIgnoreCase("schema-type")))
    {
      str = DOMMessageFormatter.formatMessage("http://www.w3.org/dom/DOMTR", "FEATURE_NOT_SUPPORTED", new Object[] { paramString });
      throw new DOMException(9, str);
    }
    String str = DOMMessageFormatter.formatMessage("http://www.w3.org/dom/DOMTR", "FEATURE_NOT_FOUND", new Object[] { paramString });
    throw new DOMException(8, str);
  }

  public String writeToString(Node paramNode)
    throws DOMException, LSException
  {
    Object localObject1 = null;
    String str1 = _getXmlVersion(paramNode);
    if ((str1 != null) && (str1.equals("1.1")))
    {
      if (this.xml11Serializer == null)
      {
        this.xml11Serializer = new XML11Serializer();
        initSerializer(this.xml11Serializer);
      }
      copySettings(this.serializer, this.xml11Serializer);
      localObject1 = this.xml11Serializer;
    }
    else
    {
      localObject1 = this.serializer;
    }
    StringWriter localStringWriter = new StringWriter();
    try
    {
      prepareForSerialization((XMLSerializer)localObject1, paramNode);
      ((BaseMarkupSerializer)localObject1)._format.setEncoding("UTF-16");
      ((BaseMarkupSerializer)localObject1).setOutputCharStream(localStringWriter);
      if (paramNode.getNodeType() == 9)
      {
        ((BaseMarkupSerializer)localObject1).serialize((Document)paramNode);
      }
      else if (paramNode.getNodeType() == 11)
      {
        ((BaseMarkupSerializer)localObject1).serialize((DocumentFragment)paramNode);
      }
      else if (paramNode.getNodeType() == 1)
      {
        ((BaseMarkupSerializer)localObject1).serialize((Element)paramNode);
      }
      else
      {
        String str2 = DOMMessageFormatter.formatMessage("http://apache.org/xml/serializer", "unable-to-serialize-node", null);
        if (((BaseMarkupSerializer)localObject1).fDOMErrorHandler != null)
        {
          DOMErrorImpl localDOMErrorImpl = new DOMErrorImpl();
          localDOMErrorImpl.fType = "unable-to-serialize-node";
          localDOMErrorImpl.fMessage = str2;
          localDOMErrorImpl.fSeverity = 3;
          ((BaseMarkupSerializer)localObject1).fDOMErrorHandler.handleError(localDOMErrorImpl);
        }
        throw new LSException(82, str2);
      }
    }
    catch (LSException localLSException)
    {
      throw localLSException;
    }
    catch (RuntimeException localRuntimeException)
    {
      Object localObject2;
      if (localRuntimeException == DOMNormalizer.abort)
      {
        localObject2 = null;
        jsr 62;
      }
      throw ((LSException)DOMUtil.createLSException(82, localRuntimeException).fillInStackTrace());
    }
    catch (IOException localIOException)
    {
      String str3 = DOMMessageFormatter.formatMessage("http://www.w3.org/dom/DOMTR", "STRING_TOO_LONG", new Object[] { localIOException.getMessage() });
      throw new DOMException(2, str3);
    }
    finally
    {
      ((BaseMarkupSerializer)localObject1).clearDocumentState();
    }
    return (String)localStringWriter.toString();
  }

  public void setNewLine(String paramString)
  {
    this.serializer._format.setLineSeparator(paramString);
  }

  public String getNewLine()
  {
    return this.serializer._format.getLineSeparator();
  }

  public LSSerializerFilter getFilter()
  {
    return this.serializer.fDOMFilter;
  }

  public void setFilter(LSSerializerFilter paramLSSerializerFilter)
  {
    this.serializer.fDOMFilter = paramLSSerializerFilter;
  }

  private void initSerializer(XMLSerializer paramXMLSerializer)
  {
    paramXMLSerializer.fNSBinder = new NamespaceSupport();
    paramXMLSerializer.fLocalNSBinder = new NamespaceSupport();
    paramXMLSerializer.fSymbolTable = new SymbolTable();
  }

  private void copySettings(XMLSerializer paramXMLSerializer1, XMLSerializer paramXMLSerializer2)
  {
    paramXMLSerializer2.fDOMErrorHandler = this.fErrorHandler;
    paramXMLSerializer2._format.setEncoding(paramXMLSerializer1._format.getEncoding());
    paramXMLSerializer2._format.setLineSeparator(paramXMLSerializer1._format.getLineSeparator());
    paramXMLSerializer2.fDOMFilter = paramXMLSerializer1.fDOMFilter;
  }

  public boolean write(Node paramNode, LSOutput paramLSOutput)
    throws LSException
  {
    if (paramNode == null)
      return false;
    Object localObject1 = null;
    String str1 = _getXmlVersion(paramNode);
    if ((str1 != null) && (str1.equals("1.1")))
    {
      if (this.xml11Serializer == null)
      {
        this.xml11Serializer = new XML11Serializer();
        initSerializer(this.xml11Serializer);
      }
      copySettings(this.serializer, this.xml11Serializer);
      localObject1 = this.xml11Serializer;
    }
    else
    {
      localObject1 = this.serializer;
    }
    String str2 = null;
    if ((str2 = paramLSOutput.getEncoding()) == null)
    {
      str2 = _getInputEncoding(paramNode);
      if (str2 == null)
      {
        str2 = _getXmlEncoding(paramNode);
        if (str2 == null)
          str2 = "UTF-8";
      }
    }
    try
    {
      prepareForSerialization((XMLSerializer)localObject1, paramNode);
      ((BaseMarkupSerializer)localObject1)._format.setEncoding(str2);
      OutputStream localOutputStream = paramLSOutput.getByteStream();
      localObject2 = paramLSOutput.getCharacterStream();
      String str3 = paramLSOutput.getSystemId();
      if (localObject2 == null)
      {
        if (localOutputStream == null)
        {
          if (str3 == null)
          {
            String str4 = DOMMessageFormatter.formatMessage("http://apache.org/xml/serializer", "no-output-specified", null);
            if (((BaseMarkupSerializer)localObject1).fDOMErrorHandler != null)
            {
              localDOMErrorImpl = new DOMErrorImpl();
              localDOMErrorImpl.fType = "no-output-specified";
              localDOMErrorImpl.fMessage = str4;
              localDOMErrorImpl.fSeverity = 3;
              ((BaseMarkupSerializer)localObject1).fDOMErrorHandler.handleError(localDOMErrorImpl);
            }
            throw new LSException(82, str4);
          }
          ((BaseMarkupSerializer)localObject1).setOutputByteStream(XMLEntityManager.createOutputStream(str3));
        }
        else
        {
          ((BaseMarkupSerializer)localObject1).setOutputByteStream(localOutputStream);
        }
      }
      else
        ((BaseMarkupSerializer)localObject1).setOutputCharStream((Writer)localObject2);
      if (paramNode.getNodeType() == 9)
      {
        ((BaseMarkupSerializer)localObject1).serialize((Document)paramNode);
      }
      else if (paramNode.getNodeType() == 11)
      {
        ((BaseMarkupSerializer)localObject1).serialize((DocumentFragment)paramNode);
      }
      else if (paramNode.getNodeType() == 1)
      {
        ((BaseMarkupSerializer)localObject1).serialize((Element)paramNode);
      }
      else
      {
        i = 0;
        jsr 203;
      }
    }
    catch (UnsupportedEncodingException localUnsupportedEncodingException)
    {
      Object localObject2;
      if (((BaseMarkupSerializer)localObject1).fDOMErrorHandler != null)
      {
        localObject2 = new DOMErrorImpl();
        ((DOMErrorImpl)localObject2).fException = localUnsupportedEncodingException;
        ((DOMErrorImpl)localObject2).fType = "unsupported-encoding";
        ((DOMErrorImpl)localObject2).fMessage = localUnsupportedEncodingException.getMessage();
        ((DOMErrorImpl)localObject2).fSeverity = 3;
        ((BaseMarkupSerializer)localObject1).fDOMErrorHandler.handleError((DOMError)localObject2);
      }
      throw new LSException(82, DOMMessageFormatter.formatMessage("http://apache.org/xml/serializer", "unsupported-encoding", null));
    }
    catch (LSException localLSException)
    {
      throw localLSException;
    }
    catch (RuntimeException localRuntimeException)
    {
      int i;
      if (localRuntimeException == DOMNormalizer.abort)
      {
        i = 0;
        jsr 95;
      }
      throw ((LSException)DOMUtil.createLSException(82, localRuntimeException).fillInStackTrace());
    }
    catch (Exception localException)
    {
      DOMErrorImpl localDOMErrorImpl;
      if (((BaseMarkupSerializer)localObject1).fDOMErrorHandler != null)
      {
        localDOMErrorImpl = new DOMErrorImpl();
        localDOMErrorImpl.fException = localException;
        localDOMErrorImpl.fMessage = localException.getMessage();
        localDOMErrorImpl.fSeverity = 2;
        ((BaseMarkupSerializer)localObject1).fDOMErrorHandler.handleError(localDOMErrorImpl);
      }
      throw ((LSException)DOMUtil.createLSException(82, localException).fillInStackTrace());
    }
    finally
    {
      ((BaseMarkupSerializer)localObject1).clearDocumentState();
    }
    return true;
  }

  public boolean writeToURI(Node paramNode, String paramString)
    throws LSException
  {
    if (paramNode == null)
      return false;
    Object localObject1 = null;
    String str1 = _getXmlVersion(paramNode);
    if ((str1 != null) && (str1.equals("1.1")))
    {
      if (this.xml11Serializer == null)
      {
        this.xml11Serializer = new XML11Serializer();
        initSerializer(this.xml11Serializer);
      }
      copySettings(this.serializer, this.xml11Serializer);
      localObject1 = this.xml11Serializer;
    }
    else
    {
      localObject1 = this.serializer;
    }
    String str2 = _getInputEncoding(paramNode);
    if (str2 == null)
    {
      str2 = _getXmlEncoding(paramNode);
      if (str2 == null)
        str2 = "UTF-8";
    }
    try
    {
      prepareForSerialization((XMLSerializer)localObject1, paramNode);
      ((BaseMarkupSerializer)localObject1)._format.setEncoding(str2);
      ((BaseMarkupSerializer)localObject1).setOutputByteStream(XMLEntityManager.createOutputStream(paramString));
      if (paramNode.getNodeType() == 9)
      {
        ((BaseMarkupSerializer)localObject1).serialize((Document)paramNode);
      }
      else if (paramNode.getNodeType() == 11)
      {
        ((BaseMarkupSerializer)localObject1).serialize((DocumentFragment)paramNode);
      }
      else if (paramNode.getNodeType() == 1)
      {
        ((BaseMarkupSerializer)localObject1).serialize((Element)paramNode);
      }
      else
      {
        i = 0;
        jsr 125;
      }
    }
    catch (LSException localLSException)
    {
      int i;
      throw localLSException;
    }
    catch (RuntimeException localRuntimeException)
    {
      int j;
      if (localRuntimeException == DOMNormalizer.abort)
      {
        j = 0;
        jsr 95;
      }
      throw ((LSException)DOMUtil.createLSException(82, localRuntimeException).fillInStackTrace());
    }
    catch (Exception localException)
    {
      if (((BaseMarkupSerializer)localObject1).fDOMErrorHandler != null)
      {
        DOMErrorImpl localDOMErrorImpl = new DOMErrorImpl();
        localDOMErrorImpl.fException = localException;
        localDOMErrorImpl.fMessage = localException.getMessage();
        localDOMErrorImpl.fSeverity = 2;
        ((BaseMarkupSerializer)localObject1).fDOMErrorHandler.handleError(localDOMErrorImpl);
      }
      throw ((LSException)DOMUtil.createLSException(82, localException).fillInStackTrace());
    }
    finally
    {
      ((BaseMarkupSerializer)localObject1).clearDocumentState();
    }
    return true;
  }

  private void prepareForSerialization(XMLSerializer paramXMLSerializer, Node paramNode)
  {
    paramXMLSerializer.reset();
    paramXMLSerializer.features = this.features;
    paramXMLSerializer.fDOMErrorHandler = this.fErrorHandler;
    paramXMLSerializer.fNamespaces = ((this.features & 0x1) != 0);
    paramXMLSerializer.fNamespacePrefixes = ((this.features & 0x200) != 0);
    paramXMLSerializer._format.setIndenting((this.features & 0x800) != 0);
    paramXMLSerializer._format.setOmitComments((this.features & 0x20) == 0);
    paramXMLSerializer._format.setOmitXMLDeclaration((this.features & 0x100) == 0);
    if ((this.features & 0x2) != 0)
    {
      Node localNode2 = paramNode;
      boolean bool = true;
      Document localDocument = paramNode.getNodeType() == 9 ? (Document)paramNode : paramNode.getOwnerDocument();
      try
      {
        Method localMethod = localDocument.getClass().getMethod("isXMLVersionChanged()", new Class[0]);
        if (localMethod != null)
          bool = ((Boolean)localMethod.invoke(localDocument, (Object[])null)).booleanValue();
      }
      catch (Exception localException)
      {
      }
      if (paramNode.getFirstChild() != null)
        while (paramNode != null)
        {
          verify(paramNode, bool, false);
          Node localNode1 = paramNode.getFirstChild();
          while (localNode1 == null)
          {
            localNode1 = paramNode.getNextSibling();
            if (localNode1 != null)
              continue;
            paramNode = paramNode.getParentNode();
            if (localNode2 == paramNode)
            {
              localNode1 = null;
              break;
            }
            localNode1 = paramNode.getNextSibling();
          }
          paramNode = localNode1;
        }
      else
        verify(paramNode, bool, false);
    }
  }

  private void verify(Node paramNode, boolean paramBoolean1, boolean paramBoolean2)
  {
    int i = paramNode.getNodeType();
    this.fLocator.fRelatedNode = paramNode;
    boolean bool;
    Object localObject1;
    Object localObject2;
    switch (i)
    {
    case 9:
      break;
    case 10:
      break;
    case 1:
      if (paramBoolean1)
      {
        if ((this.features & 0x1) != 0)
          bool = CoreDocumentImpl.isValidQName(paramNode.getPrefix(), paramNode.getLocalName(), paramBoolean2);
        else
          bool = CoreDocumentImpl.isXMLName(paramNode.getNodeName(), paramBoolean2);
        if ((!bool) && (!bool) && (this.fErrorHandler != null))
        {
          localObject1 = DOMMessageFormatter.formatMessage("http://www.w3.org/dom/DOMTR", "wf-invalid-character-in-node-name", new Object[] { "Element", paramNode.getNodeName() });
          DOMNormalizer.reportDOMError(this.fErrorHandler, this.fError, this.fLocator, (String)localObject1, 3, "wf-invalid-character-in-node-name");
        }
      }
      localObject1 = paramNode.hasAttributes() ? paramNode.getAttributes() : null;
      if (localObject1 == null)
        break;
      for (int j = 0; j < ((NamedNodeMap)localObject1).getLength(); j++)
      {
        localObject2 = (Attr)((NamedNodeMap)localObject1).item(j);
        this.fLocator.fRelatedNode = ((Node)localObject2);
        DOMNormalizer.isAttrValueWF(this.fErrorHandler, this.fError, this.fLocator, (NamedNodeMap)localObject1, (Attr)localObject2, ((Attr)localObject2).getValue(), paramBoolean2);
        if (!paramBoolean1)
          continue;
        bool = CoreDocumentImpl.isXMLName(((Node)localObject2).getNodeName(), paramBoolean2);
        if (bool)
          continue;
        String str2 = DOMMessageFormatter.formatMessage("http://www.w3.org/dom/DOMTR", "wf-invalid-character-in-node-name", new Object[] { "Attr", paramNode.getNodeName() });
        DOMNormalizer.reportDOMError(this.fErrorHandler, this.fError, this.fLocator, str2, 3, "wf-invalid-character-in-node-name");
      }
    case 8:
      if ((goto 587) || ((this.features & 0x20) == 0))
        break;
      DOMNormalizer.isCommentWF(this.fErrorHandler, this.fError, this.fLocator, ((Comment)paramNode).getData(), paramBoolean2);
      break;
    case 5:
      if ((!paramBoolean1) || ((this.features & 0x4) == 0))
        break;
      CoreDocumentImpl.isXMLName(paramNode.getNodeName(), paramBoolean2);
      break;
    case 4:
      DOMNormalizer.isXMLCharWF(this.fErrorHandler, this.fError, this.fLocator, paramNode.getNodeValue(), paramBoolean2);
      break;
    case 3:
      DOMNormalizer.isXMLCharWF(this.fErrorHandler, this.fError, this.fLocator, paramNode.getNodeValue(), paramBoolean2);
      break;
    case 7:
      localObject1 = (ProcessingInstruction)paramNode;
      String str1 = ((ProcessingInstruction)localObject1).getTarget();
      if (paramBoolean1)
      {
        if (paramBoolean2)
          bool = XML11Char.isXML11ValidName(str1);
        else
          bool = XMLChar.isValidName(str1);
        if (!bool)
        {
          localObject2 = DOMMessageFormatter.formatMessage("http://www.w3.org/dom/DOMTR", "wf-invalid-character-in-node-name", new Object[] { "Element", paramNode.getNodeName() });
          DOMNormalizer.reportDOMError(this.fErrorHandler, this.fError, this.fLocator, (String)localObject2, 3, "wf-invalid-character-in-node-name");
        }
      }
      DOMNormalizer.isXMLCharWF(this.fErrorHandler, this.fError, this.fLocator, ((ProcessingInstruction)localObject1).getData(), paramBoolean2);
    case 2:
    case 6:
    }
  }

  private String _getXmlVersion(Node paramNode)
  {
    Document localDocument = paramNode.getNodeType() == 9 ? (Document)paramNode : paramNode.getOwnerDocument();
    if ((localDocument != null) && (DocumentMethods.fgDocumentMethodsAvailable))
      try
      {
        return (String)DocumentMethods.fgDocumentGetXmlVersionMethod.invoke(localDocument, (Object[])null);
      }
      catch (VirtualMachineError localVirtualMachineError)
      {
        throw localVirtualMachineError;
      }
      catch (ThreadDeath localThreadDeath)
      {
        throw localThreadDeath;
      }
      catch (Throwable localThrowable)
      {
      }
    return null;
  }

  private String _getInputEncoding(Node paramNode)
  {
    Document localDocument = paramNode.getNodeType() == 9 ? (Document)paramNode : paramNode.getOwnerDocument();
    if ((localDocument != null) && (DocumentMethods.fgDocumentMethodsAvailable))
      try
      {
        return (String)DocumentMethods.fgDocumentGetInputEncodingMethod.invoke(localDocument, (Object[])null);
      }
      catch (VirtualMachineError localVirtualMachineError)
      {
        throw localVirtualMachineError;
      }
      catch (ThreadDeath localThreadDeath)
      {
        throw localThreadDeath;
      }
      catch (Throwable localThrowable)
      {
      }
    return null;
  }

  private String _getXmlEncoding(Node paramNode)
  {
    Document localDocument = paramNode.getNodeType() == 9 ? (Document)paramNode : paramNode.getOwnerDocument();
    if ((localDocument != null) && (DocumentMethods.fgDocumentMethodsAvailable))
      try
      {
        return (String)DocumentMethods.fgDocumentGetXmlEncodingMethod.invoke(localDocument, (Object[])null);
      }
      catch (VirtualMachineError localVirtualMachineError)
      {
        throw localVirtualMachineError;
      }
      catch (ThreadDeath localThreadDeath)
      {
        throw localThreadDeath;
      }
      catch (Throwable localThrowable)
      {
      }
    return null;
  }

  static class DocumentMethods
  {
    private static Method fgDocumentGetXmlVersionMethod = null;
    private static Method fgDocumentGetInputEncodingMethod = null;
    private static Method fgDocumentGetXmlEncodingMethod = null;
    private static boolean fgDocumentMethodsAvailable = false;

    static
    {
      try
      {
        fgDocumentGetXmlVersionMethod = Document.class.getMethod("getXmlVersion", new Class[0]);
        fgDocumentGetInputEncodingMethod = Document.class.getMethod("getInputEncoding", new Class[0]);
        fgDocumentGetXmlEncodingMethod = Document.class.getMethod("getXmlEncoding", new Class[0]);
        fgDocumentMethodsAvailable = true;
      }
      catch (Exception localException)
      {
        fgDocumentGetXmlVersionMethod = null;
        fgDocumentGetInputEncodingMethod = null;
        fgDocumentGetXmlEncodingMethod = null;
        fgDocumentMethodsAvailable = false;
      }
    }
  }
}

/* Location:           /home/mnovotny/projects/EMBEDDED_JBOSS_BETA3_COMMUNITY/embedded/output/lib/embedded-jboss/lib/thirdparty-all.jar
* Qualified Name:     org.apache.xml.serialize.DOMSerializerImpl
* JD-Core Version:    0.6.0
*/
TOP

Related Classes of org.apache.xml.serialize.DOMSerializerImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.