public class RequestMultiPartConverter implements IProtocolConverter<Message, OperatorMessage> { private final MultipartMessageParameterFactory multipartMessageParameterFactory; public RequestMultiPartConverter() { multipartMessageParameterFactory = new MultipartMessageParameterFactory(); } @Override public CompositeMessage<Message, OperatorMessage> convert(CompositeMessage<Message, OperatorMessage> compositeMessage) throws ProtocolConversionException { Message message = compositeMessage.getMessage(); OperatorMessage operatorMessage = compositeMessage.getPayload(); //Do some other protocol conversion operations ... setMultipartParameters(operatorMessage, message.getMessagePartInfo()); return MessageFactory.fromMessage(message).withPayload(operatorMessage).build(); } private void setMultipartParameters(OperatorMessage operatorMessage, String messagepartInfo) throws ProtocolConversionException { if (StringUtils.isNotBlank(messagepartInfo)) { Map<String, Short> parameters = multipartMessageParameterFactory.createFrom(messagepartInfo); if (!parameters.isEmpty()) { operatorMessage.setMessageReferenceNumber(parameters.get(Parameters.MESSAGE_REFERENCE_NUMBER)); try { operatorMessage.setSegmentSeqnum(parameters.get(Parameters.SEGMENT_SEQUENCE_NUMBER)); } catch (IntegerOutOfRangeException ioore) { throw new ProtocolConversionException("UDH segment sequence number out of range", ioore); } try { operatorMessage.setTotalSegments(parameters.get(Parameters.TOTAL_SEQUENCE_NUMBER)); } catch (IntegerOutOfRangeException ioore) { throw new ProtocolConversionException("MessagePart total sequence number out of range", ioore); } } } } public static class Parameters { public static final String SEGMENT_SEQUENCE_NUMBER = "SegmentSeqNumber"; public static final String TOTAL_SEQUENCE_NUMBER = "TotalSeqNumber"; public static final String MESSAGE_REFERENCE_NUMBER = "MessageReferenceNumber"; private Parameters() {// Static use only } } }