When JMS messages are rolled back, response to reply-to is still sent
Workaround: Adding an invocation property will avoid reply to processing. You can use the following transformer after the failing endpoint:
Mule ESB 3.3.0 Release Notes
June 26, 2012
MuleSoft is pleased to announce the release of Mule ESB 3.3 which introduces powerful new functionality and improvements to our industry-leading ESB software.
These release notes apply to both the Community and the Enterprise editions of Mule ESB 3.3. Where appropriate, we have applied an Enterprise Edition marker to identify features or functionality that are available only in the Enterprise edition.
For this release, we have focused our efforts on expanding the features and capabilities of Mule ESB’s Studio graphical interface and on fixing known issues from the previous release. We have resolved hundreds of issues and hardened our product to ensure further stability and improve ease-of-use.
We highly recommend upgrading to Mule ESB 3.3 to take advantage of Anypoint DataMapper and unified Mule Expression language, our new iterative processor and our “in-memory” data caching.
Current Release Version
Mule ESB 3.3.0 Enterprise Edition |
Mule ESB 3.3.0 Community Edition |
|
---|---|---|
ESB |
Version 3.3.0 |
Version 3.3.0 |
Studio |
Build 201206220448 |
Build 201204251946 |
Management |
Build f56e9aa |
n/a |
SAP Enterprise |
Version 1.2 |
n/a |
CMIS Connector |
Version 1.6 |
Version 1.6 |
Magento Connector |
Version 1.5 |
Version 1.5 |
MongoDB Connector |
Version 2.1 |
Version 2.1 |
Salesforce Connector |
Version 4.3 |
Version 4.3 |
Twilio Connector |
Version 1.2 |
Version 1.2 |
Twitter Connector |
Version 2.6 |
Version 2.6 |
New Features and Functionality
We are excited to launch a new set of tools in Mule ESB 3.3 that have been designed to further increase the speed and efficiency of systems integration.
Mule ESB and Studio
-
Cache: Enterprise Edition Improves performance with “in memory” caching of messages, such as the results of service calls. Refer to Cache documentation for more details.
-
Anypoint DataMapper: Transforms data, using a graphical interface, from one format to another. This powerful, new feature can even map specific fields within the message structure and it supports the transformation to and from the following data formats: XML, JSON, CSV, POJOs, collections of POJOs, and EXCEL. Refer to DataMapper documentation for more details.
+ DataMapper is fully available only in Mule ESB Enterprise Edition. Enterprise Edition Experiment with DataMapper in Mule ESB Community Edition to evaluate this powerful new tool in Studio; download Mule ESB Enterprise to RUN an application and see DataMapper in action. -
Improved error handling: Integrates new exception strategies into Studio. These include: Catch and Rollback exception strategies, and Choice exception strategy, which handles errors conditionally, according to the type of exception thrown. Refer to Error Handling documentation for more details.
-
Iterative processing using Foreach: Allows for iterative, loop-type processing of a message payload or properties while maintaining the original message context. Refer to Foreach documentation for more details.
-
Simplified expressions: Unifies an expression language to promote consistency and ease-of-use for message validation, filtering, routing, or transformation. Refer to Mule Expression Language MEL documentation for more details.
-
SAP Endpoint: Enterprise Edition
Presents an efficient, new SAP Endpoint in Studio that facilitates seamless SAP integration, including SAP-to-SalesForce integration. Further, Mule can now send and receive messages in SAP iDocs format. Refer to the SAP Endpoint documentation to learn about the additional libraries required to enable the SAP Endpoint in Studio. -
Business events: Enterprise Edition Enables the configuration and tracking of business events and key performance indicators in Studio. Refer to Business Events documentation for more details.
-
SCM support: Controls the evolution of a Studio project by supporting popular Software Configuration Management tools: Git and Subversion. Install SCM plugins to track and control changes in a Studio project. Refer to Git and Subversion documentation for more details.
-
Maven support: Enables import of projects built within the Maven framework into Studio, and export of Studio-built projects to Maven. Install Maven’s plugins to move projects back and forth between build tools. Refer to Importing and Exporting documentation for more details.
MuleSoft Management Console
Enterprise Edition
-
High availability support: Supports Active/Passive (that is, cold standby) configuration for the management system. Refer to Persisting Environment Data for more details.
-
Persistence alternatives: Officially supports Oracle and PostgreSQL database options for persisting management configuration, deployment and business event data. Refer to Persisting Transaction Data and Persisting Environment Data documentation for more details.
-
Audit log: Offers an Audit Log that enables searches for user login activity such as, adding server registration/de-registration. Refer to Audit Logs documentation for more details.
Noteworthy Improvements
What follows is a list of major improvements MuleSoft is proud to include and make available in 3.3 GA.
Mule ESB and Studio
-
Spring 3.1 upgrade: Includes support for Spring Bean definition profiles and updated namespaces:
spring-beans-3.1
andspring-beans-current
. -
Apache CXF 2.5.1 upgrade: Supports the latest bug fixes and enhancements in the CXF Web Services framework.
-
WS-Security access: *Enterprise Edition* Enables WS-Security on a SOAP component in Studio to provide application-layer security for a Web service. Refer to Enabling WS-Security documentation for more details.
-
Message property improvements: Scopes, copies, and consistently stores session and invocation message properties.
-
Message and variable transformer addition: Simplifies the management of properties, variables and attachments; replaces the Message Property transformer, which is now deprecated. Refer to Transformers documentation for more details.
-
HTTP improvements: Extends the set of HTTP-specific message properties and makes their behavior more consistent. Further, adds specific components and transformers to facilitate the creation of HTTP response elements.
-
Mule application publication: Enables publication of Mule Studio applications to the repository in the Mule Management Console and/or Mule iON (now known as CloudHub).
-
New templates Includes several new project templates upon which to build a new Studio project. Refer to Anypoint Exchange for more details.
-
Java 7 support: Mule ESB 3.3 is certified and tested to support Java 7.
Mule Management Console
Enterprise Edition
-
Enhanced LDAP support: Facilitates implementation of LDAP-based authentication and authorization using new tools and templates. Refer to LDAP Authentication documentation for more details.
-
REST API server management: Provides REST APIs to access much of the console’s functionality, including server management. Refer to REST API documentation for more details.
-
Performance: Improves the console’s performance for threads, thread-pools, deployments, and applications.
Hardware and Software System Requirements
For most use cases, Mule ESB 3.3 does not change the hardware and software system requirements established by Mule ESB 3.2.
Contact MuleSoft with any questions you may have about system requirements.
Important Notes and Known Issues in this Release
This list covers some of the known issues with Mule ESB 3.3. Please read this list before reporting any issues you may have spotted.
Mule ESB
Issue | Description |
---|---|
MULE-6273 |
Exception Strategies are not being invoked in a flow with an Ajax inbound endpoint. |
MULE-6258 |
Request-reply outbound endpoint sends reply to caller temp queue instead of self temp queue |
MULE-6209 |
Referencing "exception" inside a groovy script should return null if there were no exception thrown |
MULE-6165 |
Null' is used both as a response from message processors with no result and to signify a message dropped by a filter |
MULE-6094 |
RestServiceWrapper |
MULE-6060 |
Do not always serialize Mule session security context |
MULE-6058 |
Cannot override the JsonTransformerResolver |
MULE-6046 |
Incorrect checking for supported transformer types in DefaultMuleMessage |
EE-2756 |
Cache stores intermediate payload of aggregators instead of final payload contents |
EE-2700 |
HTTP Polling on a cluster: all nodes poll independently |
EE-2699 |
|
EE-2695 |
Creating/disbanding clusters repeatedly in a short period of time causes them to shutdown |
Mule Studio
Issue | Description |
---|---|
STUDIO-1217 |
When you configure any of the JDBC datasources (MySQL, Oracle, etc.), the driver is not added. |
STUDIO-1077 |
Neither the HTTP nor HTTPS Polling Connectors can be referenced using the Properties pane in the Message Flow view. |
STUDIO-866 |
When you remove a Request-Response endpoint or replace it with a one-way endpoint in the Message Flow view, the response element is not removed from the XML configuration file. |
STUDIO-459 |
Unable to add a response element when creating a second flow within a single .mflow file. |
For request-response endpoints embedded in a composite source within a subflow, icons do not show the proper exchange pattern. |
|
STUDIO-162 |
The Description field is not persisted when you switch back and forth between the Message Flow and XML configuration views. This issue may appear in the bundled examples that are included in Mule Studio. Currently, there is no way to populate the Description field using the graphical interface. |
When you create a project from an existing template, the Problems pane may display errors such as the following: |
|
When you install the Windows 64-bit version of Mule Studio with the IBM JDK, then create a project using the Order Discounter template, the Problems pane may display errors such as the following: |
|
STUDIO-1212 |
Response section in the Composite Source is not being reflected in the canvas. |
STUDIO-280 |
When using eGit and committing Mule projects, usually one or more of |
STUDIO-1835 |
Generate WSDL in the SOAP component works with CXF version 2.1.3, instead of using 2.5.1. This can cause the loss some part of the WSDL generation. |
STUDIO-1920 |
There are backwards compatibility issues with the evaluator attribute when using expressions, as STUDIO supports only the latest version of the ESB, version 3.3. If you attempt to use the expression evaluator attribute, it will be marked as an error. |
STUDIO-1953 |
DataMapper - Complex XMLs. Need the ability to handle nested and recurring elements in the XML. |
STUDIO-1954 |
DataMapper - Need support for custom Java Functions. |
STUDIO-1955 |
DataMapper - Need support for multiple input sources that maps to multiple output sources. |
STUDIO-2001 |
DataMapper - Need ability to map for XML.Any elements. |
Mule Management Console
Enterprise Edition
Issue | Description |
---|---|
-1237 |
Business Event Analyzer: only custom events are displayed on transaction details if HttpRequestToNameString is used. |
-1234 |
Restarting one cluster restarts all the clusters that have been configured. |
-1208 |
A cluster can only be disbanded if all nodes are running. |
-1205 |
Flow information for clusters is the same for every cluster when they are all using the same application. |
-1199 |
When you create a cluster, not all the applications deployed to the server group get properly removed. |
-1198 |
Post Process Notifications for "one-way" endpoints are not being registered, which causes Business Events to be marked as failed. |
-1165 |
In the Business Events tracker, incorrectly reports the name of the flow associated with a given exception strategy. Specifically, when a message jumps from flow A to sub-flow B, then returns to Flow A, and a component throws an exception in Flow A, the Business Events list Flow A’s exception messages under Flow B’s name. |
Known Issues:
-
If an input stream is used as a payload and combined with clustering, when the processing goes from one node to the other, in Mule 3.3.0 the stream truncates and in Mule 3.3.1 an exception is thrown.
-
Sending JMS messages between Mule 3.3.1 and Mule 3.2.1 doesn’t work because the Mule session header encoding is incompatible between the two. Add a LegacySessionHandler to make this work.
Fixed in this Release
Mule ESB
View Resolved Issues
Issue | Description |
---|---|
MULE-6275 |
on-redelivery-attempts-exceeded does not support doc:name attribute |
MULE-6248 |
Session variable gets lost if using an enricher |
MULE-6247 |
Custom transformers are not registered on mule context |
MULE-6240 |
TransactionalQueueManager loads all keys from all ListableObjectStores in order to populate internal message queues |
MULE-6236 |
Unable to set content-type on RestServiceWrapper |
MULE-6234 |
Cannot use QueuePersistenceObjectStore on UntilSuccessful |
MULE-6203 |
Transport archetype creates test using deprecated methods |
MULE-6199 |
Attributes name for basic functionality is optional but should be required |
MULE-6189 |
Failed to initialize app. MBean Exception. |
MULE-6182 |
WS-Security element should not support Validators and Security Manager if the CXF MP is a client |
MULE-6176 |
Expression evaluators that can be used in filters only fail with obscure error messages if used in no valid places |
MULE-6169 |
expression-component does not allow variable declaration |
MULE-6163 |
Endpoint response message processors should not be processed when an endpoint doesn’t have a response |
MULE-6162 |
AbstractMessageReceiver returns value even when endpoint exchange pattern is one-way |
MULE-6159 |
Proxy Service fails with NPE when the WSDL has Faults defined |
MULE-6156 |
AttributeEvaluator does not support parentheses inside expressions |
MULE-6146 |
Filters in sub-flows do not filter as expect and should (rather only act as sub-flow 'return') |
MULE-6137 |
Missing implicit conversion for converters |
MULE-6128 |
DefaultInboundEndpoint flowConstruct has setter but no getter |
MULE-6127 |
Default mule application mule context is private |
MULE-6102 |
VM Queue not picking up messages previously persisted in the queuestore directly |
MULE-6082 |
Application Deployment Descriptor is not properly closed |
MULE-6066 |
Default Exception Strategy ignored with CXF component |
MULE-6051 |
XA transactions causing an increment in ActiveMQ consumers |
MULE-6050 |
When a Mule object (application, connector, flow, endpoint, etc.) is stopped more than once, the second and later stops have no effect |
MULE-6047 |
Application of a transformer chain to a mule message can produce different return types |
MULE-6028 |
activemq-xa connector does not reconnect to JMS provider once disconnected |
MULE-6019 |
Transactions on one-way vm queues causes CPU to go warm |
MULE-6017 |
spring.handlers and spring.schema are not generated correctly within the embedded distribution |
MULE-6007 |
Application fails to start when using until-successful router with a persistent ObjectStore |
MULE-6004 |
Commit on exception strategy JMS, FILE and FTP are transport are not consuming the message |
MULE-6003 |
CXF swallows exceptions in flows, prevents exception strategies from processing exceptions |
MULE-5998 |
As from 3.2 aggregators no longer maintain the order events are received when creating MuleMessageCollection |
MULE-5997 |
Inconsistent definition of some expression evaluators |
MULE-5988 |
ConcurrentModificationException during serialization of MuleSession with SessionHandler if there is a non-serializable property |
MULE-5981 |
Keystore type configuration is incorrect |
MULE-5965 |
Mule throws EOFException when it finds an empty message within a queue store |
MULE-5919 |
Reply-To doesn’t work for WMQ transport |
MULE-5907 |
ReplyTo property is lost because is not properly propagated between events |
MULE-5884 |
ActiveMQ web documentation should explain activemq jar inclusion in lib directory |
MULE-5827 |
File connector in 3.2.0 ignores #[header:originalFilename] and writes no file |
MULE-5825 |
JDBC DataStore requires that the JDBCConnector has the queryTimeout set to work |
MULE-5797 |
TransactionalQueueManager is only started after inbound endpoints/sources - Duplicate events can appear in SEDA queues |
MULE-5617 |
Javadoc no longer generated with Maven 3 build |
MULE-5415 |
Http transport doesn’t work for first invocation |
MULE-5379 |
http endpoint port attribute does not support expressions |
EE-2747 |
Hazelcast cluster stops consuming messages after node restart |
EE-2738 |
Failure to create implicitly chains of 2 or more Transformers |
EE-2737 |
Mule should not use default user exposed object store for internal purposes. |
EE-2727 |
Default app config in standalone distribution refers to 3.2 XML schema |
EE-2725 |
Soak test fails after 15 to 25 minutes, with multiple resources locking on to ActiveMQ resource |
EE-2724 |
Batch update forces Map payload when that is not needed |
EE-2721 |
Configuring a Consumable Filter doc for Cache Message Processor is missing |
EE-2720 |
muleContext.getClusterNodeId() is always 0 |
EE-2701 |
NPEs in logs while raising nodes |
EE-2697 |
Polling + Updating JDBC database throws Connection Closed exceptions, always fails when using services |
EE-2691 |
Application’s lifecycle is applied to global server’s objects |
EE-2681 |
recover() method in TransactionalQueueManager should check for empty keySet from object store |
EE-2658 |
Cannot reference JDBC Object Store using JDBC EE schema |
EE-2657 |
Cannot reference JDBC Datasources using JDBC EE schema |
EE-2631 |
spring.handlers and spring.schema are not generated correctly within the embedded distribution |
EE-2609 |
Mule throws EOFException when it finds an empty message within a queue store |
EE-2577 |
Mule fails to start on HP-UX |
EE-2221 |
activemq-xa connector does not reconnect to JMS provider once disconnected |
Mule Studio
View Resolved Issues
Issue | Description |
---|---|
STUDIO-821 |
Request Reply (flow control) must have a way from the UI to add inbound and outbound endpoints |
STUDIO-991 |
In the MuleMQ and ActiveMQ widget dialog box, in the MuleMQ properties tab, checking the "XA Support mode" causes the dialog box to go blank for a second |
STUDIO-1157 |
Spring import schema does not have doc:Name attribute |
STUDIO-1546 |
Transactions dialog for VM endpoint is too big |
STUDIO-1549 |
WMQ Endpoint: Exchange pattern should be placed after Display Name |
STUDIO-1550 |
Quartz: duplicated job attribute |
STUDIO-1561 |
HTTP Outbound endpoint: Remove the blank option from the HTTP method attribute |
STUDIO-1518 |
Unable to create a bean - Getting Null Pointer Exception when trying to create a bean in a JDBC connector |
STUDIO-1406 |
Installing a newer Studio version and using an old workspace (the default one) causes errors and the runtime is lost |
STUDIO-1388 |
Getting concurrent modification exception when adding CC and referencing them |
STUDIO-1394 |
Two-way editing issue: Salesforce and Twitter streaming endpoint are parsed as invalid configuration and removed from canvas and then XML |
STUDIO-1386 |
Reconnection Strategies: Add the 'Not use reconnection strategy' option |
STUDIO-1332 |
WMQ XA connector should be considered as a checkbox inside WMQ to be enabled and not a separate connector |
STUDIO-1454 |
Getting JNPE when deploying to iON (now known as CloudHub) not having selected a project |
Mule Management Console
Enterprise Edition
View Resolved Issues
Issue | Description |
---|---|
-1226 |
Server Metrics charts are slow to load even with a single mule instance |
-1222 |
Deployment of new version of Application is not working as expected |
-1195 |
Cannot start Mule 2.2.8 using 3.3/2.2.8 agent, -agent-mule2-impl-3.3.0-RC2-full.jar |
-1111 |
UI becomes unresponsive when trying to save a cron job. |
-1107 |
On Business Event, queries do not show new generated events while agent is on heavy load (if load is reduced situation goes back to normal). |
-1059 |
takes too long to show Deployments (Tab, and portlet) |
-1022 |
On Event Analyzer, Processing Time, using m as time unit is allowed, but system does not process it. |
-1016 |
On Servers tab, if cluster item is clicked in the left side tree panel, the cluster view is not opened. |
Third Party Connectors and other modules
At this time, not all of the third party modules you may have been using with previous versions of Mule ESB have been upgraded to work with Mule ESB 3.3. Contact MuleSoft if you have a question about a specific module.
Migrating from Mule ESB 3.2 to 3.3
The following sub-sections offer details on the changed and improved behaviors that Mule ESB 3.3 introduces. For more details on how to migrate from previous versions of Mule ESB, access the library of Migration Guides.
System Variables
Message Properties
Transformation Changes
Spring Framework Upgrade
Flow Behavior
Message Enricher
Error handling
Web Services
API Changes
Environment Variables
Neither MULE_HOME nor MULE_BASE is required or recommended to run Mule 3.3. If either of these variables exist on a system slated for Mule 3.3 installation, MuleSoft recommends that you remove them.
Message Properties
Mule ESB 3.3 resolves several issues involving message properties and includes two improvements. Refer to Transformers documentation for further details on Mule Studio’s new transformers.
-
Fixed: Mule does not lose invocation properties in a flow with request-response outbound endpoints. (Also fixed in Mule versions 3.1.4 and 3.2.2.)
-
Fixed: Mule correctly propagates invocation properties in flows with splitters and routers. (Also fixed in Mule versions 3.1.4 and 3.2.2.)
-
Fixed: Mule’s Collection Aggregator correctly aggregates invocation properties. (Also fixed in Mule versions 3.1.4 and 3.2.2.)
-
Fixed: The
</request-reply>
router correctly preserves session properties. (Also fixed in Mule versions 3.1.4 and 3.2.2.) -
Fixed: Mule correctly propagates session properties in a flow with splitters and routers. (Also fixed in Mule versions 3.1.4 and 3.2.2.)
-
Improved: If Mule encounters a message with session properties which cannot be serialized — forcing it to write the message to a queue — Mule issues a warning, but does not throw an exception. This behavior is consistent with the warning Mule issues when an endpoint receives a message with a session property that cannot be serialized.
-
Improved: Mule uses a single map of invocation properties to split messages on each flow (excluding asynchronous). Further, when Mule sends messages down multiple routes for processing, all the routers share the same set of invocation properties.
Transformation Changes
Mule 3.3 introduces three new behaviors associated with the way messages are transformed from one data format to another (for example, from File to String):
Behavior | Improved Behavior | Old Behavior |
---|---|---|
enforced transformation |
A transformer yields an expected type of message payload; the flow must be prepared to manage only one type of output. |
A transformer yields one of several possible types of message payload; transformed payload type is unknown and the flow must be prepared to manage several different outputs. |
implicit transformation |
If a transformer exists to change message payloads from type B to C, and it receives a message payload type A, Mule implicitly looks for a converter that can convert the message payload from A to B, before introducing the message payload to the B-to-C transformer. |
If a transformer receives an unexpected type of message payload, it throws an exception. |
extended transformer lookup |
If a transformer exists to change message payloads from type B to C, and it receives a message payload type A, Mule implicitly looks for a converter that can convert the message payload from A to B, before introducing the message payload to the B-to-C transformer. If Mule cannot find an A-to-B converter, it extends its search to look for combinations of converters that will yield a message payload type B. For example, it may convert a message payload from A to F, then use another converter to change it from F to B before introducing it to the B-to-C transformer. |
If a transformer receives an unexpected type of message payload, and cannot find a single converter to match its conversion needs, it throws an exception. |
If you do not wish to use these new transformer behaviors on your application — if the behaviors are not compatible with the way your application is configured, for example — you can disable the behaviors in Mule ESB 3.3 by adding the following code snippet to the Mule configuration of your application:
<configuration useExtendedTransformations="false"/>
Spring Framework Upgrade
A key piece of Mule’s configuration mechanism, Spring, has recently released a new version of its framework. Spring 3.1.0 – upgraded from 3.0.3 – fixes bugs and adds new features, which Mule ESB 3.3 supports. To read more about new features and fixes in Spring 3.1, refer to Spring’s reference documentation.
Namespaces
To take advantage of the new features and bug fixes in Spring 3.1, use one of the two new corresponding namespaces:
Use spring-beans-current to instruct your application to use the latest version of Spring that is available in Mule. When Spring releases new versions, you need not manually update the namespaces in your application.
|
Bean Definition Profiles
Mule’s configuration file takes advantage of Spring’s new ability to create bean definition profiles. You can use Spring bean definition profiles to register different beans for different target environments, instead of using one bean for all target environments. Refer to Spring’s blog posting for more information about bean definition profiles.
As an example, you can use bean definition profiles to create and use unique connectors for different profiles.
-
Create bean profiles and configure them for separate profiles.
<mule xmlns="http://www.mulesoft.org/schema/mule/core" ...> <spring:beans profile="one"> <mule> <stdio:connector name="stdioConnector" messageDelayTime="10" outputMessage="profile 1: " promptMessage="prompt message 1"/> </mule> </spring:beans> <spring:beans profile="two"> <mule> <stdio:connector name="stdioConnector" messageDelayTime="10" outputMessage="profile 2: " promptMessage="promtp message 2"/> </mule> </spring:beans> <flow name="service"> <stdio:inbound-endpoint name="in" system="IN" connector-ref="stdioConnector" exchange-pattern="one-way" /> <stdio:outbound-endpoint name="out" system="OUT" connector-ref="stdioConnector" exchange-pattern="one-way" /> </flow> </mule>
-
When starting a Mule instance, use a JVM argument to set the profile system property to identify which bean profile Mule should use. Your setting applies to all applications deployed on the Mule instance.
$MULE_HOME/bin -M-Dspring.profiles.active="one"
Flow Behavior
Mule ESB 3.3 introduces changes designed to refine flow behavior. Although they offer much in the way of improvement and consistency, the changes only affect a small number of use cases. What follows is a summary of the changes, and information on how to ensure your Mule ESB 3.2 application continues to behave as expected in Mule ESB 3.3.
Filtering
In Mule ESB 3.3, you can add a filter to a flow or a subflow and expect that it will behave dependably and consistently in both.
In previous 3.x versions of Mule ESB, the behavior of a filter differed depending on whether you added it to a flow or a subflow.
-
A filter in a flow dropped a failed message but did not discard the file (see Example 1, below)
-
A filter in a subflow dropped a failed message silently, discarded the file, and allowed the message to continue into the main flow for processing (see Example 2, below).
In Mule ESB 3.3, a filter’s behavior is consistent in all flows, subflows and child flows: it drops a failed message but does not discard the file. (See Example 3, below.) This makes it far easier to trace an error to its source and resolve any problem with the filter or a flow.
Example 1, file NOT discarded
<flow name="flowWithFilter>
<http:inbound-endpoint address="http://localhost"/>
<expression-filter expression="0 == 1">
<file:outbound-endpoint path="/tmp" />
</flow>
Example 2, file discarded
<flow name="flowWithFilter>
<http:inbound-endpoint address="http://localhost"/>
<flow-ref name="filteringSubFlow" />
<file:outbound-endpoint path="/tmp" />
</flow>
<sub-flow name="filteringSubFlow">
<expression-filter expression="0 == 1">
</sub-flow>
Example 3, file NOT discarded
<flow name="flowWithFilter>
<http:inbound-endpoint address="http://localhost"/>
<flow-ref name="filteringSubFlow" />
<file:outbound-endpoint path="/tmp" />
</flow>
<sub-flow name="filteringSubFlow">
<expression-filter expression="0 == 1">
</sub-flow>
Request-Response Inbound Endpoint with One-Way Outbound Endpoints.
In Mule ESB 3.3, you can add a one-way outbound endpoint to the middle or to the end of flow that begins with a request-response inbound endpoint and expect that it will behave dependably and consistently in both places.
In previous 3.x versions of Mule ESB, the behavior of a one-way outbound endpoint differed depending on where you placed it in a flow. In Mule ESB 3.3, the behavior of a one-way outbound endpoint has been made consistent so that it will never return a null
value to the caller.
In Mule ESB 3.3, a flow such as the one illustrated in Example 1, below, sends a request message
response rather than null
response to the caller. This “never null” behavior remains unchanged in flows, such as Example 2, which contain a one-way outbound endpoint in the middle of a flow. Regardless of where you place it in a flow that begins with a request-response inbound endpoint, a one-way outbound endpoint will never return a response of null
in Mule ESB 3.3.
Example 1
<flow name="flowWithFilter>
<http:inbound-endpoint address="http://localhost" exchange-pattern="request-response/>
<file:outbound-endpoint path="/tmp" exchange-pattern="one-way"/>
</flow>
Example 2
<flow name="flowWithFilter>
<http:inbound-endpoint address="http://localhost" exchange-pattern="request-response/>
<file:outbound-endpoint path="/tmp" exchange-pattern="one-way"/>
<file:outbound-endpoint path="/other" exchange-pattern="one-way"/>
<logger/>
</flow>
If you do not wish to enforce this endpoint behavior in your application — if the behavior is not compatible with the way your application is configured, for example — you can disable the behavior in Mule ESB 3.3 by adding the following code snippet to the Mule configuration of your application:
<configuration flowEndingWithOneWayEndpointReturnsNull="true" />
Alternatively, you can modify your application to prevent Mule ESB 3.3 from applying this new endpoint behavior. You can complete the modification in one of two ways:
-
Change the exchange pattern of the inbound endpoint in your flow from request-response to one-way. This ensures that Mule does not return a response to the caller. (Exception: a one-way inbound HTTP endpoint returns an empty response to the caller with status code “OK”.)
-
Insert a transformer into your flow to explicitly define the message’s response payload type. Insert the transformer in one of two places in your flow:
-
immediately after the one-way outbound endpoint
-
inside the response block (in the Mule XML config) of the inbound endpoint
-
Message Enricher
Mule ESB 3.3 has corrected the behavior of the Message Enricher so that it does not propagate session variable changes to the main flow. Mule now isolates the Message Enricher’s processing flow from the main flow in which it resides. In other words, any changes that Mule makes to a message’s session variables while it is within the scope of a Message Enricher are not carried with the message when it re-enters the main flow.
If you do not wish to enforce this new Message Enricher behavior on your application — if the behavior is not compatible with the way your application is configured, for example — you can disable the behavior in Mule ESB 3.3 by adding the following code snippet to your application:
<configuration enricherPropagatesSessionVariableChanges="true" />
Alternatively, you can modify your application to prevent Mule ESB 3.3 from applying this new Message Enricher behavior. To ensure that all changes a Message Enricher makes to session variables are propagated to the main flow, add one child <enrich>
element to each session variable that the Message Enricher touches (i.e. adds or modifies). Refer to the following example of such a modification.
<enricher>
<flow-ref name="otherFlow"/>
<enrich source="#[sessionVars['newSessionVar']]" target="#[sessionVars['newSessionVar']]" />
<enrich source="#[sessionVars['modifiedSessionVar']]" target="#[sessionVars['modifiedSessionVar']]" />
</enricher>
Error handling
Mule ESB 3.3 offers improvements to error handling through the use of exception strategies. When a message being processed through a Mule flow throws an exception, normal flow execution stops and processes transfers to the message processor sequence within the exception strategy. You can incorporate any number of message processors – and in one case, other exception strategies – into an exception strategy to handle exceptions precisely as you wish.
Further, Mule ESB 3.3 improves the way private flows handle errors. In Mule ESB 3.x, if a private flow encounters an error and throws an exception, it invokes its own exception strategy, produces an exception strategy result message of NullPayload
, and allows Mule to continue processing the message in the parent flow.
In Mule ESB 3.3, the parent flow’s exception strategy — default, catch, rollback, choice or ref — handles all exceptions thrown within a private flow.
If you do not wish to enforce this new error handling behavior for private flows on your application — if the behavior is not compatible with the way your private flow is configured, for example — you can disable the behavior in Mule ESB 3.3 by wrapping the private flow with another private flow in which you have configured a catch exception strategy.
<flow name="parentFlow">
<flow-ref name="privateFlowProxy"/>
<logger/>
<default-exception-strategy/>
</flow>
<flow name="privateFlowProxy">
<flow-ref name="privateFlow"/>
<catch-exception-strategy/>
</flow>
<flow name="privateFlow">
<test:component throwException="true"/>
<default-exception-strategy/>
</flow>
Refer to Error Handling documentation to learn more about Mule ESB 3.3’s exception strategies.
Web Services
The following subsections outline changes and improvements Mule ESB 3.3 applies to applications that involve Web services.
CXF Version Upgrade
Mule ESB leverages Apache’s CXF framework for building and configuring Web services. Recently, Apache has upgraded CXF to version 2.5.1 which fixes numerous bugs and provides greater stability. Apache has also upgraded their WSS4J product (a security standards implementation for Web services) from 1.5.8 to 1.6.1. Mule ESB 3.3 supports the latest versions of both CXF and WSS4J.
Error Handling in CXF
Mule ESB 3.3 offers the following improvements to the way it handles errors that occur in flows that involve CXF Web services.
-
When a message throws an exception in a flow with a CXF Web service, Mule invokes the exception strategy you have defined for that flow. Depending upon the type of exception strategy you have defined, and whether the CXF Web service is publishing, consuming or proxying information, Mule either:
-
Returns a SOAP Fault message to the caller
-
Propagates the original cause of the error in the flow
-
-
When Mule returns a SOAP fault to a caller, it sets the HTTP status code to 500 “Internal Server Error”.
-
CXF propagates the correct exception whenever an exception occurs.
-
Mule ESB3.3 has removed the
onException
attribute from the CXF inbound message processors. (Previously, Mule ESB 3.x usedonException
as a workaround in order to be able to return a SOAP fault to a caller or invoke and exception strategy.)
Refer to CXF Error Handling for more detailed information regarding Web services and error handling.
WS-Security
Enterprise Edition
In Mule ESB 3.3, you can implement application-layer security by enabling WS-security (a CXF configuration) on your Web service. WS-security defines a new SOAP header which is capable of carrying various security tokens that systems use to identify a Web service caller’s identity and privileges. Refer to the Enabling WS-Security for detailed instructions on how to enable it on your Web service.
Working in Studio, you can add key-value pairs to a SOAP component in order to create a map of key-value pairs that correspond to the CXF WSS4J security-configuration text strings in WSHandlerConstants and WSConstants. In XML, you add a key-value pair inside the ws-config child element of a ws-security element.
Further, you can add custom Token Validators to authenticate the message credentials your Web service transmits or receives. You can customize a token validator by referencing an existing bean which applies, replaces, or extends the default behavior associated with a specific security token.
<cxf:ws-security>
<cxf:ws-config>
<cxf:property key="action" value="UsernameToken"/>
...
</cxf:ws-config>
<cxf:ws-custom-validator>
<cxf:username-token-validator ref="validatorRef"/>
</cxf:ws-custom-validator>
</cxf:ws-security>
Mule Security Manager
Because the newest version of Apache’s WSS4J has changed the way it processes UserNameTokens — and because Mule supports the newest version of WSS4J — Mule ESB 3.3 introduces a new way to configure the Mule Security Manager to integrate with CXF.
To configure the Mule Security Manager in CXF in Mule ESB 3.2, you add the security manager callback as a password callback in the WSS4J map configuration, and CXF injects WSS4J configuration into the WSS4J interceptor. However, in the latest version of WSS4J, the callback handlers no longer perform validation activities; instead, they merely set the password on the callback. In other words, the authentication and validation tasks have been stripped from the WSS4J processors and transferred to token validators. This WSS4J change precipitated the modified way in which Mule ESB 3.3 configures the Mule Security Manager to work with CXF.
Mule ESB 3.2 Mule Security Manager Integration
<spring:bean name="wss4jInConfiguration"
class="org.springframework.beans.factory.config.MapFactoryBean">
<spring:property name="sourceMap">
<spring:map>
<spring:entry key="action" value="UsernameToken" />
<spring:entry key="passwordCallbackRef">
<cxf:security-manager-callback id="serverCallback"/>
</spring:entry>
</spring:map>
</spring:property>
</spring:bean>
Mule ESB 3.3’s new method of configuring the Mule Security Manager may, therefore, be incompatible with your existing Mule ESB 3.x applications. To ensure that your Mule ESB 3.x application functions properly in Mule ESB 3.3, add a <cxf:mule-security-manager>
child element within the <cxf:ws-security>
element of your Web service flow.
Mule ESB 3.3 Mule Security Manager Integration
<cxf:jaxws-service>
<cxf:ws-security>
<cxf:mule-security-manager/>
<cxf:ws-config>
<cxf:property key="action" value="UsernameToken" />
</cxf:ws-config>
</cxf:ws-security>
</cxf:jaxws-service>
JiBX Databinding
Within the context of the CXF framework, data binding is the action of mapping data from XML documents to Java objects. In addition to aegis, jaxb and custom databinding, Mule ESB 3.3 introduces the ability to apply JiBX databinding to your Web service.
API Changes
View the changes introduced by the Mule ESB 3.3 API
Affected | Change | After Migrating to 3.3 |
---|---|---|
org.mule.module.cxf.support.MuleSecurityManagerCallback Handler |
Removed |
Use org.mule.module.cxf.support.MuleSecurityManagerValidator |
org.mule.api.MuleSession.setProperty(String, Object) |
Deprecated |
Use org.mule.api.MuleSession.setProperty(String, Serializable) |
org.mule.api.MuleSession.getProperty(Object) |
Deprecated |
Use org.mule.api.MuleSession.getProperty(String) |
org.mule.api.MuleSession.removeProperty(Object) |
Deprecated |
Use org.mule.api.MuleSession.removeProperty(String) |
org.mule.expression.MuleExpressionEvaluator |
Deprecated |
Use the default expression evaluators. Consult the expressions configuration reference for more information. |
org.mule.module.cxf.CxfComponentExceptionStrategy |
Deprecated |
Mule ESB 3.3 introduced improved error handling, therefore, the CXF custom exception strategy no longer adds value. |
org.mule.module.cxf.component.WebServiceWrapper Component |
Deprecated |
Mule ESB 3.3 enables you to send the result of a web service call to another endpoint using a flow. |
Changes to org.mule.session.DefaultMuleSession/org.mule.DefaultMuleEvent Constructors in Mule ESB 3.3
Affected | Change | Migration |
---|---|---|
DefaultMuleSession(MuleContext) |
Deprecated |
Use DefaultMuleSession() instead |
DefaultMuleSession(FlowConstruct, MuleContext) |
Deprecated |
Use DefaultMuleSession() instead |
DefaultMuleSession(MuleSession, MuleContext) |
Deprecated |
Use DefaultMuleSession(MuleSession session) |
DefaultMuleSession(MuleSession, FlowConstruct) |
Deprecated |
Use DefaultMuleSession(MuleSession session) |
DefaultMuleSession(MuleMessage, SessionHandler, FlowConstruct, MuleContext) |
Removed |
. |
DefaultMuleSession(MuleMessage, SessionHandler, MuleContext) |
Removed |
. |
DefaultMuleEvent constructors replaced by FlowConstruct parameters in Mule ESB 3.3
-
DefaultMuleEvent(MuleMessage message, MessageExchangePattern exchangePattern, MuleSession session)
-
DefaultMuleEvent(MuleMessage message, MessageExchangePattern exchangePattern, MuleSession session, ResponseOutputStream outputStream)
-
DefaultMuleEvent(MuleMessage message, MessageExchangePattern exchangePattern, MuleSession session, int timeout, Credentials credentials, ResponseOutputStream outputStream)
-
DefaultMuleEvent(MuleMessage message, URI messageSourceURI, MessageExchangePattern exchangePattern, MuleSession session)
-
DefaultMuleEvent(MuleMessage message, URI messageSourceURI, MessageExchangePattern exchangePattern, MuleSession session, ResponseOutputStream outputStream)
-
DefaultMuleEvent(MuleMessage message, URI messageSourceURI, MessageExchangePattern exchangePattern, MuleSession session, int timeout, Credentials credentials, ResponseOutputStream outputStream)
-
DefaultMuleEvent(MuleMessage message, InboundEndpoint endpoint, MuleSession session)
-
DefaultMuleEvent(MuleMessage message, InboundEndpoint endpoint, MuleSession session, ReplyToHandler replyToHandler, ResponseOutputStream outputStream)
-
DefaultMuleEvent(MuleMessage message, URI messageSourceURI, String messageSourceName, MessageExchangePattern exchangePattern, MuleSession session, int timeout, Credentials credentials, ResponseOutputStream outputStream, String encoding, boolean transacted, boolean synchronous, Object replyToDestination, ReplyToHandler replyToHandler)
Support Resources
Please refer to the following resources for assistance using Mule ESB 3.3.
Documentation
Refer to MuleSoft’s online documentation at MuleSoft Docs for instructions on how to use the new features and improved functionality in Mule ESB 3.3.
Getting Help
Access MuleSoft’s Forum to pose questions and get help from Mule’s broad community of users.
Enterprise Edition To access MuleSoft’s expert support team, subscribe to Mule ESB Enterprise Edition and log in to MuleSoft’s Customer Portal.