Show
Ignore:
Timestamp:
05/26/10 18:16:57 (2 years ago)
Author:
amandel
Message:

#81 open the stream directly in StreamSource? to avoid whitespace in path issue.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/java/org/jcoderz/commons/taskdefs/XsltBasedTask.java

    r1592 r1633  
    3939import java.io.IOException; 
    4040import java.io.InputStream; 
     41import java.net.URISyntaxException; 
     42import java.net.URL; 
    4143import java.util.Properties; 
    4244 
     
    5759import org.jcoderz.commons.util.IoUtil; 
    5860import org.jcoderz.commons.util.StringUtil; 
     61import org.jcoderz.commons.util.XmlUtil; 
    5962import org.xml.sax.EntityResolver; 
    6063import org.xml.sax.InputSource; 
     
    391394        throws BuildException 
    392395    { 
     396        StreamResult out = null; 
    393397        try 
    394398        { 
    395             final String xmlParserConfig = System 
    396                 .getProperty(XML_PARSER_CONFIGURATION_PROPERTY); 
     399            final String xmlParserConfig 
     400                = System.getProperty(XML_PARSER_CONFIGURATION_PROPERTY); 
    397401            if (!XML_PARSER_CONFIG_WITH_XINCLUDE.equals(xmlParserConfig)) 
    398402            { 
    399                 System.setProperty(XML_PARSER_CONFIGURATION_PROPERTY, 
     403                System.setProperty( 
     404                    XML_PARSER_CONFIGURATION_PROPERTY, 
    400405                    XML_PARSER_CONFIG_WITH_XINCLUDE); 
    401406                log("Using XML Parser configuration " 
     
    404409            // Xalan2 transformer is required, 
    405410            // that why we explicit use this factory 
    406             final TransformerFactory factory = (TransformerFactory) 
    407             (loadClass("org.apache.xalan.processor.TransformerFactoryImpl") 
    408                 .newInstance()); 
     411            final TransformerFactory factory 
     412                = (TransformerFactory) 
     413                    (loadClass( 
     414                        "org.apache.xalan.processor.TransformerFactoryImpl") 
     415                            .newInstance()); 
    409416 
    410417            factory.setURIResolver(new JarArchiveUriResolver(this)); 
    411             final InputStream xslStream = getXslFileAsStream(); 
    412             final Transformer transformer = factory 
    413                 .newTransformer(new StreamSource(xslStream)); 
     418            final StreamSource source = getXslFileAsSource(); 
     419            final Transformer transformer 
     420                = factory.newTransformer(source); 
    414421            setAdditionalTransformerParameters(transformer); 
    415422            transformer.setParameter("outdir", mDestDir != null ? mDestDir 
    416423                .getAbsolutePath() : ""); 
    417424            final Source xml = getInAsStreamSource(); 
    418             final StreamResult out = new StreamResult(mOutFile); 
     425            out = XmlUtil.createStreamResult(mOutFile); 
    419426            transformer.setErrorListener(new MyErrorListener()); 
    420427            transformer.transform(xml, out); 
     
    426433        finally 
    427434        { 
     435            if (out != null) 
     436            { 
     437                IoUtil.close(out.getOutputStream()); 
     438            } 
    428439            if (mClassLoader != null) 
    429440            { 
     
    457468    } 
    458469 
    459     private InputStream getXslFileAsStream () 
    460     { 
    461         final InputStream result; 
     470    private StreamSource getXslFileAsSource () 
     471    { 
     472        final StreamSource result; 
    462473        final InputStream xslStream 
    463474            = XsltBasedTask.class.getResourceAsStream(mXslFile); 
     
    466477            try 
    467478            { 
    468                 final InputStream xslFile = new FileInputStream(mXslFile); 
    469                 result = xslFile; 
     479                final File file = new File(mXslFile); 
     480                final InputStream xslFile = new FileInputStream(file); 
     481                result = new StreamSource(xslFile); 
     482                result.setSystemId(file.toURI().toASCIIString()); 
    470483            } 
    471484            catch (FileNotFoundException e) 
     
    477490        else 
    478491        { 
    479             result = xslStream; 
     492            result = new StreamSource(xslStream); 
     493            final URL url = XsltBasedTask.class.getResource(mXslFile); 
     494            if (url != null) 
     495            { 
     496                try 
     497                { 
     498                    result.setSystemId(url.toURI().toASCIIString()); 
     499                } 
     500                catch (URISyntaxException ex) 
     501                { 
     502                    log("Failed to set systemId. Got " + ex, 
     503                            Project.MSG_VERBOSE); 
     504                } 
     505            } 
    480506        } 
    481507        return result;