| [[Script-Script]] |
| Script |
| ~~~~~~ |
| |
| *Available as of Camel 2.16* |
| |
| Is used to execute a script which does not change the message (by |
| default). This is useful when you need to invoke some logic that are not |
| in Java code such as JavaScript, Groovy or any of the |
| other link:languages.html[Languages]. The message body is not changed |
| (by default) however the scripting context has access to the current |
| Exchange and can essentially change the message or headers directly. But |
| the return value from the script is discarded and not used. If the |
| return value should be used as a changed message body then |
| use link:message-translator.html[Message Translator] EIP instead. |
| |
| [[Script-UsingfromJavaDSL]] |
| Using from Java DSL |
| ^^^^^^^^^^^^^^^^^^^ |
| |
| The route below will read the file contents and validate them against a |
| regular expression. |
| |
| [source,java] |
| --------------------------------------------------- |
| from("file://inbox") |
| .script().groovy("// some groovy code goes here") |
| .to("bean:MyServiceBean.processLine"); |
| --------------------------------------------------- |
| |
| [[Script-UsingfromSpringDSL]] |
| Using from Spring DSL |
| ^^^^^^^^^^^^^^^^^^^^^ |
| |
| And from XML its easy as well |
| |
| [source,xml] |
| -------------------------------------------------------------- |
| <route> |
| <from uri="file://inbox"/> |
| <script> |
| <groovy>// some groovy code goes here</groovy> |
| </script> |
| <beanRef ref="myServiceBean" method="processLine"/> |
| </route> |
| |
| <bean id="myServiceBean" class="com.mycompany.MyServiceBean"/> |
| -------------------------------------------------------------- |
| |
| Mind that you can use CDATA in XML if the groovy scrip uses < > etc |
| |
| |
| |
| [source,xml] |
| ------------------------------------------------------------------------------------------------- |
| <route> |
| <from uri="file://inbox"/> |
| <script> |
| <groovy><![CDATA[ some groovy script here that can be multiple lines and whatnot ]]></groovy> |
| </script> |
| <beanRef ref="myServiceBean" method="processLine"/> |
| </route> |
| |
| <bean id="myServiceBean" class="com.mycompany.MyServiceBean"/> |
| ------------------------------------------------------------------------------------------------- |
| |
| [[Script-Usingexternalscriptfiles]] |
| Using external script files |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| You can refer to external script files instead of inlining the script. |
| For example to load a groovy script from the classpath you need to |
| prefix the value with *resource:* as shown: |
| |
| [source,xml] |
| --------------------------------------------------------------- |
| <route> |
| <from uri="file://inbox"/> |
| <script> |
| <groovy>resource:classpath:com/foo/myscript.groovy</groovy> |
| </script> |
| <beanRef ref="myServiceBean" method="processLine"/> |
| </route> |
| |
| <bean id="myServiceBean" class="com.mycompany.MyServiceBean"/> |
| --------------------------------------------------------------- |
| |
| You can also refer to the script from the file system with file: instead |
| of classpath: such as file:/var/myscript.groovy |
| |
| |
| |
| [[Script-UsingThisPattern]] |
| Using This Pattern |
| ++++++++++++++++++ |
| |
| If you would like to use this EIP Pattern then please read the |
| link:getting-started.html[Getting Started], you may also find the |
| link:architecture.html[Architecture] useful particularly the description |
| of link:endpoint.html[Endpoint] and link:uris.html[URIs]. Then you could |
| try out some of the link:examples.html[Examples] first before trying |
| this pattern out. |