pentaho/pentaho-kettle · error · KettleValueException

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

Error message

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

What it means

Values declared TYPE_SERIALIZABLE hold arbitrary Java Serializable objects, and getInternetAddress() cannot know how to turn one into an InetAddress, so it throws this KettleValueException explicitly. Only string/number/integer/bignumber/InetAddress-typed data are convertible.

Solutions

  1. Correct the downstream value meta type; it should be TYPE_INET, not TYPE_SERIALIZABLE
  2. Extract the address into a String field upstream before the Internet Address metadata expects it
  3. Check stream alignment (getFields()/row metadata) to prevent serializable columns from being typed as addresses
  4. If the serializable object wraps an InetAddress, unwrap it upstream and store as TYPE_INET

Example fix

// before
InetAddress addr = meta.getInternetAddress(serializableObject); // throws
// after
if (serializableObject instanceof InetAddress) {
  InetAddress addr = (InetAddress) serializableObject;
} else {
  throw new KettleException("Field is not an InetAddress: " + serializableObject.getClass());
}
Defensive patterns

Strategy: type-guard

Validate before calling

if (meta.getType() == ValueMetaInterface.TYPE_SERIALIZABLE) {
  throw new KettleException("Field " + meta.getName() + " holds a serializable object; convert to String/INET first");
}

Type guard

if (object instanceof InetAddress) { InetAddress addr = (InetAddress) object; }

Try / catch

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

Prevention

When it happens

Trigger: getInternetAddress(), getString(), inetAddress(), or getNativeDataType() invoked on a ValueMetaInternetAddress whose type is TYPE_SERIALIZABLE, commonly when passing through serializable pass-through fields (e.g. Kettle 'Serializable' columns) into an address-typed metadata.

Common situations: Row fields carrying user-defined objects through transforms where downstream metadata was wrongly declared as Internet Address; merging streams where one side has a serializable object column aligned by position with an address column.

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/355a252c81e728ae. Report an issue: GitHub.

Appendix: source

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

      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 {
    InetAddress address = getInternetAddress( object );
    if ( address == null ) {
      return null;

View on GitHub (pinned to f3058517a1)