Return-Path: Delivered-To: apmail-camel-commits-archive@www.apache.org Received: (qmail 58346 invoked from network); 10 Dec 2010 15:01:57 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 10 Dec 2010 15:01:57 -0000 Received: (qmail 46971 invoked by uid 500); 10 Dec 2010 15:01:57 -0000 Delivered-To: apmail-camel-commits-archive@camel.apache.org Received: (qmail 46928 invoked by uid 500); 10 Dec 2010 15:01:56 -0000 Mailing-List: contact commits-help@camel.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@camel.apache.org Delivered-To: mailing list commits@camel.apache.org Received: (qmail 46906 invoked by uid 99); 10 Dec 2010 15:01:56 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 10 Dec 2010 15:01:56 +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, 10 Dec 2010 15:01:55 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id EDD0E238890A; Fri, 10 Dec 2010 15:01:34 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1044391 - in /camel/trunk: camel-core/src/main/java/org/apache/camel/builder/xml/ camel-core/src/test/java/org/apache/camel/builder/xml/ components/camel-spring/src/test/java/org/apache/camel/component/xslt/ components/camel-spring/src/tes... Date: Fri, 10 Dec 2010 15:01:34 -0000 To: commits@camel.apache.org From: davsclaus@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20101210150134.EDD0E238890A@eris.apache.org> Author: davsclaus Date: Fri Dec 10 15:01:34 2010 New Revision: 1044391 URL: http://svn.apache.org/viewvc?rev=1044391&view=rev Log: CAMEL-3400: Added option deleteOutputFile to xslt component. Added: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltOutputFileDeleteTest.java - copied, changed from r1044353, camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltOutputFileTest.java camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/xslt/XsltOutputFileDeleteTest.xml - copied, changed from r1044353, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/xslt/XsltOutputFileTest.xml Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java camel/trunk/camel-core/src/test/java/org/apache/camel/builder/xml/XsltBuilderTest.java Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java?rev=1044391&r1=1044390&r2=1044391&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java Fri Dec 10 15:01:34 2010 @@ -39,6 +39,9 @@ import org.apache.camel.Message; import org.apache.camel.Processor; import org.apache.camel.RuntimeTransformException; import org.apache.camel.converter.jaxp.XmlConverter; +import org.apache.camel.impl.SynchronizationAdapter; +import org.apache.camel.util.ExchangeHelper; +import org.apache.camel.util.FileUtil; import static org.apache.camel.util.ObjectHelper.notNull; @@ -58,6 +61,7 @@ public class XsltBuilder implements Proc private ResultHandlerFactory resultHandlerFactory = new StringResultHandlerFactory(); private boolean failOnNullBody = true; private URIResolver uriResolver; + private boolean deleteOutputFile; public XsltBuilder() { } @@ -74,6 +78,12 @@ public class XsltBuilder implements Proc public void process(Exchange exchange) throws Exception { notNull(getTemplate(), "template"); + if (isDeleteOutputFile()) { + // add on completion so we can delete the file when the Exchange is done + String fileName = ExchangeHelper.getMandatoryHeader(exchange, Exchange.XSLT_FILE_NAME, String.class); + exchange.addOnCompletion(new XsltBuilderOnCompletion(fileName)); + } + Transformer transformer = getTemplate().newTransformer(); configureTransformer(transformer, exchange); Source source = getSource(exchange); @@ -165,6 +175,16 @@ public class XsltBuilder implements Proc return this; } + /** + * Should the output file be deleted when the {@link Exchange} is done. + *

