package com.processpuzzle.business.definition.domain; import java.io.FileInputStream; import java.io.IOException; import org.apache.commons.lang3.StringUtils; import org.apache.xerces.dom.DOMInputImpl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; import org.w3c.dom.ls.LSInput; import org.w3c.dom.ls.LSResourceResolver; public class SchemaResourceResolver implements LSResourceResolver { private static Logger logger = LoggerFactory.getLogger( SchemaResourceResolver.class ); private ResourceLoader resourceLoader; private String schemaPath; private String schemaRoot; // Constructors public SchemaResourceResolver( final String schemaPath, final ResourceLoader resourceLoader ) { this.schemaPath = schemaPath; this.resourceLoader = resourceLoader; determineSchemaRoot(); } // Public accesors and mutators @Override public LSInput resolveResource( String type, String namespaceURI, String publicId, String systemId, String baseURI ) { Resource resource = resourceLoader.getResource( schemaRoot + "/" + systemId ); LSInput input = null; FileInputStream fileInputStream = null; try{ fileInputStream = new FileInputStream( resource.getFile() ); input = new DOMInputImpl(); input.setByteStream( fileInputStream ); }catch( IOException ex ){ logger.error( "XML schema resource " + publicId + " not found.", ex ); } return input; } // Protected, private helper methods private void determineSchemaRoot() { schemaRoot = StringUtils.substringBeforeLast( schemaPath, "/" ); } }