FULL PRODUCT VERSION : java version "1.6.0_01" Java(TM) SE Runtime Environment (build 1.6.0_01-b06) Java HotSpot(TM) Client VM (build 1.6.0_01-b06, mixed mode, sharing) ADDITIONAL OS VERSION INFORMATION : Microsoft Windows XP [Version 5.1.2600] A DESCRIPTION OF THE PROBLEM : Transforms where the StreamResult is created with a file specified by a UNC path fail with a FileNotFoundException. The pathnreported by that exception is not the same as the path supplied to the StreamResult constructor. For example, \\sonata\test\test.xml becomes \test\test.xml STEPS TO FOLLOW TO REPRODUCE THE PROBLEM : Run the attached code supplying a UNC path as the sole argument. EXPECTED VERSUS ACTUAL BEHAVIOR : EXPECTED - A trivial xml file should be written to the specified file. ACTUAL - Writing to \\sonata\test\test.xml Exception in thread "main" javax.xml.transform.TransformerException: java.io.FileNotFoundException: \test\test.xml (The system cannot find the path specified) ERROR MESSAGES/STACK TRACES THAT OCCUR : Exception in thread "main" javax.xml.transform.TransformerException: java.io.FileNotFoundException: \test\test.xml (The system cannot find the path specified) at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.getOutputHandler(TransformerImpl.java:491) at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:298) at jaxp.StreamResultUNC.main(StreamResultUNC.java:37) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90) Caused by: java.io.FileNotFoundException: \test\test.xml (The system cannot find the path specified) at java.io.FileOutputStream.open(Native Method) at java.io.FileOutputStream.<init>(FileOutputStream.java:179) at java.io.FileOutputStream.<init>(FileOutputStream.java:70) at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.getOutputHandler(TransformerImpl.java:463) ... 7 more --------- java.io.FileNotFoundException: \test\test.xml (The system cannot find the path specified) at java.io.FileOutputStream.open(Native Method) at java.io.FileOutputStream.<init>(FileOutputStream.java:179) at java.io.FileOutputStream.<init>(FileOutputStream.java:70) at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.getOutputHandler(TransformerImpl.java:463) at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:298) at jaxp.StreamResultUNC.main(StreamResultUNC.java:37) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90) REPRODUCIBILITY : This bug can be reproduced always. ---------- BEGIN SOURCE ---------- import org.w3c.dom.Document; import org.w3c.dom.Element; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import java.io.File; /** Test Windows UNC paths. * Universal Naming Convention paths fail. * Created by IntelliJ IDEA. * User: mthornton * Date: 25-Apr-2007 * Time: 21:36:44 * To change this template use File | Settings | File Templates. */ public class StreamResultUNC { public static void main(String[] args) throws Exception { // create a document to write DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.newDocument(); Element root = doc.createElement("test"); doc.appendChild(root); // create an identity transform Transformer t = TransformerFactory.newInstance().newTransformer(); File f = new File(args[0]); StreamResult result = new StreamResult(f); DOMSource source = new DOMSource(doc); System.out.println("Writing to "+f); t.transform(source, result); } } ---------- END SOURCE ---------- CUSTOMER SUBMITTED WORKAROUND : Map the share to a drive and use the drive based path instead. Alternatively open the file first and use the OutputStream version of the StreamResult constructor.
|