package org.apache.synapse.util.jaxp;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.synapse.config.SynapseConfiguration;
import org.apache.synapse.util.resolver.ResourceMap;
import org.w3c.dom.ls.LSInput;
import org.w3c.dom.ls.LSResourceResolver;
import org.xml.sax.InputSource;
/**
* External schema resource resolver for Validate Mediator
* <p/>
* This will used by Validate mediator to resolve external schema references defined in Validate mediator configuration
* using <pre> <resource location="location" key="key"/> </pre> inside Validate mediator configuration.
*/
public class SchemaResourceResolver implements LSResourceResolver {
private ResourceMap resourceMap;
private SynapseConfiguration synCfg;
private static final Log log = LogFactory.getLog(SchemaResourceResolver.class);
public SchemaResourceResolver(SynapseConfiguration synCfg, ResourceMap resourceMap) {
this.resourceMap = resourceMap;
this.synCfg = synCfg;
}
/**
* Lookup in {@link org.apache.synapse.util.resolver.ResourceMap} and returns
* {@link org.apache.synapse.util.jaxp.SchemaResourceLSInput}
*/
public LSInput resolveResource(String type, String namespaceURI,
String publicId, String systemId,
String baseURI) {
if (log.isDebugEnabled()) {
log.debug("Resolving Schema resource " + systemId);
}
if (resourceMap == null) {
log.warn("Unable to resolve schema resource : \"" + systemId +
"\". External schema resources not " +
"defined in Validate mediator configuration");
return null;
}
InputSource inputSource = resourceMap.resolve(synCfg, systemId);
if (inputSource == null) {
log.warn("Unable to resolve schema resource " + systemId);
return null;
}
SchemaResourceLSInput schemaResourceLSInput = new SchemaResourceLSInput();
schemaResourceLSInput.setByteStream(inputSource.getByteStream());
schemaResourceLSInput.setSystemId(systemId);
schemaResourceLSInput.setPublicId(publicId);
schemaResourceLSInput.setBaseURI(baseURI);
return schemaResourceLSInput;
}
}