Class BytesOutputPipe

All Implemented Interfaces:
HasTransactionAttribute, IConfigurable, IConfigurationAware, IForwardTarget, INamedObject, IPipe, IScopeProvider, IWithParameters, EventThrowing, HasStatistics, org.springframework.beans.factory.Aware, org.springframework.context.ApplicationContextAware

@EnterpriseIntegrationPattern(TRANSLATOR) public class BytesOutputPipe extends FixedForwardPipe
Output bytes as specified by the input XML. Actions are taken on every field tag found in the input XML. Every field tag should have a type attribute that specifies the type of conversion that needs to be done on the string specified by the value attribute. A value attribute also needs to be present for every field tag. Currently, two types of conversion are supported:
  • GetBytesFromString, a conversion from string to bytes as specified by java.lang.String.getBytes(String charsetName)
  • PackedDecimal, a conversion from string to Packed-decimal
An additional charset attribute is needed for a GetBytesFromString conversion. An input XML that would encode the string " TEST 1234 " into EBCDIC format would look like:
 <fields>
   <field type="GetBytesFromString" value=" TEST 1234 " charset="Cp037"/>
 </fields>
 
The Packed-decimal conversion has been implemented according to information found in the following resources: Some examples:
  • The string +12345 will be translated to three bytes with the following hexadecimal representation: 12 34 5C
  • The string -12345 will be translated to three bytes with the following hexadecimal representation: 12 34 5D
  • The string 12345 will be translated to three bytes with the following hexadecimal representation: 12 34 5F
  • The string 1234 will be translated to three bytes with the following hexadecimal representation: 01 23 4F
The Packed-decimal is prefixed with zeroes when the specified size is bigger than the number of decimals. An exception is thrown when the specified size is smaller than the number of decimals. An input XML that would generate a number of Packed-decimals could look like:
 <fields>
   <field type="PackedDecimal" value="+12345" size="16"/>
   <field type="PackedDecimal" value="+67890" size="16"/>
   <field type="PackedDecimal" value="+1234" size="16"/>
   <field type="PackedDecimal" value="-12345" size="16"/>
   <field type="PackedDecimal" value="-67890" size="16"/>
   <field type="PackedDecimal" value="-1234" size="16"/>
   <field type="PackedDecimal" value="12345" size="16"/>
   <field type="PackedDecimal" value="67890" size="16"/>
   <field type="PackedDecimal" value="1234" size="16"/>
   <field type="PackedDecimal" value="+1" size="16"/>
   <field type="PackedDecimal" value="-1" size="16"/>
   <field type="PackedDecimal" value="+12" size="16"/>
   <field type="PackedDecimal" value="-12" size="16"/>
   <field type="PackedDecimal" value="+123" size="16"/>
   <field type="PackedDecimal" value="-123" size="16"/>
   <field type="PackedDecimal" value="+1234" size="16"/>
   <field type="PackedDecimal" value="-1234" size="16"/>
   <field type="PackedDecimal" value="+12345" size="16"/>
   <field type="PackedDecimal" value="-12345" size="16"/>
   <field type="PackedDecimal" value="+123456" size="16"/>
   <field type="PackedDecimal" value="-123456" size="16"/>
   <field type="PackedDecimal" value="+1234567" size="16"/>
   <field type="PackedDecimal" value="-1234567" size="16"/>
   <field type="PackedDecimal" value="+12345678" size="16"/>
   <field type="PackedDecimal" value="-12345678" size="16"/>
 </fields>
 
Since:
4.9
Author:
Jaco de Groot (***@dynasol.nl)
  • Constructor Details

    • BytesOutputPipe

      public BytesOutputPipe()
  • Method Details

    • doPipe

      public PipeRunResult doPipe(Message message, PipeLineSession session) throws PipeRunException
      Description copied from interface: IPipe
      This is where the action takes place. Pipes may only throw a PipeRunException, to be handled by the caller of this object. Implementations must either consume the message, or pass it on to the next Pipe in the PipeRunResult. If the result of the Pipe does not depend on the input, like for the FixedResultPipe, the Pipe can schedule the input to be closed at session exit, by calling Message.closeOnCloseOf(PipeLineSession, String) This allows the previous Pipe to release any resources (e.g. connections) that it might have kept open until the message was consumed. Doing so avoids connections leaking from pools, while it enables efficient streaming processing of data while it is being read from a stream.
      Throws:
      PipeRunException