1. Reference Guides

This is the root page of a collection of reference guides on the UltraESB. These reference guides will be helpful if you are looking at how to achieve a certain requirement with UltraESB, provided that you have a basic understanding of the UltraESB.

The reference guides available for UltraESB are;

1.1. Enterprise Integration Patterns

The UltraESB can support almost all of the most useful Enterprise Integration Patterns [EIP] easily as its mediation code can be written as a Java fragment, Java class, JSR 223 scripting language fragment or class, compiled Class or Spring bean. The most visible advantage to the end user is that he does not have to go in search of a particular module or component implementing a particular EIP pattern as with some other ESBs, but that he can implement or customize the implementations of almost all useful EIP patterns in code he is already familiar with. For example, a content based router would be implemented in a Java or JSR 223 language if-else or switch-case construct, while for message translation, XSLT, XQuery, Scripting languages, custom Java code, third party libraries etc can all be easily invoked.

Note that some of the EIPs defined by Gregor Hohpe and Bobby Woolf are too trivial for samples or a discussion with the UltraESB. In reality one should not use the EIP patterns supported as a checklist of features etc, as most ESBs would allow one to develop a solution, or customize the available features to realize much complex and real world use cases.

Help with EIPs
Feel free to request help from AdroitLogic support for additional information about supporting any particular EIP or to request for a POC for your exact use case.
Integration Styles


File Transfer

How can I integrate multiple applications so that they work together and can exchange information?

See examples with Files, S/FTP etc


Shared Database

How can I integrate multiple applications so that they work together and can exchange information?

Proxy services can be DB based via polling using Spring JDBC templates or raw JDBC/JPA etc.


Remote Procedure Invocation

How can I integrate multiple applications so that they work together and can exchange information?

SOAP, REST, Hessian etc or EJB, RMI calls etc.



How can I integrate multiple applications so that they work together and can exchange information?

JMS based

Messaging Systems


Message Channel

How does one application communicate with another using messaging?

