|
|
|
|
|
*/ |
|
/* |
|
* 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.xni.XNIException; |
|
import com.sun.org.apache.xerces.internal.xni.XMLResourceIdentifier; |
|
import com.sun.org.apache.xerces.internal.xni.parser.XMLEntityResolver; |
|
import com.sun.org.apache.xerces.internal.xni.parser.XMLInputSource; |
|
import javax.xml.catalog.CatalogException; |
|
|
|
import org.xml.sax.EntityResolver; |
|
import org.xml.sax.InputSource; |
|
import org.xml.sax.SAXException; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
public class EntityResolverWrapper |
|
implements XMLEntityResolver { |
|
|
|
// |
|
// Data |
|
// |
|
|
|
|
|
protected EntityResolver fEntityResolver; |
|
|
|
// |
|
// Constructors |
|
// |
|
|
|
|
|
public EntityResolverWrapper() {} |
|
|
|
|
|
public EntityResolverWrapper(EntityResolver entityResolver) { |
|
setEntityResolver(entityResolver); |
|
} // <init>(EntityResolver) |
|
|
|
// |
|
// Public methods |
|
// |
|
|
|
|
|
public void setEntityResolver(EntityResolver entityResolver) { |
|
fEntityResolver = entityResolver; |
|
} // setEntityResolver(EntityResolver) |
|
|
|
|
|
public EntityResolver getEntityResolver() { |
|
return fEntityResolver; |
|
} // getEntityResolver():EntityResolver |
|
|
|
// |
|
// XMLEntityResolver methods |
|
// |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
public XMLInputSource resolveEntity(XMLResourceIdentifier resourceIdentifier) |
|
throws XNIException, IOException { |
|
|
|
// 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 |
|
|
|
String pubId = resourceIdentifier.getPublicId(); |
|
String sysId = resourceIdentifier.getExpandedSystemId(); |
|
if (pubId == null && sysId == null) |
|
return null; |
|
|
|
|
|
if (fEntityResolver != null && resourceIdentifier != null) { |
|
try { |
|
InputSource inputSource = fEntityResolver.resolveEntity(pubId, sysId); |
|
if (inputSource != null) { |
|
String publicId = inputSource.getPublicId(); |
|
String systemId = inputSource.getSystemId(); |
|
String baseSystemId = resourceIdentifier.getBaseSystemId(); |
|
InputStream byteStream = inputSource.getByteStream(); |
|
Reader charStream = inputSource.getCharacterStream(); |
|
String encoding = inputSource.getEncoding(); |
|
XMLInputSource xmlInputSource = |
|
new XMLInputSource(publicId, systemId, baseSystemId, true); |
|
xmlInputSource.setByteStream(byteStream); |
|
xmlInputSource.setCharacterStream(charStream); |
|
xmlInputSource.setEncoding(encoding); |
|
return xmlInputSource; |
|
} |
|
} |
|
|
|
|
|
catch (SAXException e) { |
|
Exception ex = e.getException(); |
|
if (ex == null) { |
|
ex = e; |
|
} |
|
throw new XNIException(ex); |
|
} |
|
|
|
catch (CatalogException e) { |
|
throw new XNIException(e); |
|
} |
|
} |
|
|
|
|
|
return null; |
|
|
|
} // resolveEntity(String,String,String):XMLInputSource |
|
} |