Return-Path: Delivered-To: apmail-cxf-commits-archive@www.apache.org Received: (qmail 84933 invoked from network); 16 Jul 2010 15:06:08 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 16 Jul 2010 15:06:08 -0000 Received: (qmail 6351 invoked by uid 500); 16 Jul 2010 15:06:08 -0000 Delivered-To: apmail-cxf-commits-archive@cxf.apache.org Received: (qmail 6237 invoked by uid 500); 16 Jul 2010 15:06:07 -0000 Mailing-List: contact commits-help@cxf.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cxf.apache.org Delivered-To: mailing list commits@cxf.apache.org Received: (qmail 6230 invoked by uid 99); 16 Jul 2010 15:06:07 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 16 Jul 2010 15:06:07 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 16 Jul 2010 15:06:03 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id A67DA23889CB; Fri, 16 Jul 2010 15:04:40 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r964818 - in /cxf/trunk/tools/validator/src: main/java/org/apache/cxf/tools/validator/internal/Stax2DOM.java test/java/org/apache/cxf/tools/validator/internal/Stax2DOMTest.java Date: Fri, 16 Jul 2010 15:04:40 -0000 To: commits@cxf.apache.org From: dkulp@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20100716150440.A67DA23889CB@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: dkulp Date: Fri Jul 16 15:04:40 2010 New Revision: 964818 URL: http://svn.apache.org/viewvc?rev=964818&view=rev Log: [CXF-2900] WSDLValidator through Stax2DOM leaves input streams open which causes input files to be locked. Patch from Gary Gregory applied (with mods to not require woodstox) Modified: cxf/trunk/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/Stax2DOM.java cxf/trunk/tools/validator/src/test/java/org/apache/cxf/tools/validator/internal/Stax2DOMTest.java Modified: cxf/trunk/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/Stax2DOM.java URL: http://svn.apache.org/viewvc/cxf/trunk/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/Stax2DOM.java?rev=964818&r1=964817&r2=964818&view=diff ============================================================================== --- cxf/trunk/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/Stax2DOM.java (original) +++ cxf/trunk/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/Stax2DOM.java Fri Jul 16 15:04:40 2010 @@ -20,8 +20,13 @@ package org.apache.cxf.tools.validator.internal; import java.io.File; +import java.io.IOException; +import java.io.InputStream; import java.net.URI; import java.net.URL; + +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; import javax.xml.transform.stream.StreamSource; import org.w3c.dom.Document; @@ -36,8 +41,6 @@ public class Stax2DOM { public Stax2DOM() { } - - public Document getDocument(String wsdl) throws ToolException { try { URI wsdlURI = new URI(URIParserUtil.getAbsoluteURI(wsdl)); @@ -53,22 +56,49 @@ public class Stax2DOM { } public Document getDocument(URL url) throws ToolException { + InputStream input = null; try { - StreamSource src = new StreamSource(url.openStream(), url.toExternalForm()); + input = url.openStream(); + StreamSource src = new StreamSource(input, url.toExternalForm()); return StaxUtils.read(StaxUtils.createXMLStreamReader(src), true); } catch (Exception e) { throw new ToolException(e); + } finally { + if (input != null) { + try { + input.close(); + } catch (IOException e) { + // throw or change do nothing. + throw new ToolException(e); + } + } } } public Document getDocument(File wsdl) throws ToolException { + XMLStreamReader reader = null; try { - StreamSource src = new StreamSource(wsdl); - return StaxUtils.read(StaxUtils.createXMLStreamReader(src), true); + StreamSource source = new StreamSource(wsdl); + reader = StaxUtils.createXMLStreamReader(source); + return StaxUtils.read(reader, true); } catch (Exception e) { throw new ToolException(e); + } finally { + try { + try { + //on woodstox, calling closeCompletely will allow any + //cached things like dtds and such to be completely + //closed and cleaned up. + reader.getClass().getMethod("closeCompletely").invoke(reader); + } catch (Throwable t) { + //ignore + } + reader.close(); + } catch (XMLStreamException e) { + // throw or change do nothing. + throw new ToolException(e); + } } } - } Modified: cxf/trunk/tools/validator/src/test/java/org/apache/cxf/tools/validator/internal/Stax2DOMTest.java URL: http://svn.apache.org/viewvc/cxf/trunk/tools/validator/src/test/java/org/apache/cxf/tools/validator/internal/Stax2DOMTest.java?rev=964818&r1=964817&r2=964818&view=diff ============================================================================== --- cxf/trunk/tools/validator/src/test/java/org/apache/cxf/tools/validator/internal/Stax2DOMTest.java (original) +++ cxf/trunk/tools/validator/src/test/java/org/apache/cxf/tools/validator/internal/Stax2DOMTest.java Fri Jul 16 15:04:40 2010 @@ -20,9 +20,14 @@ package org.apache.cxf.tools.validator.internal; import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.URISyntaxException; import org.w3c.dom.Document; +import org.apache.cxf.helpers.IOUtils; import org.apache.cxf.helpers.XMLUtils; import org.junit.Assert; import org.junit.Test; @@ -31,11 +36,63 @@ public class Stax2DOMTest extends Assert @Test public void testGetDocument() throws Exception { - File wsdl = new File(getClass().getResource("/validator_wsdl/jms_test.wsdl").toURI()); - Document doc = new Stax2DOM().getDocument(wsdl); + File wsdlFile = new File(getClass().getResource( + "/validator_wsdl/jms_test.wsdl").toURI()); + Document doc = new Stax2DOM().getDocument(wsdlFile); + assertDocumentContent(doc); + } + + public void assertDocumentContent(Document doc) { String content = XMLUtils.toString(doc); - assertTrue(content, content.indexOf("xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"") != -1); - assertTrue(content, content.indexOf("xmlns:x1=\"http://cxf.apache.org/hello_world_jms/types\"") - != -1); + assertTrue( + content, + content.indexOf("xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"") != -1); + assertTrue( + content, + content.indexOf("xmlns:x1=\"http://cxf.apache.org/hello_world_jms/types\"") != -1); + } + + @Test + public void testGetDocumentURL() throws Exception { + File tempFile = createTempWsdlFile(); + Document doc = new Stax2DOM().getDocument(tempFile.toURI().toURL()); + assertDocumentContent(doc); + assertDelete(tempFile); + } + + @Test + public void testGetDocumentString() throws Exception { + File tempFile = createTempWsdlFile(); + Document doc = new Stax2DOM().getDocument(tempFile.toURI().toString()); + assertDocumentContent(doc); + assertDelete(tempFile); + } + + public void assertDelete(File tempFile) { + boolean deleted = tempFile.delete(); + if (!deleted) { + tempFile.deleteOnExit(); + } + Assert.assertTrue( + "Stax2DOM left the input stream open, file cannot be deleted: " + + tempFile, deleted); + } + + public File createTempWsdlFile() throws URISyntaxException, IOException { + File wsdlFile = new File(getClass().getResource( + "/validator_wsdl/jms_test.wsdl").toURI()); + File tempFile = File.createTempFile("Stax2DOMTest", ".wsdl"); + FileOutputStream output = new FileOutputStream(tempFile); + IOUtils.copyAndCloseInput(new FileInputStream(wsdlFile), output); + output.close(); + return tempFile; + } + + @Test + public void testGetDocumentFile() throws Exception { + File tempFile = createTempWsdlFile(); + Document doc = new Stax2DOM().getDocument(tempFile); + assertDocumentContent(doc); + assertDelete(tempFile); } }