Can be easily based on JMS (#502), HTTP/S etc



How can two applications connected by a message channel exchange a piece of information?

Defined by the Message interface. The interface supports messages storing the actual payload on a file, as a String, byte[], Object, DOM, DataHandler, Map, HAPI etc. Irrespective of the native format of a Message, it can hold different types of payloads. e.g. a File based HTTP message can hold SOAP, REST, JSon, Hessian, FastInfoset, etc


Pipes and Filters

How can we perform complex processing on a message while maintaining independence and flexibility?

Multiple sequences (i.e. a sequence calling another sequence), multiple lines of Java/JSR 223 script code yields this result.


Message Router

How can you decouple individual processing steps so that messages can be passed to different filters depending on a set of conditions?

Can be easily based on JMS destinations and if-else, switch style coding with Java/JSR 223 script code


Message Translator

How can systems using different data formats communicate with each other using messaging?

XSLT (#205), XQuery (#109), Custom Java code, Custom JSR 223 Scripts (#102), Smooks (#351), FI, Hessian etc


Message Endpoint

How does an application connect to a messaging channel to send and receive messages?

See documentation on Endpoints and Destinations

Messaging Channels


Point-to-Point Channel

How can the caller be sure that exactly one receiver will receive the document or perform the call?

JMS with Queues (#502)


Publish-Subscribe Channel

How can the sender broadcast an event to all interested receivers?

JMS with Topics (Similr to #502 etc with JMS destination being a Topic instead)


Datatype Channel

How can the application send a data item such that the receiver will know how to process it?

Easily implemented with JMS and filtering with if-else or switch statements


Invalid Message Channel

How can a messaging receiver gracefully handle receiving a message that makes no sense?

Can easily write such invalid messages to a Queue, DB, file etc


Dead Letter Channel

What will the messaging system do with a message it cannot deliver?

Can easily write such undeliverable messages to a Queue, DB, file etc


Guaranteed Delivery

How can the sender make sure that a message will be delivered, even if the messaging system fails?

Easily implemented with JMS coupled with the local and JTA XA transaction support


Channel Adapter

How can you connect an application to the messaging system so that it can send and receive messages?

Implements with Proxy Services + Transport Listeners and Endpoints + Transport Senders


Messaging Bridge

How can multiple messaging systems be connected so that messages available on one are also available on the others?

Easily implemented with JMS


Message Bus

What is an architecture that enables separate applications to work together, but in a decoupled fashion such that applications can be easily added or removed without affecting the others?

Easily implemented with JMS based proxy services

Message Construction


Command Message

How can messaging be used to invoke a procedure in another application?

Too trivial to document - see stock quote service example


Document Message

How can messaging be used to transfer data between applications?

Too trivial to document


Event Message

How can messaging be used to transmit events from one application to another?

Easily implemented with JMS



When an application sends a message, how can it get a response from the receiver?

Too trivial to document - see stock quote service example


Return Address

How does a replier know where to send the reply?



Correlation Identifier

How does a requestor that has received a reply know which request this is the reply for?

Using message headers or UUIDs, or JMS correlation IDs etc


Message Sequence

How can messaging transmit an arbitrarily large amount of data?

UltraESB supports large messages and hence the usefulness of this pattern is limited - although this can still be implemented.


Message Expiration

How can a sender indicate when a message should be considered stale and thus shouldn’t be processed?

Could be based on JMS TTL

Format Indicator

How can a message’s data format be designed to allow for possible future changes?


Message Routing


Content-Based Router

How do we handle a situation where the implementation of a single logical function (e.g., inventory check) is spread across multiple physical systems?

XPath (#900), Java - if/switch etc.(#106)


Message Filter

How can a component avoid receiving uninteresting messages?

Trivial based on a Java/JSR 223 - if/switch etc.


Dynamic Router

How can you avoid the dependency of the router on all possible destinations while maintaining its efficiency?

Can be implemented in multiple ways depending on how the user wishes to inform the router of changes


Recipient List

How do we route a message to a list of dynamically specified recipients?

Easily implemented based on if-else, switch statements based on mediation code



How can we process a message if it contains multiple elements, each of which may have to be processed in a different way?




How do we combine the results of individual, but related messages so that they can be processed as a whole?




How can we get a stream of related but out-of-sequence messages back into the correct order?



Composed Message Processor

How can you maintain the overall message flow when processing a message consisting of multiple elements, each of which may require different processing?

Can be implemented



How do you maintain the overall message flow when a message needs to be sent to multiple recipients, each of which may send a reply?



Routing Slip

How do we route a message consecutively through a series of processing steps when the sequence of steps is not known at design-time and may vary for each message?

Routing based on a DB table, JMX bean, rules engine etc


Process Manager

How do we route a message through multiple processing steps when the required steps may not be known at design-time and may not be sequential?

Integration with an external or embedded BPS


Message Broker

How can you decouple the destination of a message from the sender and maintain central control over the flow of messages?

See JMS / HornetQ examples

Message Transformation


Envelope Wrapper

How can existing systems participate in a messaging exchange that places specific requirements on the message format, such as message header fields or encryption?

Trivial, multiple API methods exposed over Message and Mediation


Content Enricher

How do we communicate with another system if the message originator does not have all the required data items available?

See articles - multiple ways of implementation


Content Filter

How do you simplify dealing with a large message, when you are interested only in a few data items?

See articles - multiple ways of implementation


Claim Check

How can we reduce the data volume of message sent across the system without sacrificing information content?

Can be implemented with a DB backend or file system etc.



How do you process messages that are semantically equivalent, but arrive in a different format?

Filtering and transformation support combined

Canonical Data Model

How can you minimize dependencies when integrating applications that use different data formats?

Can be implemented depending on the requirements

Messaging Endpoints


Messaging Gateway

How do you encapsulate access to the messaging system from the rest of the application?

JMS Endpoints / Proxy Services

Messaging Mapper

How do you move data between domain objects and the messaging infrastructure while keeping the two independent of each other?



Transactional Client

How can a client control its transactions with the messaging system?

Local Resource and JTA XA transactions are supported, including asynchronous suspend and resume (#704)


Polling Consumer

How can an application consume a message when the application is ready?

Polling transport based Proxy services


Event-Driven Consumer

How can an application automatically consume messages as they become available?

JMS or other event driven transports


Competing Consumers

How can a messaging client process multiple messages concurrently?

Trivial - multiple services off the same JMS Topic


Message Dispatcher

How can multiple consumers on a single channel coordinate their message processing?

Trivial - multiple services off the same JMS Queue


Selective Consumer

How can a message consumer select which messages it wishes to receive?

Use JMS selector


Durable Subscriber

How can a subscriber avoid missing messages while it’s not listening for them?

Use JMS durable subscriptions

Idempotent Receiver

How can a message receiver deal with duplicate messages?

Supports duplicate detection for JMS re-deliveries with a transport header


Service Activator

How can an application design a service to be invoked both via various messaging technologies and via non-messaging techniques?


System Management


Control Bus

How can we effectively administer a messaging system that is distributed across multiple platforms and a wide geographic area?

Apache ZooKeeper based cluster wide management and monitoring using UTerm and UConsole



How can you route a message through intermediate steps to perform validation, testing or debugging functions?

Can be implemented in mediation logic


Wire Tap

How do you inspect messages that travel on a point-to-point channel?

Clone message and send to another endpoint (#210) or use logging etc

Message History

How can we effectively analyze and debug the flow of messages in a loosely coupled system?

Messages history can be maintained if required, although not enabled by default


Message Store

How can we report against message information without disturbing the loosely coupled and transient nature of a messaging system?

Messages can be persisted to a DB or disk etc if required, although not enabled by default


Smart Proxy

How can you track messages on a service that publishes reply messages to the Return Address specified by the requestor?



Test Message

What happens, though, if a component is actively processing messages, but garbles outgoing messages due to an internal fault?


Channel Purger

How can you keep 'left-over' messages on a channel from disturbing tests or running systems?

1.2. Mediation Reference

1.2.1. API Overview

The UltraESB users are shielded from being bound to any internals of the ESB through a clearly separated user level API. This API is available as a separate JAR file as well, and could be linked via Maven2 to any custom projects that define any mediation code or such reusable artifacts related to mediation.

1.2.2. Mediating Messages within a Sequence

The mediation API is based mainly around two interfaces - Mediation, and Message. While the Mediation interface exposes the built-in support for common actions, the Message interface exposes the various aspects of a message (e.g. transport headers, message properties etc) so that  a user could develop his own mediation logic, extensions, or custom libraries for mediating messages as required. In addition, an instance to a SLF4J Logger is passed into a sequence, which could be used by the mediation code for logging.

The payload of a Message is an Object implementing the MessageFormat interface - and would be created based on the native message format of the message that the transport level sees. During mediation, the message format maybe changed - by explicit user action, or implicitly. For example, an HTTP/S request is held as a RawFileMessage - but maybe converted to and from a DOMMessage implicitly for XPath evaluation or XSLT transformation etc. A JMS Text Message will default to a StringMessage, while a Map Message will default to a MapMessage etc. Users could define custom message formats - but this would generally be very rare as the default message formats support many transports and protocols.

Variables available to Java and JSR 223 Scripting language Sequences

Every sequence is passed three variables as follows:

  • msg - Represents the current message, and is defined by the Message interface

  • mediation - Allows easy access to a rich and powerful set of mediation utility methods and is defined by the Mediation interface

  • logger - a logger category that maybe used for logging from within user code during mediation

1.2.3. The Mediation Interface

The Mediation interface defines the following sub-interfaces for organized access to mediation utilities and features

  • SOAPSupport - mediation utilities for SOAP message processing (Schema validation, transformation, XPath evaluation, FastInfoset, Header and Fault manipulation)

  • HTTPSupport - HTTP level mediation support (e.g. cookies, authentication etc)

  • XMLSupport - XML mediation support (e.g. to/from DOM/JSON conversion, FastInfoset, DOM manipulation, Schema validation, transformation, XPath evaluation etc)

  • JSONSupport - JSON mediation support (e.g. JSON Data services, SOAP or XML to/from JSON etc)

  • ProtocolBufferSupport - mediation utilities for interacting with Protocol Buffers based messages

  • XACMLSupport - XACML fine grained authorization support

  • DateSupport - Data manipulation utilities

  • CachingSupport - Support for caching of responses

  • ThrottleSupport - Support for Throttling

  • AS2Manager - AS2 based messaging support

  • WSSecurityManager - WS-Security processing support

In addition, the Mediation interface directly exposes some useful methods such as:

  • sendToEndpoint() - send the message to a specifically selected endpoint (e.g. for routing between different endpoints during mediation)

  • getConnection() and getDataSource - obtain a JDBC connection or Datasource (e.g. for use with Spring JDBC templates within mediation)

  • getDefaultPlatformTM() - obtain platform Transaction Manager - e.g. for resource local or JTA XA transaction support

  • getSpringBean() - directly access any visible Spring bean (Note: dynamically re-loadable configuration fragments can access beans defined only within their scope or from the root scope)

  • sendResponse(), invokeSequence() and dropMessage() - send a response to the client, invoke another sequence, or stop handling by default inDestination or outDestination

  • readPayloadAsString() - return a String representation of the payload LIMITED TO 8KB (larger messages WILL be trimmed)

  • savePayloadToFile() - save the payload to a file easily

  • setPayloadFromByteArray(), setPayloadFromFile(), setPayloadFromString() - self explanatory

1.2.4. The Message Interface

The Message interface holds the payload of the message, attachments, transport headers, properties and its run-time state (such as transactions bound to, tasks to execute on message completion or failure, content type, UUID, correlated properties set on the message, exceptions and errors encountered etc). The payload of the message is held in an object implementing the MessageFormat interface

  • RawFileMessage - the most efficient form of a message, where the raw bytes are held in a RAM disk based file system or on Memory mapped files (default for HTTP/S messages etc)

  • StringMessage - payload held as a String and hence will not be optimal for large messages (default for JMS text messages etc)

  • ByteArrayMessage - payload held in a byte array in memory (default for JMS bytes messages etc)

  • DOMMessage - DOM object based message for XML payloads

  • DataHandlerMessage - payload held as a DataHandler

  • MapMessage - payload is held on a Java Map (e.g. JMS  map messages)

  • ObjectMessage - payload is a Java Object (e.g. JMS Object messages)

  • ProtocolBufferMessage - payload is a Google Protocol Buffers based message

  • StreamMessage - payload is a Stream (e.g. JMS stream message)

  • HAPIMessage - payload is a HL7 message stored as a HAPI message

  • GenericMessage - an abstract base class for message formats

The Message interface exposes some key methods for mediation as follows:

  • Attachment and Exceptions manipulation

  • Message properties and co-relation to asynchronous responses

  • Transport header manipulation

  • JTA XA and Resource Local Transaction manipulation - including begin/commit/rollback/suspend/resume etc

  • Message cloning

  • Payload manipulation including detachment of an actual payload from a message

  • Temporary files assignment and manipulation for message processing

Please see the Javadocs for the Message interface for complete details

1.2.5. Other Mediation Utilities and Features

  • AS2 Message Processing - Refer to the AS2 Guide for more details

  • WS-Security - Refer to the WS-Security Gateway guide for more details

  • Throttling - Refer to the Throttling Guide for more details

  • XACML - Refer to the XACML Guide for more details

1.3. Sample Index by the User Level

This section gives an index of all the available Sample Use Cases categorized by the the level of the users. There are few levels to which all the samples belongs to.

1.3.1. Introductory Level

Introductory level samples are the ones that a newbie should/can have a look at and understand the UltraESB by samples. These samples most of the time concentrates on only one aspect or a feature of the UltraESB.

  • Proxying JAX-WS (Fast-Infoset) Messages — I have a XML service (typical web service) and I want to mediate the invocation of this service with the ESB, such that the service is available to be accessed as a JAX-WS service over Fast-Infoset. Request messages going into the service via ESB needs to be converted from Fast-Infoset into (possibly) XML and any response going through ESB from this service needs to be converted back to Fast-Infoset.

  • Proxying Text Responses — I have a service that returns text format responses and I want to proxy this text service and mediate the text responses. The UltraESB can be used to proxy any type of payload, including SOAP 1.1/1.2, XML, Text, HTML, Hessian, EDI, CSV, binary etc.. this example shows how a plain text response of a Servlet could be proxied through the UltraESB.

  • Schema Validation and Error Handling — I want to validate the request messages with XML payloads over an XSD schema in the UltraESB before further processing it. Additionally I want the UltraESB to perform error handling and recovery of a particular flow defined in the configuration and direct the error cases into another flow treating it as an error handler.

  • Restful Proxy Services — I have a REST service and I want to mediate the invocation of this REST service with the ESB. Any response going with HTTP "Location" headers from the back end REST service needs to be switched to ESB, so that all traffic to the REST service goes through the ESB.

  • Proxying SOAP Messages — I have a web service and I want to mediate the invocation of this web service with the ESB. Web services use SOAP as there application level protocol and my proxy service should expose itself as a SOAP aware proxy service which also acts as a web service, where clients see it as the actual public API of my service.

  • Invoking a back-end service via WebSocket — I have clients sending SOAP messages through WebSocket connections established between UltraESB and clients and I want to send these SOAP messages to a Web Service via HTTP and send back the reply received from Web Service to WebSocket clients.

  • Integrating WebSocket with other Transports — I have a HTTP client sending HTTP requests to UltraESB and I want to send the content of this HTTP request to WebSocket clients connected to a particular subscriber path and a HTTP 200 response back to the HTTP client

1.3.2. Intermediary Level

Intermediary level samples should/can be followed by the users who have a basic understanding of what UltraESB is. These samples most of the time concentrates on only one feature but possibly integrate more than one aspect of the UltraESB.

  • Sending and Receiving AS2 MessagesAS2 (Applicability Statement 2) is a specification [RFC4130] on how to transport data securely and reliably over the Internet. Security is achieved by using digital certificates and encryption. This articles explains a sample configuration that demonstrates sending and receiving of messages over AS2 with the UltaESB. To make this sample simple, we will first only concentrate on the receipt and sending of files, without mediation or transport/data format conversions.

  • Hessian Binary Message Proxying — I want to proxy a binary Hessian message over HTTP with the ESB. At the same time, if the Hessian classes are available to the runtime, I want to read and process (mediate) the message in transit with a pre compiled Java class.

  • HTTP Basic and Digest Authentication — I have a proxy service developed with the UltraESB and now I want to enforce Transport Level Security (TLS) to this service which is exposed over HTTP. Using HTTP Basic or Digest authentication the service needs to be password protected. Also the use information needs to be extracted in the service for processing in the mediation logic.

  • Restful Mock Services — I want to quickly create some mock services to respond to my REST calls with GET, POST, PUT and DELETE requests, for testing purposes to emulate a real back-end.

  • Using JTA Transactions with SOAP

  • Broadcasting Messages — I want to broadcast a message to all the WebSocket clients connected to a particular subscriber path periodically.

  • link:../sample-use-cases/index.html#_json_data_services — I want to expose results of specified SQL queries as RESTful JSON data, and/or create CRUD style Data Services to manipulate a relational database using a REST interface

  • Proxying and Load Balancing requests to Tomcat — Traditionally the Apache web server has been used to proxy requests to Tomcat servers using mod_jk or mod_proxy etc. This usually entails configuring multiple configuration files at different locations after making the necessary modules available to Apache. This sample describes how the UltraESB can be used to load balance and fail-over requests to Tomcat servers, and compares the configuration with a similar configuration with Apache2 using mod_jk.

  • Invoking a Web Service via Email — The UltraESB supports polling both POP3 and IMAP email boxes, according to a schedule specified as a repeating delay, or as a fully customizable CRON expression. In this example, we will poll a Gmail account "mail.maildemo.demo@gmail.com" every 10 seconds and forward any messages found to the SimpleStockQuoteService hosted using the test ToolBox.

1.3.3. Advanced Level

Advanced level samples should/can be followed by the users who have a good understanding of what UltraESB is and the domain of ESB in general. These samples most of the time describes advance technology/features and it might use more than one aspect of the UltraESB.

  • HTTP Basic — The HTTP protocol supports transport level request authentication, and the most common schemes are: Basic Authentication and the more secure Digest Authentication scheme and NTLM authentication. With large scale use of the Amazon S3 infrastructure, the AWS S3 authentication over REST is also being used in many systems connecting with the Amazon S3 infrastructure. This article explains these authentication schemes, and describes how Proxy services deployed on the UltraESB could use Basic or Digest authentication to secure backend services, and also shows how Basic, Digest, NTLM or AWS S3 secured services can be accessed through the UltraESB - by allowing the ESB to perform transparent authentication on behalf of the clients. Each of these schemes maybe used over HTTPS as well.

  • WS-Security Gateway — I want the UltraESB to act as a high performance WS-Security gateway, providing a secure interface to the clients for non secure services, and a non secure plain interface to the secure service allowing a plain client to access the secure services. The UltraESB should be able to either add or verify and remove security as signed and/or encrypted messages with time-stamp validation.

  • Database look-ups and XQuery Transformations — I want to look-up values from a database and enrich the message coming in with an XQuery transformation, to respond back to the client. I also want to use the ETag and process the messages as per the ETag of the in coming messages.

  • Building an interactive application using WebSocket — I want to build an interactive application where a set of instructions will be executed based on the inputs received from the WebSocket clients.

  • Reverse Proxy or Web Proxy — I have some random content, (could be a web site or anything that can be transferred on the network) and I want the ESB to act as a reverse proxy and possibly mediate the requests/response with any scripting language. Any response going with HTTP "Location" headers from the back end server needs to be switched to ESB, so that all traffic to the back end goes through the ESB. In other words I want my ESB to act as a web proxy for my web site.

1.3.4. Expert Level

Advanced level samples should/can be followed by the users who have a through understanding of what UltraESB is and the domain of ESB in general. These samples might go to a great depth of certain features/technologies while using more than one aspect of the UltraESB.

1.4. AdroitLogic Production Support Guide

This guide describes the support options available to customers purchasing Commercial Support from AdroitLogic. AdroitLogic offers Development Support as well as On-site Consultancy and Training in addition to 24x7 Production Support, and you could find more details and pricing from here.

1.4.1. Introduction

Once you subscribe to a Development or Production Support subscription, you will receive an introductory email with information and credentials to use the support channels available to you.

Web Based Issue Tracker

AdroitLogic hosts a web based JetBrains YouTrack instance. You will also receive one or more user names and passwords via email, to login to the system, and you should change your password on first login.

Issue Tracker URL: e.g. https://support.adroitlogic.com/youtrack
User name : <would-be-emailed-to-you>
Password : <would-be-emailed-to-you>

NOTE: Platinum and Gold support customers should notify Priority 1 and 2 issues by Phone (in addition to reporting over the issue tracker) to ensure adherence to the Service Level Agreement, and the shortest possible response and resolution times.

Email Support

Email support can used by emailing the dedicated email group assigned to you of the form <your-company-identifier>-support@adroitlogic.com, when access to the Web Based Issue Tracker is not possible for some reason (e.g. via an email enabled phone without web access). AdroitLogic will add any issues received via email into the web based issue tracker.

Phone Support

If your subscription is eligible for phone support, you would receive two or more direct phone numbers to reach support.


Where large files need to be shared with AdroitLogic, you should place them into the DropBox folder shared with you. Please compress the files (esp Log files) before uploading, where applicable. You would receive the DropBox folder information by email where applicable.

1.4.2. Using the Web Based Issue Tracker

Web based issue tracker is a secure application with authentication and authorisation and hence you need to login to work with it.

Logging in

Navigate to https://support.adroitlogic.com/youtrack with your web Browser, and use your username and password to login to the issue tracker. 

issue tracker login

Once logged in, you will reach the main dashboard. This will list any issues reported by you, as well as allow you to report a new issue ("1"). The top search bar allows you to query issues with a powerful mechanism, and save such queries for future use as "Saved Searches". By default you will see the "Assigned to me" saved search as well as the "Reported by me" saved search which will show items requiring your attention. You can navigate back to the issue list any time by using the ("2") button.

issue tracker dashboard
Creating an Issue

To create a new issue, select the "New Issue" button at the top left hand side of the page ("1" - in the earlier image), and specify a summary for the issue, and a detailed description which will enable the support team to rectify the issue in the shortest possible time. You may attach or include configuration or log file snippets or screenshots where appropriate. Large files should not be attached to issues, but maybe uploaded via SCP/SFTP after first compressing them into an archive.

Specify the type of the issue as a production support "Issue" or development support "Question". For production support issues you can specify the priority as defined below. Where applicable, specify any environment details (e.g. JMS Server, Database Server or OS/JDK versions where an issue is suspected to be related)

issue tracker create
Specifying the Priority for a Production Support Issue

Specify the Priority of any Production Support issues using ("1"). For Development Support projects, this will default to "Question" and should not be changed. Production support issue priorities depends on the effect of the issue to your production deployment as listed below:

Support P1 - Critical (Priority 1)

The problem results in extremely serious interruptions to a production system, causing downtime. It has affected, or could affect, the entire user community of the software. Tasks that should be executed immediately cannot be executed because of a complete crash of the system or interruptions in main functions of the production system. Data integrity is compromised and the service request requires immediate processing as the issue can result in financial losses.

NOTE: Platinum and Gold support customers should notify Priority 1 and 2 issues by Phone to ensure adherence to the Service Level Agreement, and the shortest possible response and resolution times.

Support P2 - Urgent (Priority 2)

The problem results in serious interruptions to normal operations. Important tasks cannot be performed, but the error does not impair essential operations. Processing can still continue in a restricted manner, and data integrity may be at risk.

NOTE: Platinum and Gold support customers should notify Priority 1 and 2 issues by Phone to ensure adherence to the Service Level Agreement, and the shortest possible response and resolution times.

Support P3 - Important (Priority 3)

The problem causes interruptions in normal operations. It does not prevent operation of a production system, or there could be minor degradation in performance. The error is attributed to malfunctioning or incorrect behavior of the software. The issue will affect a pilot, proof-of-concept or project deadline.

Support P4 - Minor (Priority 4)

The problem results in minimal or no interruptions to normal operations (i.e. causes no business impact). The issue consists of "how to" questions including issues related to APIs and integration, installation and configuration inquiries, enhancement requests, or documentation questions.

Progress of an Issue

As an issue progresses (i.e. comment, update, change state etc) you will receive notification emails. Please ensure that @adroitlogic.com email addresses are allowed to pass through any email / spam filters.

issue tracker notification
Commenting and updating an issue

You can comment or update an issue at any time through the web interface. However, note that the system does not process email responses.

comment on issue
Closing an issue or changing attributes

To close an issue or update its priority, or other information, change the attributes by directly clicking over them.

updating issues

1.5. UltraESB-v1.7.1 to v2.0.0 Migration Considerations

1.5.1. Changes of the ultraesb-api

Removed methods

Significant number of methods have been removed from org.adroitlogic.ultraesb.api.Mediation in v1.7.1 class and following list shows them with the alternative available in v2.0.0

Removed Method New Method

addPreemptiveBasicAuthentication(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String, java.lang.String, boolean)

getHTTPSupport().addPreemptiveBasicAuthentication(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String, java.lang.String, boolean) 

addPreemptiveBasicAuthentication(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String)

getHTTPSupport().addPreemptiveBasicAuthentication(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String)



convertJSONToStream(org.adroitlogic.ultraesb.api.Message, java.lang.Object)

getJSONSupport().convertJSONToStream(org.adroitlogic.ultraesb.api.Message, java.lang.Object)



convertSOAPToJSONStream(org.adroitlogic.ultraesb.api.Message, javax.xml.namespace.QName, boolean)

getSOAPSupport().convertSOAPToJSONStream(org.adroitlogic.ultraesb.api.Message, javax.xml.namespace.QName, boolean)


getXMLSupport().convertToDOM(org.adroitlogic.ultraesb.api.Message) or getSOAPSupport().convertToDOM(org.adroitlogic.ultraesb.api.Message)



convertToTypedJSON(org.adroitlogic.ultraesb.api.Message, java.lang.Class)

getJSONSupport().convertToTypedJSON(org.adroitlogic.ultraesb.api.Message, java.lang.Class)




getXMLSupport(). convertXMLToJSONStream(org.adroitlogic.ultraesb.api.Message)

convertXMLToJSONStream(org.adroitlogic.ultraesb.api.Message, javax.xml.namespace.QName, boolean)

getXMLSupport().convertXMLToJSONStream(org.adroitlogic.ultraesb.api.Message, javax.xml.namespace.QName, boolean)


getXMLSupport().createDOMDocument() or getSOAPSupport().createDOMDocument()

extractAsNodeListUsingXPath(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String[][])

getXMLSupport().extractAsNodeListUsingXPath(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String[][]) or getSOAPSupport().extractAsStringUsingXPath(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String[][])

extractAsStringUsingXPath(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String[][])

getXMLSupport().extractAsStringUsingXPath(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String[][]) or getSOAPSupport().extractAsStringUsingXPath(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String[][])

filter(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String[][], java.lang.String)

getXMLSupport().filter(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String[][], java.lang.String)

filter(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String[][])

getXMLSupport().filter(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String[][])

filter(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String[][])

getXMLSupport().filter(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String[][])

getCookie(org.adroitlogic.ultraesb.api.Message, java.lang.String)

getHTTPSupport().getCookie(org.adroitlogic.ultraesb.api.Message, java.lang.String)













































getSoapHeaderAsString(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String)

getSOAPSupport().getSoapHeaderAsString(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String)







isPermitted(java.lang.String, org.adroitlogic.ultraesb.api.Message)

getXACMLSupport().isPermitted(java.lang.String, org.adroitlogic.ultraesb.api.Message)

isPermitted(java.lang.String, java.util.Map)

getXACMLSupport().isPermitted(java.lang.String, java.util.Map)

isPermitted(java.lang.String, java.lang.String, java.util.Map, org.adroitlogic.ultraesb.api.Message)

getXACMLSupport().isPermitted(java.lang.String, java.lang.String, java.util.Map, org.adroitlogic.ultraesb.api.Message)



mergeXMLAttachmentsUnderElement(org.adroitlogic.ultraesb.api.Message, java.lang.String)

getXMLSupport().mergeXMLAttachmentsUnderElement(org.adroitlogic.ultraesb.api.Message, java.lang.String)

mergeXMLAttachmentsUnderElement(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String)

getXMLSupport().mergeXMLAttachmentsUnderElement(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String)

processBasicJSONDataServiceRequest(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String)

getJSONSupport().processBasicJSONDataServiceRequest(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String)

remove(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String[][])

getXMLSupport().remove(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String[][]) or org.adroitlogic.ultraesb.api.Mediation$getSOAPSupport().remove(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String[][])

retainElementAsPayload(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String[][])

getXMLSupport().retainElementAsPayload(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String[][]) or org.adroitlogic.ultraesb.api.Mediation$getSOAPSupport().retainElementAsPayload(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String[][])

setCookie(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String, java.lang.String, java.lang.String, int, boolean)

getHTTPSupport().setCookie(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String, java.lang.String, java.lang.String, int, boolean)

setCookie(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String, java.lang.String, int)

getHTTPSupport().setCookie(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String, java.lang.String, int)

setCookie(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String)

getHTTPSupport().setCookie(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String)

setPayloadToSOAP11Fault(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String, java.lang.String)

getSOAPSupport().setPayloadToSOAP11Fault(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String, java.lang.String)

public void setPayloadToSOAP12Fault(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String, java.lang.String)

org.adroitlogic.ultraesb.api.Mediation$getSOAPSupport().setPayloadToSOAP12Fault(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String, java.lang.String)

splitAndProcess(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String[][], java.lang.String, boolean)

getXMLSupport().splitAndProcess(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String[][], java.lang.String, boolean) or getSOAPSupport().splitAndProcess(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String[][], java.lang.String, boolean)

transform(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String, java.lang.String[][], boolean, java.util.Map)

getXMLSupport().transform(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String, java.lang.String[][], boolean, java.util.Map) or getSOAPSupport().transform(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String, java.lang.String[][], boolean, java.util.Map)

transform(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String, java.lang.String[][])

getXMLSupport().transform(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String, java.lang.String[][]) or getSOAPSupport().transform(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String, java.lang.String[][])

transform(org.adroitlogic.ultraesb.api.Message, java.lang.String)

getXMLSupport().transform(org.adroitlogic.ultraesb.api.Message, java.lang.String) or getSOAPSupport().transform(org.adroitlogic.ultraesb.api.Message, java.lang.String)

validate(org.adroitlogic.ultraesb.api.Message, java.lang.String[], java.lang.String, java.lang.String[][])

getXMLSupport().validate(org.adroitlogic.ultraesb.api.Message, java.lang.String[], java.lang.String, java.lang.String[][]) or getSOAPSupport().validate(org.adroitlogic.ultraesb.api.Message, java.lang.String[], java.lang.String, java.lang.String[][])

validate(org.adroitlogic.ultraesb.api.Message, java.lang.String[])

getXMLSupport().validate(org.adroitlogic.ultraesb.api.Message, java.lang.String[]) or getSOAPSupport().validate(org.adroitlogic.ultraesb.api.Message, java.lang.String[])

Removed Method Class New Method

public java.lang.Object getBean(java.lang.String)



public java.util.List getProxyServiceIDList()


not available

public java.lang.Object getSpringBean(java.lang.String, java.lang.Class)


org.adroitlogic.ultraesb.api.Mediation$getSpringBean(java.lang.String, java.lang.Class)

public void saveFileLength()


not available

public void setLength(long)


not available

public java.lang.String getRequestParameter(org.adroitlogic.ultraesb.api.Message, java.lang.String)


org.adroitlogic.ultraesb.api.Mediation$getHTTPSupport().getRequestParameterValues(org.adroitlogic.ultraesb.api.Message msg, java.lang.String key)

New Methods in Interfaces
Interface Method


public void addOrUpdateDeploymentUnit(org.adroitlogic.ultraesb.api.management.DeploymentUnitDefinition)


public java.util.List getLoadedDeploymentUnits()


public boolean isDeploymentUnitLoaded(java.lang.String)


public boolean purgeAllOutdatedDeploymentUnits()


public void unloadDeploymentUnit(java.lang.String)


public void setConfig(org.adroitlogic.ultraesb.api.Configuration)


public org.adroitlogic.ultraesb.api.MessageFile acquireTempMessageFile(org.adroitlogic.ultraesb.api.Message)


public void callTemplate(org.adroitlogic.ultraesb.api.Message, java.lang.String)


public void callTemplateAsynchronously(org.adroitlogic.ultraesb.api.Message, java.lang.String)


public void callTemplates(org.adroitlogic.ultraesb.api.Message, java.util.List)


public org.adroitlogic.ultraesb.api.mediation.AuditSupport getAuditSupport()


public org.adroitlogic.ultraesb.api.mediation.AuditSupport getAuditSupport(java.lang.String)


public org.adroitlogic.ultraesb.api.mediation.EmailSupport getEmailSupport()


public org.adroitlogic.ultraesb.api.mediation.FastInfosetSupport getFastInfosetSupport()


public org.adroitlogic.ultraesb.api.mediation.FileSupport getFileSupport()


public org.adroitlogic.ultraesb.api.mediation.HL7Support getHL7Support()


public org.adroitlogic.ultraesb.api.mediation.JAXBSupport getJAXBSupport()


public org.adroitlogic.ultraesb.api.mediation.JMSSupport getJMSSupport()


public org.adroitlogic.ultraesb.api.mediation.MetricsSupport getMetricsSupport()


public java.lang.Object getSupport(java.lang.Class)


public void invokeSequenceAsynchronously(org.adroitlogic.ultraesb.api.Message, java.lang.String)


public void invokeSequences(org.adroitlogic.ultraesb.api.Message, java.util.List)


public byte[] readPayloadAsByteArray(org.adroitlogic.ultraesb.api.Message)


public java.util.Map readPayloadAsMap(org.adroitlogic.ultraesb.api.Message)


public org.w3c.dom.Document readPayloadAsXMLDocument(org.adroitlogic.ultraesb.api.Message)


public void setPayloadFromDataHandler(org.adroitlogic.ultraesb.api.Message, javax.activation.DataHandler)


public void setPayloadFromMap(org.adroitlogic.ultraesb.api.Message, java.util.Map)


public void setPayloadFromObject(org.adroitlogic.ultraesb.api.Message, java.lang.Object)


public void setPayloadFromXMLDocument(org.adroitlogic.ultraesb.api.Message, org.w3c.dom.Document)


public long getBaseTime()


public java.lang.Object getMessageProperty(java.lang.String, java.lang.Class)


public java.lang.String getStringMessageProperty(java.lang.String)


public java.util.UUID getTransactionUUID()


public boolean hasMessageProperty(java.lang.String)


public boolean isDropped()


public void removeAllTransportHeaders()


public void removeTransportHeaders(java.lang.String)


public void retainOnlyTransportHeaders(java.lang.String)


public void addRequestParameter(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String)


public java.lang.String[] getAuthenticatedRolesArray(org.adroitlogic.ultraesb.api.Message)


public java.lang.String getAuthenticatedRolesString(org.adroitlogic.ultraesb.api.Message)


public java.lang.String getAuthenticatedUsername(org.adroitlogic.ultraesb.api.Message)


public java.lang.String getFirstRequestParameter(org.adroitlogic.ultraesb.api.Message, java.lang.String)


public java.lang.String getLocalAddress(org.adroitlogic.ultraesb.api.Message)


public int getLocalPort(org.adroitlogic.ultraesb.api.Message)


public org.adroitlogic.ultraesb.api.transport.http.HttpConstants$Method getMethod(org.adroitlogic.ultraesb.api.Message)


public java.lang.String getQueryString(org.adroitlogic.ultraesb.api.Message)


public long getReceivedEntitySize(org.adroitlogic.ultraesb.api.Message)


public long getReceivedHeaderSize(org.adroitlogic.ultraesb.api.Message)


public long getReceivedMessageSize(org.adroitlogic.ultraesb.api.Message)


public java.lang.String getRemoteAddress(org.adroitlogic.ultraesb.api.Message)


public int getRemotePort(org.adroitlogic.ultraesb.api.Message)


public java.lang.String getServiceURL(org.adroitlogic.ultraesb.api.Message)


public void removeRequestParameter(org.adroitlogic.ultraesb.api.Message, java.lang.String)


public void setAuthenticationCredentials(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String)


public void setAuthenticationCredentials(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String, java.lang.String)


public void setMethod(org.adroitlogic.ultraesb.api.Message, org.adroitlogic.ultraesb.api.transport.http.HttpConstants$Method)


public void setNTLMAuthenticationCredentials(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.String, java.lang.String, java.lang.String)


public boolean isSoap11(org.adroitlogic.ultraesb.api.Message)


public boolean isSoap12(org.adroitlogic.ultraesb.api.Message)


public boolean isAllowed(java.lang.String, org.adroitlogic.ultraesb.api.Message)


public java.lang.Object convertXMLToJAXBObject(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.Class)


public void serializeJAXBObjectAsXMLStream(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.Object)


public void serializeJAXBObjectAsXMLStream(org.adroitlogic.ultraesb.api.Message, java.lang.String, java.lang.Object, java.lang.String, java.lang.String)

Classes Introduced in UltraESB-2.0.0


New methods introduced in UltraESB-2.0.0
Method Class

public java.lang.String getSubject()

public void setSubject(java.lang.String)

public java.lang.String getSubject()

public boolean isMdnRequested()

public void setMdnRequested(boolean)

public void setSubject(java.lang.String)

public java.lang.String describeInShort()








1.6. Contributing to the UltraESB

In order to contribute towards the development of the UltraESB you can send a pull request to us through Bitbucket. Keep in mind that you are free to send a pull request for any bug fixes, features addition, etc. and we will commit those requests to our code base after reviewing them. Just follow the below mentioned simple steps in order to make a pull request. 

Prerequisites: You should already have a Bitbucket account

  1. Commit your changes to the local repository and then go to https://bitbucket.org/adroitlogic/ultraesb/src and click on the fork button. This will create a clone of ultraesb repository under your account so that you’ll have write permission.

  2. After that push your committed local repository into the remote Bitbucket ultraesb repository which was just cloned under your account. Make sure that the .hg/hgrc file contains the path for the correct remote repository. For example it should be

    default = https://YOURACCOUNTNAME@bitbucket.org/YOURACCOUNTNAME/ultraesb 

    and not

    default = https://adroitlogic@bitbucket.org/adroitlogic/ultraesb 
  3. After pushing your code to the remote repository on Bitbucket, load that repository page and click on the 'pull request' button.

    pull request
  4. Then you’ll be given a pull request form. Just fill that and click on the `create pull request button' and that’s all.

    pullrequest form

1.7. External Articles

External articles published on other sites on UltraESB

There could be more external articles on UltraESB on different sites, this is just the list that we came across. Please e-mail us [info@adroitlogic.com] the link if you publish of find any external article on UltraESB which is not listed here.

Back to Home Page