You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by jb...@apache.org on 2010/06/18 21:51:41 UTC
svn commit: r956109 -
/servicemix/components/engines/servicemix-pdfcomposer/trunk/src/main/java/org/apache/servicemix/pdfcomposer/PdfComposerEndpoint.java
Author: jbonofre
Date: Fri Jun 18 19:51:40 2010
New Revision: 956109
URL: http://svn.apache.org/viewvc?rev=956109&view=rev
Log:
Manage InOnly MEP with outputDir.
Modified:
servicemix/components/engines/servicemix-pdfcomposer/trunk/src/main/java/org/apache/servicemix/pdfcomposer/PdfComposerEndpoint.java
Modified: servicemix/components/engines/servicemix-pdfcomposer/trunk/src/main/java/org/apache/servicemix/pdfcomposer/PdfComposerEndpoint.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-pdfcomposer/trunk/src/main/java/org/apache/servicemix/pdfcomposer/PdfComposerEndpoint.java?rev=956109&r1=956108&r2=956109&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-pdfcomposer/trunk/src/main/java/org/apache/servicemix/pdfcomposer/PdfComposerEndpoint.java (original)
+++ servicemix/components/engines/servicemix-pdfcomposer/trunk/src/main/java/org/apache/servicemix/pdfcomposer/PdfComposerEndpoint.java Fri Jun 18 19:51:40 2010
@@ -16,11 +16,14 @@
*/
package org.apache.servicemix.pdfcomposer;
+import java.io.FileOutputStream;
+import java.io.InputStream;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import javax.jbi.management.DeploymentException;
import javax.jbi.messaging.ExchangeStatus;
+import javax.jbi.messaging.InOnly;
import javax.jbi.messaging.InOut;
import javax.jbi.messaging.MessageExchange;
import javax.jbi.messaging.MessagingException;
@@ -54,7 +57,8 @@ public class PdfComposerEndpoint extends
public final static String DEFAULT_WSDL = "servicemix-pdfcomposer.wsdl"; // the default abstract WSDL
private String template; // the template can be static (define in the endpoint descriptor) or provided in the "in" message
- private String templatesBasedir = "."; // the location where to looking for template files
+ private String templatesDir = "."; // the location where to looking for template files
+ private String outputDir = null; // in case of InOnly exchange, write file to the output directory
private Resource wsdl; // the abstract WSDL describing the endpoint behavior
private PdfComposerMarshalerSupport marshaler = new JaxbPdfComposerMarshaler();
@@ -74,20 +78,38 @@ public class PdfComposerEndpoint extends
this.template = template;
}
- public String getTemplatesBasedir() {
- return this.templatesBasedir;
+ public String getTemplatesDir() {
+ return this.templatesDir;
}
/**
* <p>
- * This attribute specifies the basedir where to looking for template files.
+ * This attribute specifies the directory where to looking for template files.
* </p>
* <i> The default value is <code>.</code>.
*
- * @param templatesBasedir the basedir path.
+ * @param templatesDir the basedir path.
*/
- public void setTemplatesBasedir(String templatesBasedir) {
- this.templatesBasedir = templatesBasedir;
+ public void setTemplatesDir(String templatesDir) {
+ this.templatesDir = templatesDir;
+ }
+
+ public String getOutputDir() {
+ return this.outputDir;
+ }
+
+ /**
+ * <p>
+ * This attribute specifies the output directory where the PDF composer generates resulting PDF files.
+ * It's used when the incoming message exchange is in-only, in the case of in-out, the resulting PDF
+ * is send in out message.
+ * </p>
+ * <i> The default value is <code>null</code>.
+ *
+ * @param outputDir the PDF output directory.
+ */
+ public void setOutputDir(String outputDir) {
+ this.outputDir = outputDir;
}
public Resource getWsdl() {
@@ -193,9 +215,9 @@ public class PdfComposerEndpoint extends
return;
}
- // check if we have an InOut MEP
- if (!(exchange instanceof InOut)) {
- throw new IllegalStateException("PdfComposer only supports InOut MEP.");
+ // check if we have an InOnly MEP and outputDirectory attribute define
+ if (exchange instanceof InOnly && outputDir == null) {
+ throw new IllegalStateException("InOnly message exchange received but the outputDir attribute is not defined. The outputDir attribute is mandatory in case of InOnly MEP.");
}
// check if we have an in message
@@ -214,21 +236,26 @@ public class PdfComposerEndpoint extends
templateToUse = this.template;
}
if (templateToUse == null) {
- throw new IllegalArgumentException("No template provided in the in message or in the endpoint descriptor.");
+ throw new IllegalArgumentException("No template found in the \"in\" message or in the endpoint descriptor.");
}
- if (templatesBasedir != null) {
- templateToUse = templatesBasedir + "/" + templateToUse;
+ if (templatesDir != null) {
+ templateToUse = templatesDir + "/" + templateToUse;
}
// load PDF template
PdfReader templateReader = new PdfReader(templateToUse);
- // create "out" message
- NormalizedMessage out = exchange.createMessage();
-
- // create a stamper to populate the target document using pipe
+ // create a stamper to populate the target document
+ PdfStamper stamper;
PipedInputStream stream = new PipedInputStream();
- PdfStamper stamper = new PdfStamper(templateReader, new PipedOutputStream(stream));
+ if (exchange instanceof InOut) {
+ // when we have an InOut, we use a pipe
+ stamper = new PdfStamper(templateReader, new PipedOutputStream(stream));
+ } else {
+ // when we have an InOnly, we directly write a file in the output directory
+ FileOutputStream fileStream = new FileOutputStream(outputDir + "/test.pdf");
+ stamper = new PdfStamper(templateReader, fileStream);
+ }
// get the acrofields
AcroFields fields = stamper.getAcroFields();
@@ -241,12 +268,20 @@ public class PdfComposerEndpoint extends
stamper.setFormFlattening(true);
stamper.close();
- // set the "out" message content with the piped stream
- out.setContent(new StreamSource(stream));
-
- // set the "out" message of the exchange
- exchange.setMessage(out, "out");
+ if (exchange instanceof InOut) {
+ // create "out" message
+ NormalizedMessage out = exchange.createMessage();
+ // set the "out" message content with the piped stream
+ out.setContent(new StreamSource(stream));
+ // set the "out" message of the exchange
+ exchange.setMessage(out, "out");
+ } else {
+ // the exchange is InOnly, Robust InOnly, In Optional Out
+ // set the exchange as DONE
+ exchange.setStatus(ExchangeStatus.DONE);
+ }
+
// send back the exchange
send(exchange);
}