import java.net.URL;

import javax.xml.transform.Source;
import javax.xml.transform.Templates;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.URIResolver;

import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;




class MyClassLoader extends ClassLoader {
    MyClassLoader(ClassLoader parent) {
        super(parent);
    }
    Package[] getPkgs() {
        return getPackages();
    }
}


class Resolver implements URIResolver {
    public static final void main(String[] args) throws Exception {
        System.out.println("Via Templates");
        TransformerFactory tf = TransformerFactory.newInstance();
        tf.setURIResolver(new Resolver());
        Templates temp = tf.newTemplates(new StreamSource(args[0]));
        Transformer t = temp.newTransformer();
        // code change there
        t.setURIResolver(new Resolver());
        t.transform(new StreamSource(args[1]), new StreamResult(System.out));

        System.out.println("\n\nVia Transformer");
        t = tf.newTransformer(new StreamSource(args[0]));
        t.transform(new StreamSource(args[1]), new StreamResult(System.out));

        
        
        MyClassLoader loader = new MyClassLoader(URIResolver.class.getClassLoader());
        Package[] pk = loader.getPkgs();
        for(int i=0;i<pk.length;i++) {
            String name = pk[i].getName();
            String resource = name.replace('.','/');
            URL url = loader.getResource(resource);
            // THIS SHOWN ONLY EXTERNAL PACKAGES (NOT INCLUDED IN RT.JAR)
            if (url != null) {
            	System.out.println("file: " + url.getFile() + " path:" + url.getPath()); 
            }
        }


    }

    public Source resolve(String base, String href) {
        System.out.println("Calling resolve for base == \""
                               + base + "\" and href == \""
                               + href);
        return null;
    }
}
