public static String readFieldValue(final String twoInput,
            final String cardSchemeType, final String fieldPath)
            throws ISOException, UnsupportedEncodingException {
        // guardclause
        if (!MsgUtils.isFieldPath(fieldPath)) {
            throw new IllegalArgumentException("invalid FieldPath");
        }
        if (twoInput == null || twoInput.length() < MIN_TWO_INPUT_LENGTH) {
            throw new IllegalArgumentException("TwoInput to short");
        }
        try {

            ISOMsg isoMsg = new ISOMsg();

            injectPacker(twoInput, cardSchemeType, isoMsg);
            injectDataToUnpack(twoInput, cardSchemeType, isoMsg);

            // logging
            if (logger.isTraceEnabled()) {
                isoMsg.dump(MsgUtils.createLoggingProxy(), "");
            }
            logger.debug( MsgUtils.getISOMsgPlainText(isoMsg));
            // MsgUtils.logISOMsgPlainText(isoMsg);

            if (isoMsg.getValue(fieldPath) instanceof byte[]) {
                return Hex.encodeHexString(
                        (byte[]) isoMsg.getComponent(fieldPath).getValue())
                        .toString();
            } else {
                return isoMsg.getString(fieldPath);
            }
        } catch (UnsupportedEncodingException e) {
            logger.error("UnsupportedEncodingException error in ", e);
        }
        return null;

    }