Hi!

I'm currently using  xalan-j_2_3_D1 and trying to pipe transformations...
It should work, but I have a problem...
I implemented  java.net.URLStreamHandler(s) for my needs, so that I can
call document('classdescriptor://java.util.Date') in my XSLTs to get extra
info (dynamicly generated XMLs).
It worked until I decided to chain the transformations...
FYI, my class implements URIResolver for finding the XSLs in the jar file.
Here's my code:

    public String process(File xml, InputStream[] xsls)
        throws TransformerException, TransformerConfigurationException {
        StreamSource xslSource = null;
        Transformer transformer = null;
        TransformerHandler [] handlers = new 
TransformerHandler[xsls.length];
        XMLReader reader = null;
               
                // Create a transform factory instance.
                SAXTransformerFactory saxtfactory = 
((SAXTransformerFactory) TransformerFactory.newInstance());
                saxtfactory.setURIResolver(this);
               
               
                // Create a TransformerHandler for each stylesheet.
                for (int i=0; i < handlers.length; i++) {
                        TransformerHandler tempHandler = 
saxtfactory.newTransformerHandler(new StreamSource(xsls[i]));
                        handlers[i] = tempHandler;                    
                                   
                        if (i >0) {
                                handlers[i - 1].setResult(new 
SAXResult(tempHandler));
                        }
                        // Create an XMLReader.
                        try {
                                reader = XMLReaderFactory.createXMLReader();
                                reader.setContentHandler(handlers[0]);
                                
reader.setProperty("http://xml.org/sax/properties/lexical-handler";, 
handlers[0]);
                        } catch ( org.xml.sax.SAXNotRecognizedException 
snre) {
                                snre.printStackTrace();
                        } catch (org.xml.sax.SAXException sae) {
                                sae.printStackTrace();
                        }
                }

               // outputs SAX events to the serializer.
                Serializer serializer = SerializerFactory.getSerializer
                        
(OutputProperties.getDefaultMethodProperties("xml"));
                StringWriter result = new StringWriter();
                serializer.setWriter(result);
                handlers[handlers.length - 1].setResult(new 
StreamResult(result));
                try {
                        reader.parse(new InputSource(new 
FileInputStream(xml)));
                } catch (java.io.IOException ioe) {
                        ioe.printStackTrace();
                } catch (org.xml.sax.SAXException se) {
                        se.printStackTrace();
                }
                return result.toString();
        }

I know the custom protocols are still reachable because
                try {
                        java.net.URL myUrl = new 
java.net.URL("classdescriptor://java.util.Date");
                } catch (java.net.MalformedURLException mue) {
                        System.err.println("[ERROR] Classes description 
won't be reachable by the protocol classdescriptor://!!!");
                }
still works.

What did I forget?

Thanks a lot.

Bruno Verachten.

Reply via email to