Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

JBI Component

The jbi: component is provided implemented by the ServiceMix Camel module and provides integration with a JBI Normalized Message Router, such as the one provided by Apache ServiceMix.

Info
Stream bodies
Stream bodies

See below for information regarding using about how to use StreamSource types from ServiceMix in Camel.

Following The following code:

Code Block
from("jbi:endpoint:http://foo.bar.org/MyService/MyEndpoint")

automatically Automatically exposes a new endpoint to the bus, where the service qname QName is {http://foo.bar.orgImage Removed}MyService and the endpoint name is MyEndpoint (refer to URI format latersee #URI-format).

All that has to be done to use this endpoint is to send messages from some endpoint already declared (for example with jms:endpoint) to this JBI camel endpoint (the same way as messages are sent to EIP endpoints or any other endpoint) and camel will pick it up the same way as it picks any other messages.

Sending works in the same wayWhen a JBI endpoint appears at the end of a route, for example:

Code Block
to("jbi:endpoint:http://foo.bar.org/MyService/MyEndpoint")

Is used to send messages to JBI endpoint already deployed to the bus. It could be an endpoint exposed by jms:endpoint, http:provider or anything else.

URI format

The messages sent by this producer endpoint are sent to the already deployed JBI endpoint.

Anchor
URI-format
URI-format

URI format

Code Block
jbi:service:serviceNamespace[sep]serviceName[?options]
jbi:endpoint:serviceNamespace[sep]serviceName[sep]endpointName[?options]
jbi:name:endpointName[?options]

The separator used will bethat should be used in the endpoint URL is:

  • '/' if the namespace looks like ' (forward slash), if serviceNamespace starts with http://', or'
  • :' if the namespace looks like ' (colon), if serviceNamespace starts with urn:foo:bar'.

For more details of valid JBI URIs see the ServiceMix URI Guide.

Using the jbi:service: or jbi:endpoint: URI forms will set formats sets the service QName on the JBI endpoint to the exact one you givespecified. Otherwise, the default Camel JBI Service QName will be is used, which is:

Code Block
{http://activemq.apache.org/camel/schema/jbi}endpoint

You can append query options to the URI in the following format, ?option=value&option=value&...

Examples

Code Block
jbi:service:http://foo.bar.org/MyService
jbi:endpoint:urn:foo:bar:MyService:MyEndpoint
jbi:endpoint:http://foo.bar.org/MyService/MyEndpoint
jbi:name:cheese

...

Name

Default value

Description

mep

<MEP MEP of the Camel Exchange> Exchange

Allows users to override the MEP being used for interacting with JBI (values set on the Exchange object. Valid values for this option are in-only, in-out, robust-in-out and in-optional-out) .

operation

<value Value of the jbi.operation header property> property

Specify Specifies the JBI operation to be used for the MessageExchange. If no value is supplied, the JBI binding will use the value of the jbi.operation header property.

serialization

basic

Default value (basic) will check if headers are serializable by looking at the type, setting this option to strict will detect objects that can not be serialized although they implement the Serializable interface. Set to nocheck to disable this check altogether, note that this should only be used for in-memory transports like SEDAFlow, otherwise you can expect to get NotSerializableException thrown at runtime.

convertException

false

false: send any exceptions thrown from the Camel route back unmodified
true: convert all exceptions to a JBI FaultException (can be used to avoid non-serializable exceptions or to implement generic error handling

Examples

Code Block
jbi:service:http://foo.bar.org/MyService?mep=in-out       (override the MEP, use InOut JBI MessageExchanges)
jbi:endpoint:urn:foo:bar:MyService:MyEndpoint?mep=in      (override the MEP, use InOnly JBI MessageExchanges)  
jbi:endpoint:urn:foo:bar:MyService:MyEndpoint?operation={http://www.mycompany.org}AddNumbers 
 (overide the operation for the JBI Exchange to {http://www.mycompany.org}AddNumbers)

Using Stream bodies

If you are using any a stream types as bodies then type as the message body, you should be aware that a stream is only capable of being read once. So if you are enabling enable DEBUG logging then , the body is usually debug logged and thus read. To cater for deal with this, Camel has a streamCaching option that caches can cache the stream is it can be read , enabling you to read it multiple times.

Code Block
from("jbi:endpoint:http://foo.bar.org/MyService/MyEndpoint").streamCaching().to("xslt:transform.xsl", "bean:doSomething");

In Camel 1.5 onwards the The stream caching is default enabled, so adding it is not necessary to set the streamCaching() is not needed option.
In Camel 2.0 we are storing the big (over than 64K by default) input stream into to We store big input streams (by default, over 64K) in a temp file by using CachedOutputStream(TODO need to add the java doc link), and when . When you close the input stream, the temp file will be deleted.

...

If you have some Camel routes that you want to deploy inside JBI as a Service Unit, you can use the JBI Service Unit Archetype to create a new Maven project for the Service Unit.

If you have an existing maven Maven project which that you need to convert into a JBI Service Unit, you may want to refer to the consult ServiceMix Maven JBI Plugins for further help. Basically you just need to make sureThe key steps are as follows:

  • Create a Spring you have a spring XML file at src/main/resources/camel-context.xml which is used to boot up bootstrap your routes inside the JBI Service Unit.
  • you change Change the pomPOM file's packaging to jbi-service-unit.

Your pom.xml should look something like this to enable the jbi-service-unit packaging. :

Code Block
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <groupId>myGroupId</groupId>
  <artifactId>myArtifactId</artifactId>
  <packaging>jbi-service-unit</packaging>
  <version>1.0-SNAPSHOT</version>

  <name>A Camel based JBI Service Unit</name>

  <url>http://www.myorganization.org</url>

  <properties>
    <camel-version>1version>x.0x.0<x</camel-version>
    <servicemix-version>3.3</servicemix-version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.apache.servicemix</groupId>
      <artifactId>servicemix-camel</artifactId>
      <version>${servicemix-version}</version>
    </dependency>

    <dependency>
      <groupId>org.apache.servicemix</groupId>
      <artifactId>servicemix-core</artifactId>
      <version>${servicemix-version}</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>

  <build>
    <defaultGoal>install</defaultGoal>

    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
        </configuration>
      </plugin>

      <!-- creates the JBI deployment unit -->
      <plugin>
        <groupId>org.apache.servicemix.tooling</groupId>
        <artifactId>jbi-maven-plugin</artifactId>
        <version>${servicemix-version}</version>
        <extensions>true</extensions>
      </plugin>
    </plugins>
  </build>
</project>
Include Page
CAMEL:Endpoint See AlsoCAMEL:
Endpoint See Also