blob: 7f67c4bfc65456c1904e77079895c18f38861eed [file] [log] [blame]
<!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">&lt;</span><span class="nc">String</span><span class="o">,</span> <span class="nc">String</span><span class="o">&gt;</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&#8217;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">&lt;transformer-class-name&gt;</span>
org.foo.MyTransformer
<span class="nt">&lt;/transformer-class-name&gt;</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">&lt;transformer&gt;</span>
<span class="nt">&lt;class-name&gt;</span>org.foo.MyTransformerWithProperties<span class="nt">&lt;/class-name&gt;</span>
<span class="nt">&lt;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">/&gt;</span>
<span class="nt">&lt;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">/&gt;</span>
<span class="nt">&lt;/transformer&gt;</span></code></pre>
</div>
</div>
<div class="paragraph">
<p>Any transformer implementation needs to be added to the broker&#8217;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>