| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <meta name="generator" content="Asciidoctor 2.0.18"> |
| <link rel="icon" type="image/png" href="images/favicon.png"> |
| <title>Transformers</title> |
| <link rel="stylesheet" href="css/asciidoctor.css"> |
| <link rel="stylesheet" href="css/font-awesome.css"> |
| <link rel="stylesheet" href="css/rouge-github.css"> |
| </head> |
| <body class="book toc2 toc-left"> |
| <div id="header"> |
| <h1>Transformers</h1> |
| <div id="toc" class="toc2"> |
| <div id="toctitle"><a href="index.html">User Manual for 2.33.0</a></div> |
| <ul class="sectlevel1"> |
| <li><a href="#configuration">1. Configuration</a></li> |
| </ul> |
| </div> |
| </div> |
| <div id="content"> |
| <div id="preamble"> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>A transformer, as the name suggests, is a component which transforms a message. |
| For example, a transformer could modify the body of a message or add or remove properties. |
| Both <a href="diverts.html#diverting-and-splitting-message-flows">diverts</a> and <a href="core-bridges.html#core-bridges">core bridges</a> support.</p> |
| </div> |
| <div class="paragraph"> |
| <p>A transformer is simply a class which implements the interface <code>org.apache.activemq.artemis.core.server.transformer.Transformer</code>:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight nowrap"><code data-lang="java"><span class="kd">public</span> <span class="kd">interface</span> <span class="nc">Transformer</span> <span class="o">{</span> |
| |
| <span class="k">default</span> <span class="kt">void</span> <span class="nf">init</span><span class="o">(</span><span class="nc">Map</span><span class="o"><</span><span class="nc">String</span><span class="o">,</span> <span class="nc">String</span><span class="o">></span> <span class="n">properties</span><span class="o">)</span> <span class="o">{</span> <span class="o">}</span> |
| |
| <span class="nc">Message</span> <span class="nf">transform</span><span class="o">(</span><span class="nc">Message</span> <span class="n">message</span><span class="o">);</span> |
| <span class="o">}</span></code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>The <code>init</code> method is called immediately after the broker instantiates the class. |
| There is a default method implementation so implementing <code>init</code> is optional. |
| However, if the transformer needs any configuration properties it should implement <code>init</code> and the broker will pass the configured key/value pairs to the transformer using a <code>java.util.Map</code>.</p> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="configuration"><a class="anchor" href="#configuration"></a><a class="link" href="#configuration">1. Configuration</a></h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>The most basic configuration requires only specifying the transformer’s class name, e.g.:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight nowrap"><code data-lang="xml"><span class="nt"><transformer-class-name></span> |
| org.foo.MyTransformer |
| <span class="nt"></transformer-class-name></span></code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>However, if the transformer needs any configuration properties those can be specified using a slightly different syntax, e.g.:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight nowrap"><code data-lang="xml"><span class="nt"><transformer></span> |
| <span class="nt"><class-name></span>org.foo.MyTransformerWithProperties<span class="nt"></class-name></span> |
| <span class="nt"><property</span> <span class="na">key=</span><span class="s">"transformerKey1"</span> <span class="na">value=</span><span class="s">"transformerValue1"</span><span class="nt">/></span> |
| <span class="nt"><property</span> <span class="na">key=</span><span class="s">"transformerKey2"</span> <span class="na">value=</span><span class="s">"transformerValue2"</span><span class="nt">/></span> |
| <span class="nt"></transformer></span></code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>Any transformer implementation needs to be added to the broker’s classpath. |
| See the documentation on <a href="using-server.html#adding-runtime-dependencies">adding runtime dependencies</a> to understand how to make your transformer available to the broker.</p> |
| </div> |
| </div> |
| </div> |
| </div> |
| </body> |
| </html> |