[[iota-component]]
= IOTA Component
:page-source: components/camel-iota/src/main/docs/iota-component.adoc

*Available as of Camel version 2.23*

According to IOTA Official site: "IOTA is the first open-source distributed ledger that is being built to power the future of the Internet of Things with feeless microtransactions and data integrity for machines."

Maven users will need to add the following dependency to their `pom.xml`
for this component:

[source,xml]
------------------------------------------------------------
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-iota</artifactId>
    <version>x.y.z</version>
    <!-- use the same version as your Camel core version -->
</dependency>
------------------------------------------------------------

== URI format

[source,java]
---------------------------------------------------------------------------------------------------------------
iota:name?url=nodeurl[&moreOptions...]
---------------------------------------------------------------------------------------------------------------

== Options

// component options: START
The IOTA component supports 1 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
|===
// component options: END

// endpoint options: START
The IOTA endpoint is configured using URI syntax:

----
iota:name
----

with the following path and query parameters:

=== Path Parameters (1 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *name* | *Required* Component name |  | String
|===


=== Query Parameters (12 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *depth* (common) | The depth determines how deep the tangle is analysed for getting Tips | 9 | Integer
| *minWeightMagnitude* (common) | The minWeightMagnitude is the minimum number of zeroes that a proof-of-work output/transaction hash must end with to be considered valid by full nodes | 14 | Integer
| *operation* (common) | Supported operations are 'sendTransfer', 'getNewAddress' |  | String
| *securityLevel* (common) | Address security level | 1 | Integer
| *tag* (common) | TAG |  | String
| *url* (common) | Node url |  | String
| *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
| *exceptionHandler* (consumer) | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored. |  | ExceptionHandler
| *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. |  | ExchangePattern
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
|===
// endpoint options: END

// spring-boot-auto-configure options: START
== Spring Boot Auto-Configuration

When using Spring Boot make sure to use the following Maven dependency to have support for auto configuration:

[source,xml]
----
<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-iota-starter</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel core version -->
</dependency>
----


The component supports 2 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *camel.component.iota.basic-property-binding* | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | Boolean
| *camel.component.iota.enabled* | Whether to enable auto configuration of the iota component. This is enabled by default. |  | Boolean
|===
// spring-boot-auto-configure options: END

== Sample route

The following route defined in Spring XML send a message to tangle

*Send message to tangle*

[source,xml]
---------------------------------------------------------------------------------------------------------------------------
<route>
  <from uri="direct:start" />
  <setMessage>
  	<constant>Hello world!</constant>
  </setMessage>
  <setHeader name="CamelIOTASeed">
  	<constant>MYSEEDHERE</constant>
  </setHeader>
  <setHeader name="CamelIOTAValue">
  	<constant>1</constant>
  </setHeader>
  <setHeader name="CamelIOTAToAddress">
  	<constant>RECIPIENTADDRESS</constant>
  </setHeader>
  <setHeader name="CamelIOTAToAddress">
  	<constant>RECIPIENTADDRESS</constant>
  </setHeader>
  
  <to uri="iota:good?url=https://node.iota.org:443&operation=sendTransfer" />
  <to uri="direct:result" />
</route>
---------------------------------------------------------------------------------------------------------------------------

The following route defined in Spring XML create a new address

*Create a new address*

[source,xml]
---------------------------------------------------------------------------------------------------------------------------
<route>
  <from uri="direct:start" />
  <setHeader name="CamelIOTASeed">
  	<constant>MYSEEDHERE</constant>
  </setHeader>
  <setHeader name="CamelIOTAAddressIndex">
  	<constant>1</constant>
  </setHeader>
  
  <to uri="iota:good?url=https://node.iota.org:443&operation=getNewAddress" />
  <to uri="direct:result" />
</route>
---------------------------------------------------------------------------------------------------------------------------

The following route defined in Spring XML retrieve transfers data

*Retrieve transfers*

[source,xml]
---------------------------------------------------------------------------------------------------------------------------
<route>
  <from uri="direct:start" />
  <setHeader name="CamelIOTASeed">
  	<constant>MYSEEDHERE</constant>
  </setHeader>
  <setHeader name="CamelIOTAAddressStartIndex">
  	<constant>1</constant>
  </setHeader>
  <setHeader name="CamelIOTAAddressEndIndex">
  	<constant>10</constant>
  </setHeader>
  
  <to uri="iota:good?url=https://node.iota.org:443&operation=getTransfers" />
  <to uri="direct:result" />
</route>
---------------------------------------------------------------------------------------------------------------------------

