| 
 | 
 | 
 | 
 | 
 | 
 | 
 */  | 
 | 
/*  | 
 | 
 * 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 com.sun.org.apache.xerces.internal.util;  | 
 | 
 | 
 | 
import java.io.InputStream;  | 
 | 
import java.io.IOException;  | 
 | 
import java.io.Reader;  | 
 | 
 | 
 | 
import com.sun.org.apache.xerces.internal.impl.ExternalSubsetResolver;  | 
 | 
import com.sun.org.apache.xerces.internal.impl.XMLEntityDescription;  | 
 | 
import com.sun.org.apache.xerces.internal.xni.XMLResourceIdentifier;  | 
 | 
import com.sun.org.apache.xerces.internal.xni.XNIException;  | 
 | 
import com.sun.org.apache.xerces.internal.xni.grammars.XMLDTDDescription;  | 
 | 
import com.sun.org.apache.xerces.internal.xni.parser.XMLInputSource;  | 
 | 
 | 
 | 
import org.xml.sax.ext.EntityResolver2;  | 
 | 
import org.xml.sax.InputSource;  | 
 | 
import org.xml.sax.SAXException;  | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 */  | 
 | 
public class EntityResolver2Wrapper  | 
 | 
    implements ExternalSubsetResolver { | 
 | 
 | 
 | 
    //  | 
 | 
    // Data  | 
 | 
    //  | 
 | 
 | 
 | 
      | 
 | 
    protected EntityResolver2 fEntityResolver;  | 
 | 
 | 
 | 
    //  | 
 | 
    // Constructors  | 
 | 
    //  | 
 | 
 | 
 | 
      | 
 | 
    public EntityResolver2Wrapper() {} | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
     */  | 
 | 
    public EntityResolver2Wrapper(EntityResolver2 entityResolver) { | 
 | 
        setEntityResolver(entityResolver);  | 
 | 
    } // <init>(EntityResolver2)  | 
 | 
 | 
 | 
    //  | 
 | 
    // Public methods  | 
 | 
    //  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
     */  | 
 | 
    public void setEntityResolver(EntityResolver2 entityResolver) { | 
 | 
        fEntityResolver = entityResolver;  | 
 | 
    } // setEntityResolver(EntityResolver2)  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
     */  | 
 | 
    public EntityResolver2 getEntityResolver() { | 
 | 
        return fEntityResolver;  | 
 | 
    } // getEntityResolver():EntityResolver2  | 
 | 
 | 
 | 
    //  | 
 | 
    // ExternalSubsetResolver methods  | 
 | 
    //  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
     */  | 
 | 
    public XMLInputSource getExternalSubset(XMLDTDDescription grammarDescription)  | 
 | 
            throws XNIException, IOException { | 
 | 
 | 
 | 
        if (fEntityResolver != null) { | 
 | 
 | 
 | 
            String name = grammarDescription.getRootName();  | 
 | 
            String baseURI = grammarDescription.getBaseSystemId();  | 
 | 
 | 
 | 
              | 
 | 
            try { | 
 | 
                InputSource inputSource = fEntityResolver.getExternalSubset(name, baseURI);  | 
 | 
                return (inputSource != null) ? createXMLInputSource(inputSource, baseURI) : null;  | 
 | 
            }  | 
 | 
              | 
 | 
            catch (SAXException e) { | 
 | 
                Exception ex = e.getException();  | 
 | 
                if (ex == null) { | 
 | 
                    ex = e;  | 
 | 
                }  | 
 | 
                throw new XNIException(ex);  | 
 | 
            }  | 
 | 
        }  | 
 | 
 | 
 | 
          | 
 | 
        return null;  | 
 | 
 | 
 | 
    } // getExternalSubset(XMLDTDDescription):XMLInputSource  | 
 | 
 | 
 | 
    //  | 
 | 
    // XMLEntityResolver methods  | 
 | 
    //  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
     */  | 
 | 
    public XMLInputSource resolveEntity(XMLResourceIdentifier resourceIdentifier)  | 
 | 
            throws XNIException, IOException { | 
 | 
 | 
 | 
        if (fEntityResolver != null) { | 
 | 
 | 
 | 
            String pubId = resourceIdentifier.getPublicId();  | 
 | 
            String sysId = resourceIdentifier.getLiteralSystemId();  | 
 | 
            String baseURI = resourceIdentifier.getBaseSystemId();  | 
 | 
            String name = null;  | 
 | 
            if (resourceIdentifier instanceof XMLDTDDescription) { | 
 | 
                name = "[dtd]";  | 
 | 
            }  | 
 | 
            else if (resourceIdentifier instanceof XMLEntityDescription) { | 
 | 
                name = ((XMLEntityDescription) resourceIdentifier).getEntityName();  | 
 | 
            }  | 
 | 
 | 
 | 
            // When both pubId and sysId are null, the user's entity resolver  | 
 | 
            // can do nothing about it. We'd better not bother calling it.  | 
 | 
            // This happens when the resourceIdentifier is a GrammarDescription,  | 
 | 
            // which describes a schema grammar of some namespace, but without  | 
 | 
              | 
 | 
            if (pubId == null && sysId == null) { | 
 | 
                return null;  | 
 | 
            }  | 
 | 
 | 
 | 
              | 
 | 
            try { | 
 | 
                InputSource inputSource =  | 
 | 
                    fEntityResolver.resolveEntity(name, pubId, baseURI, sysId);  | 
 | 
                return (inputSource != null) ? createXMLInputSource(inputSource, baseURI) : null;  | 
 | 
            }  | 
 | 
              | 
 | 
            catch (SAXException e) { | 
 | 
                Exception ex = e.getException();  | 
 | 
                if (ex == null) { | 
 | 
                    ex = e;  | 
 | 
                }  | 
 | 
                throw new XNIException(ex);  | 
 | 
            }  | 
 | 
        }  | 
 | 
 | 
 | 
          | 
 | 
        return null;  | 
 | 
 | 
 | 
    } // resolveEntity(XMLResourceIdentifier):XMLInputSource  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
     */  | 
 | 
    private XMLInputSource createXMLInputSource(InputSource source, String baseURI) { | 
 | 
 | 
 | 
        String publicId = source.getPublicId();  | 
 | 
        String systemId = source.getSystemId();  | 
 | 
        String baseSystemId = baseURI;  | 
 | 
        InputStream byteStream = source.getByteStream();  | 
 | 
        Reader charStream = source.getCharacterStream();  | 
 | 
        String encoding = source.getEncoding();  | 
 | 
        XMLInputSource xmlInputSource =  | 
 | 
            new XMLInputSource(publicId, systemId, baseSystemId, false);  | 
 | 
        xmlInputSource.setByteStream(byteStream);  | 
 | 
        xmlInputSource.setCharacterStream(charStream);  | 
 | 
        xmlInputSource.setEncoding(encoding);  | 
 | 
        return xmlInputSource;  | 
 | 
 | 
 | 
    } // createXMLInputSource(InputSource,String):XMLInputSource  | 
 | 
 | 
 | 
} // class EntityResolver2Wrapper  |