/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.vfny.geoserver.util; import java.io.IOException; import java.io.InputStream; import java.io.Reader; import org.w3c.dom.ls.LSInput; import org.w3c.dom.ls.LSResourceResolver; import org.xml.sax.EntityResolver; import org.xml.sax.InputSource; import org.xml.sax.SAXException; /** * A wrapper allowing a EntityResolver to participate in schema validation */ class EntityResolverToLSResourceResolver implements LSResourceResolver { static class InputSourceToLSResource implements LSInput { private InputSource delegate; public InputSourceToLSResource(InputSource is) { this.delegate = is; } public void setPublicId(String publicId) { delegate.setPublicId(publicId); } public String getPublicId() { return delegate.getPublicId(); } public void setSystemId(String systemId) { delegate.setSystemId(systemId); } public String getSystemId() { return delegate.getSystemId(); } public void setByteStream(InputStream byteStream) { delegate.setByteStream(byteStream); } public InputStream getByteStream() { return delegate.getByteStream(); } public void setEncoding(String encoding) { delegate.setEncoding(encoding); } public String getEncoding() { return delegate.getEncoding(); } public void setCharacterStream(Reader characterStream) { delegate.setCharacterStream(characterStream); } public Reader getCharacterStream() { return delegate.getCharacterStream(); } @Override public String getStringData() { return null; } @Override public void setStringData(String stringData) { // nothing to do } @Override public String getBaseURI() { return null; } @Override public void setBaseURI(String baseURI) { // } @Override public boolean getCertifiedText() { // TODO Auto-generated method stub return false; } @Override public void setCertifiedText(boolean certifiedText) { // TODO Auto-generated method stub } } EntityResolver entityResolver; LSResourceResolver delegate; public EntityResolverToLSResourceResolver(LSResourceResolver delegate, EntityResolver entityResolver) { this.entityResolver= entityResolver; this.delegate = delegate; } @Override public LSInput resolveResource(String type, String namespaceURI, String publicId, String systemId, String baseURI) { // give the entity resolver an opportunity (mostly to throw an exception) try { InputSource is = entityResolver.resolveEntity(publicId, systemId); if(is != null) { return new InputSourceToLSResource(is); } } catch (SAXException | IOException e) { throw new RuntimeException(e); } // otherwise fall back on the default resolution path return delegate.resolveResource(type, namespaceURI, publicId, systemId, baseURI); } }