pentaho/pentaho-kettle · error · KettleValueException

: I don't know how to convert a binary value to Internet…

Error message

 : I don't know how to convert a binary value to Internet address.

What it means

There is no defined conversion from raw binary (byte[]) TYPE_BINARY data to an InetAddress in getInternetAddress(). TYPE_BINARY storage means opaque byte payloads, and this value meta refuses to interpret them as an address, throwing this KettleValueException.

Solutions

  1. Change the value meta type from TYPE_BINARY to TYPE_INET (or TYPE_STRING) so the conversion path exists
  2. Decode the bytes to a string first and convert via convertStringToInternetAddress semantics
  3. Verify upstream field metadata matches the expected Internet Address type
  4. Do not confuse binary-string storage with the TYPE_BINARY value type when configuring metadata

Example fix

// before
ValueMetaInterface meta = new ValueMetaInternetAddress("ip", ValueMetaInterface.TYPE_BINARY);
// after
ValueMetaInterface meta = new ValueMetaInternetAddress("ip", ValueMetaInterface.TYPE_INET);
Defensive patterns

Strategy: validation

Validate before calling

if (meta.getType() == ValueMetaInterface.TYPE_BINARY) {
  throw new KettleException("Field " + meta.getName() + " is binary; expected Internet address-compatible type");
}

Type guard

boolean ok = meta.getType() != ValueMetaInterface.TYPE_BINARY
    && meta.getType() != ValueMetaInterface.TYPE_SERIALIZABLE
    && meta.getType() != ValueMetaInterface.TYPE_BOOLEAN;

Try / catch

try {
  InetAddress addr = meta.getInternetAddress(object);
} catch (KettleValueException e) {
  if (e.getMessage().contains("binary value to Internet address")) { /* retype field upstream */ }
  throw e;
}

Prevention

When it happens

Trigger: Calling getInternetAddress()/getString()/inetAddress()/getNativeDataType() on a ValueMetaInternetAddress whose type is TYPE_BINARY, e.g. when a column that previously held address strings was re-typed as binary.

Common situations: Binary stream fields (files, blobs) accidentally connected to an Internet Address-typed field; a change of upstream field type without updating downstream row metadata; users confusing STORAGE_TYPE_BINARY_STRING (supported) with value TYPE_BINARY (not supported).

Understand the failure class

Background: "is not a compatible type" / "cannot merge" errors: when a value's type doesn't match what the library requires — this error's family across 65 libraries.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/f0b8cc91a52ded12. Report an issue: GitHub.

Appendix: source

Thrown at core/src/main/java/org/pentaho/di/core/row/value/ValueMetaInternetAddress.java:136

          default:
            throw new KettleValueException( toString() + " : Unknown storage type " + storageType + " specified." );
        }
      case TYPE_BIGNUMBER:
        switch ( storageType ) {
          case STORAGE_TYPE_NORMAL:
            return convertBigNumberToInternetAddress( (BigDecimal) object );
          case STORAGE_TYPE_BINARY_STRING:
            return convertBigNumberToInternetAddress( (BigDecimal) convertBinaryStringToNativeType( (byte[]) object ) );
          case STORAGE_TYPE_INDEXED:
            return convertBigNumberToInternetAddress( (BigDecimal) index[( (Integer) object ).intValue()] );
          default:
            throw new KettleValueException( toString() + " : Unknown storage type " + storageType + " specified." );
        }
      case TYPE_BOOLEAN:
        throw new KettleValueException( toString()
          + " : I don't know how to convert a boolean to a Internet address." );
      case TYPE_BINARY:
        throw new KettleValueException( toString()
          + " : I don't know how to convert a binary value to Internet address." );
      case TYPE_SERIALIZABLE:
        throw new KettleValueException( toString()
          + " : I don't know how to convert a serializable value to Internet address." );

      default:
        throw new KettleValueException( toString() + " : Unknown type " + type + " specified." );
    }
  }

  @Override
  public Date getDate( Object object ) throws KettleValueException {
    throw new KettleValueException( toStringMeta()
      + ": it's not possible to convert from Internet Address to a date" );
  }

  @Override
  public Long getInteger( Object object ) throws KettleValueException {

View on GitHub (pinned to f3058517a1)