+ * This option should only be used if you use {@link #outputFile()} as well. + */ + public XsltBuilder deleteOutputFile() { + this.deleteOutputFile = true; + return this; + } + public XsltBuilder parameter(String name, Object value) { parameters.put(name, value); return this; @@ -277,6 +297,14 @@ public class XsltBuilder implements Proc this.uriResolver = uriResolver; } + public boolean isDeleteOutputFile() { + return deleteOutputFile; + } + + public void setDeleteOutputFile(boolean deleteOutputFile) { + this.deleteOutputFile = deleteOutputFile; + } + // Implementation methods // ------------------------------------------------------------------------- @@ -330,4 +358,23 @@ public class XsltBuilder implements Proc } } } + + private final class XsltBuilderOnCompletion extends SynchronizationAdapter { + private final String fileName; + + private XsltBuilderOnCompletion(String fileName) { + this.fileName = fileName; + } + + @Override + public void onDone(Exchange exchange) { + FileUtil.deleteFile(new File(fileName)); + } + + @Override + public String toString() { + return "XsltBuilderOnCompletion"; + } + } + } Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/builder/xml/XsltBuilderTest.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/xml/XsltBuilderTest.java?rev=1044391&r1=1044390&r2=1044391&view=diff ============================================================================== --- camel/trunk/camel-core/src/test/java/org/apache/camel/builder/xml/XsltBuilderTest.java (original) +++ camel/trunk/camel-core/src/test/java/org/apache/camel/builder/xml/XsltBuilderTest.java Fri Dec 10 15:01:34 2010 @@ -19,6 +19,7 @@ package org.apache.camel.builder.xml; import java.io.File; import java.io.FileInputStream; import java.net.URL; +import java.util.List; import javax.xml.transform.Source; import javax.xml.transform.Templates; import javax.xml.transform.sax.SAXSource; @@ -31,6 +32,8 @@ import org.apache.camel.Exchange; import org.apache.camel.ExpectedBodyTypeException; import org.apache.camel.converter.jaxp.XmlConverter; import org.apache.camel.impl.DefaultExchange; +import org.apache.camel.spi.Synchronization; +import org.apache.camel.util.UnitOfWorkHelper; /** * @version $Revision$ @@ -214,6 +217,36 @@ public class XsltBuilderTest extends Con assertTrue(body.endsWith("world!")); } + public void testXsltOutputFileDelete() throws Exception { + // directory must exists + deleteDirectory("target/xslt"); + createDirectory("target/xslt"); + + URL styleSheet = getClass().getResource("example.xsl"); + + XsltBuilder builder = XsltBuilder.xslt(styleSheet).outputFile().deleteOutputFile(); + + Exchange exchange = new DefaultExchange(context); + exchange.getIn().setBody("world!"); + exchange.getIn().setHeader(Exchange.XSLT_FILE_NAME, "target/xslt/xsltout.xml"); + + builder.process(exchange); + assertIsInstanceOf(File.class, exchange.getOut().getBody()); + + File file = new File("target/xslt/xsltout.xml").getAbsoluteFile(); + assertTrue("Output file should exist", file.exists()); + + String body = exchange.getOut().getBody(String.class); + assertTrue(body.endsWith("world!")); + + // now done the exchange + List onCompletions = exchange.handoverCompletions(); + UnitOfWorkHelper.doneSynchronizations(exchange, onCompletions, log); + + // the file should be deleted + assertFalse("Output file should be deleted", file.exists()); + } + public void testXsltSetConverter() throws Exception { URL styleSheet = getClass().getResource("example.xsl"); Copied: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltOutputFileDeleteTest.java (from r1044353, camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltOutputFileTest.java) URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltOutputFileDeleteTest.java?p2=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltOutputFileDeleteTest.java&p1=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltOutputFileTest.java&r1=1044353&r2=1044391&rev=1044391&view=diff ============================================================================== --- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltOutputFileTest.java (original) +++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltOutputFileDeleteTest.java Fri Dec 10 15:01:34 2010 @@ -30,33 +30,25 @@ import static org.apache.camel.spring.pr /** * @version $Revision$ */ -public class XsltOutputFileTest extends ContextTestSupport { +public class XsltOutputFileDeleteTest extends ContextTestSupport { protected CamelContext createCamelContext() throws Exception { - return createSpringCamelContext(this, "org/apache/camel/component/xslt/XsltOutputFileTest.xml"); + return createSpringCamelContext(this, "org/apache/camel/component/xslt/XsltOutputFileDeleteTest.xml"); } - public void testXsltOutput() throws Exception { + public void testXsltOutputDeleteFile() throws Exception { createDirectory("target/xslt"); MockEndpoint mock = getMockEndpoint("mock:result"); mock.expectedBodiesReceived("world!"); - mock.expectedFileExists("target/xslt/xsltme.xml"); - mock.message(0).body().isInstanceOf(File.class); - template.sendBodyAndHeader("direct:start", "world!", Exchange.XSLT_FILE_NAME, "target/xslt/xsltme.xml"); assertMockEndpointsSatisfied(); - } + oneExchangeDone.matchesMockWaitTime(); - public void testXsltOutputFileMissingHeader() throws Exception { - try { - template.sendBody("direct:start", "world!"); - fail("Should thrown exception"); - } catch (CamelExecutionException e) { - NoSuchHeaderException nshe = assertIsInstanceOf(NoSuchHeaderException.class, e.getCause()); - assertEquals(Exchange.XSLT_FILE_NAME, nshe.getHeaderName()); - } + // assert file deleted + File file = new File("target/xslt/xsltme.xml").getAbsoluteFile(); + assertFalse("File should be deleted", file.exists()); } } \ No newline at end of file Copied: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/xslt/XsltOutputFileDeleteTest.xml (from r1044353, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/xslt/XsltOutputFileTest.xml) URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/xslt/XsltOutputFileDeleteTest.xml?p2=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/xslt/XsltOutputFileDeleteTest.xml&p1=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/xslt/XsltOutputFileTest.xml&r1=1044353&r2=1044391&rev=1044391&view=diff ============================================================================== --- camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/xslt/XsltOutputFileTest.xml (original) +++ camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/xslt/XsltOutputFileDeleteTest.xml Fri Dec 10 15:01:34 2010 @@ -25,7 +25,7 @@ - +