Class BytesOutputPipe

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

    @ElementType(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 zero's 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 Detail

      • BytesOutputPipe

        public BytesOutputPipe()
    • Method Detail

      • 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