Protocol Tables
In addition, since TCP and SSL are stream-oriented and Mule is message-oriented, some application protocol is needed to to define where each message begins and ends within the stream. The table below lists the built-in protocols, describing:
-
The XML tag used to specify them
-
Any XML attributes
-
How it defines a message when reading
-
Any processing it does while writing a message
XML tag | Options | Read | Write | Notes |
---|---|---|---|---|
<tcp:custom-class-loading-protocol> |
rethrowExceptionOnRead, payloadOnly , maxMessageLength, classLoader-ref |
Expects the message to begin with a 4-byte length (in DataOutput.writeInt() format) |
Precedes the message with a 4-byte length (in DataOutput.writeInt() format) |
Like the length protocol, but specifies a classloader used to deserialize objects |
<tcp:custom-protocol> |
rethrowExceptionOnRead, class, ref |
varies |
varies |
Allows user-written protocols, for instance, to match existing TCP services. |
<tcp:direct-protocol> |
rethrowExceptionOnRead, payloadOnly |
All currently available bytes |
none |
There are no explicit message boundaries. |
<tcp:eof-protocol> |
rethrowExceptionOnRead, payloadOnly |
All bytes sent until the socket is closed |
none |
|
<tcp:length-protocol> |
rethrowExceptionOnRead, payloadOnly , maxMessageLength |
Expects the message to begin with a 4-byte length (in DataOutput.writeInt() format) |
Precedes the message with a 4-byte length (in DataOutput.writeInt() format) |
|
<tcp:safe-protocol |
rethrowExceptionOnRead, payloadOnly , maxMessageLength Expects the message to begin with the string "You are using SafeProtocol" followed by a 4-byte length (in DataOutput.writeInt() format) |
Expects the message to be preceded by the string "You are using SafeProtocol" followed by a 4-byte length (in DataOutput.writeInt() format) |
Precedes the message with the string "You are using SafeProtocol" followed by a 4-byte length (in DataOutput.writeInt() format) |
Somewhat safer than the length protocol because of the extra check. This is the default if no protocol is specified. |
<tcp:streaming-protocol |
rethrowExceptionOnRead |
All bytes sent until the socket is closed |
none |
|
<tcp:xml-protocol> |
rethrowExceptionOnRead |
A message is an XML document that begins with an XML declaration |
none |
The XML declaration must occur in all messages |
<tcp:xml-eof-protocol> |
rethrowExceptionOnRead |
A message is an XML document that begins with an XML declaration, or whatever remains at EOF |
none |
The XML declaration must occur in all messages |
Protocol attributes:
name | values | default value | notes |
---|---|---|---|
class |
The name of the class that implements the custom protocol |
See below for an example of writing a custom protocol |
|
classLoader-ref |
A reference to a Spring bean that contains the custom classloader |
||
maxMessageLength |
the maximum message length allowed |
0 (no maximum ) |
A message longer than the maximum causes an exception to be thrown. |
payloadOnly |
true |
If true, only the Mule message payload is sent or received. If false, the entire Mule message is sent or received. |
Protocols that don’t support this attribute always process payloads |
ref |
A reference to a Spring bean that implements the custom protocol |
||
rethrowExceptionOnRead |
Whether to rethrow exception that occur trying to read from the socket |
false |
Setting this to "false" avoids logging stack traces when the remote socket is closed unexpectedly |