pentaho/pentaho-kettle · error · KettleException
Request could not be processed
Error message
Request could not be processed
What it means
Rest.getResponse catches any Exception thrown while executing the JAX-RS request (after method dispatch) and rethrows it as a KettleException with the literal message 'Request could not be processed', preserving the cause. It means request execution itself failed — not an HTTP error status from the server, but a client-side processing failure.
Solutions
- Inspect the cause exception for the real problem (SocketTimeoutException, SSLHandshakeException, ProcessingException, etc.)
- Increase the connection/read timeout if the cause is a timeout
- Fix the trust store or enable the 'ignore SSL' option for certificate issues
- Verify the body/content-type combination is valid for the chosen method
- Check network connectivity and proxy configuration on the host running the transformation
Example fix
// before
response = invocationBuilder.post( getEntity( contentType, entityString ) );
// after
Entity<?> entity = getEntity( contentType, entityString );
if ( entity == null && ( entityString != null && !entityString.isEmpty() ) ) {
throw new KettleException( "Cannot build entity for content type " + contentType );
}
response = invocationBuilder.post( entity ); Defensive patterns
Strategy: try-catch
Validate before calling
// sanity-check inputs before invoking the request
if ( entityString != null && contentType == null ) {
throw new KettleException( "Body provided without a content type" );
}
if ( data.realUrl == null || data.realUrl.isEmpty() ) {
throw new KettleException( "Request URL is empty" );
} Try / catch
try {
Response r = step.getResponse( target, row, contentType, entity );
} catch ( KettleException e ) {
if ( "Request could not be processed".equals( e.getMessage() ) ) {
Throwable cause = e.getCause();
if ( cause instanceof java.net.SocketTimeoutException ) { /* retry with longer timeout */ }
else if ( cause instanceof javax.net.ssl.SSLHandshakeException ) { /* fix trust store / ignore SSL */ }
log.error( "REST request execution failed", e );
}
} Prevention
- Always inspect the wrapped cause — the message is generic by design
- Set generous connection/read timeouts in the step configuration
- Fix SSL trust store settings or enable 'ignore SSL' for self-signed certs in test environments
- Ensure body/content-type combos match the HTTP method semantics
When it happens
Trigger: Exceptions from invocationBuilder.put/post/delete/head/options/method calls: connection I/O errors, SSL handshake failures, timeouts, invalid entity/body for the content type, or client-state problems.
Common situations: Connection reset or timeout to a slow endpoint; SSL certificate not trusted (handshake failure during execution); sending an entity with GET/DELETE where the client rejects it; RESTEasy/Jersey runtime errors.
Understand the failure class
Background: 'Something went wrong' / 'Request failed (500)' / 'HTTP error! status: 404' — what failed HTTP requests actually mean and how to find the real cause — this error's family across 28 libraries.
Related errors
- HTTP.Error.UnknownHostException
- HTTP.Exception.IllegalStatusCode
- HTTP.Log.UnableGetResult
- HTTPPOST.Exception.IllegalStatusCode
- Rest.Error.CanNotReadURL
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/b308a5d81a3ac465.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/rest/core/src/main/java/org/pentaho/di/trans/steps/rest/Rest.java:285
* @throws KettleException in case the request could not be processed
*/
private Response getResponse( Invocation.Builder invocationBuilder, String contentType, String entityString )
throws KettleException {
Response response;
try {
switch ( data.method ) {
case RestMeta.HTTP_METHOD_GET -> response = invocationBuilder.get( Response.class );
case RestMeta.HTTP_METHOD_POST -> response = invocationBuilder.post( getEntity( contentType, entityString ) );
case RestMeta.HTTP_METHOD_PUT -> response = invocationBuilder.put( getEntity( contentType, entityString ) );
case RestMeta.HTTP_METHOD_DELETE -> response = invocationBuilder.delete();
case RestMeta.HTTP_METHOD_HEAD -> response = invocationBuilder.head();
case RestMeta.HTTP_METHOD_OPTIONS -> response = invocationBuilder.options();
case RestMeta.HTTP_METHOD_PATCH ->
response = invocationBuilder.method( RestMeta.HTTP_METHOD_PATCH, getEntity( contentType, entityString ) );
default -> throw new KettleException( BaseMessages.getString( PKG, "Rest.Error.UnknownMethod", data.method ) );
}
} catch ( Exception e ) {
throw new KettleException( "Request could not be processed", e );
}
return response;
}
/**
* Get entity for request using the given content type or the default one
*
* @param contentType the content type
* @param entityString the entity string
* @return the request entity built using the given content type or the default media type
*/
private Entity<?> getEntity( String contentType, String entityString ) {
Entity<?> entity;
if ( null != contentType ) {
entity = Entity.entity( entityString, contentType );
} else {
entity = Entity.entity( entityString, data.mediaType );View on GitHub (pinned to f3058517a1)