template
Description
Renders the body content of a message from a template. The template can produce plain text, Json or XML. Variables in the template are substituted with values from the body, header, query parameters, etc. If the extension of a referenced template file is .xml it will use XMLTemplateEngine otherwise StreamingTemplateEngine . Have a look at the samples in examples/template .
Can be used in
spring:beans, api, bean, if, interceptor, internalProxy, proxy, registration, request, response, serviceProxy, soapProxy, stompProxy, swaggerProxy, transport and wsStompReassembler
Sample
Text Template
Call it with a query parameter name:
http://localhost:2000?name=Joe
<api port="2000"> <request> <template contentType="text/plain">Hello ${params.name}!</template> </request> <return statusCode="200"/> </api>
JSON Template
Call it with the answer.
http://localhost:2000?answer=42
<api name="JSON" port="2000" method="GET"> <request> <template contentType="application/json" pretty="yes"> { "answer": ${params.answer}, "foo": 7 } </template> </request> <return statusCode="200"/> </api>
XML Template
Send a POST with an XML body content to the api.
<api port="2000"> <request> <template location="template.xml"/> </request> <return statusCode="200"/> </api>
If the filename of the template ends with .xml you can use the elements from the gsp namespace. See GroovyXMLTemplate Engine
<destinations xmlns:gsp='http://groovy.codehaus.org/2005/gsp'> <gsp:scriptlet>def answer = 42;</gsp:scriptlet> <answer><gsp:expression>answer</gsp:expression></answer> <gsp:scriptlet> import groovy.xml.XmlSlurper def xml = new XmlSlurper().parseText(body) </gsp:scriptlet> <gsp:scriptlet>xml.children().each { </gsp:scriptlet> <destination><gsp:expression>it</gsp:expression></destination> <gsp:scriptlet> } </gsp:scriptlet> </destinations>
Attributes
Name | Required | Default | Description | Example |
---|---|---|---|---|
contentType | false | - | content type for body | application/json |
location | false | - | path of xml template file. | template.xml |
pretty | false | no | Format JSON documents. | yes |
Variables
The following variables can be accessed within a template.
Name | Class | Description |
---|---|---|
exc | com.predic8.membrane.core.exchange.Exchange | The Exchange class provides, among others, access to the Request, Response and their corresponding Headers. |
message | com.predic8.membrane.core.http.Message | Message is the superclass of a request or a response. Depending on the flow the message contains data from the request or the response. |
header | com.predic8.membrane.core.http.Header | The header object allows access to the HTTP header fields. You can remove, add and change fields. |
body | com.predic8.membrane.core.http.Body | The body of the message. |
json | java.util.Map | If the message contains a body of the type application/json this varible will contain the JSON as a Map. Use it only to read the JSON document. |
flow | com.predic8.membrane.core.interceptor.Flow | REQUEST or RESPONSE |
properties | java.util.Map | The properties of the exchange object. |
spring | org.springframework.context.ApplicationContext | The Spring application context hosting the router instance (or null, if the router is not hosted by Spring). |