001    package com.thaiopensource.validate.schematron;
002    
003    import java.io.IOException;
004    import java.net.MalformedURLException;
005    import java.net.URL;
006    
007    import javax.xml.transform.Source;
008    import javax.xml.transform.TransformerException;
009    import javax.xml.transform.URIResolver;
010    import javax.xml.transform.sax.SAXSource;
011    
012    import org.xml.sax.EntityResolver;
013    import org.xml.sax.SAXException;
014    
015    import com.thaiopensource.xml.sax.XMLReaderCreator;
016    
017    class SAXURIResolver implements URIResolver {
018    
019      private final XMLReaderCreator xrc;
020    
021      private final EntityResolver er;
022    
023      public SAXURIResolver(XMLReaderCreator xrc, EntityResolver er) {
024        this.xrc = xrc;
025        this.er = er;
026      }
027    
028      public Source resolve(String href, String base) throws TransformerException {
029        try {
030          return new SAXSource(xrc.createXMLReader(), er.resolveEntity(null,
031                               new URL(new URL(base), href).toString()));
032        } catch (MalformedURLException e) {
033          throw new TransformerException(e);
034        } catch (SAXException e) {
035          throw new TransformerException(e);
036        } catch (IOException e) {
037          throw new TransformerException(e);
038        }
039      }
040    }