|
|
|
|
|
|
|
*/ |
|
/* |
|
* 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 |