[
https://issues.apache.org/jira/browse/CAMEL-23384?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Marco Carletti updated CAMEL-23384:
-----------------------------------
Description:
camel export crashes with "IllegalArgumentException: toType must be specified
and not empty" when exporting a route that references a kamelet containing a
transformDataType step (e.g. aws-ddb-sink).
During camel export, Run.java sets stubPattern="*" which stubs all
components/transformers. DependencyDownloaderTransformerResolver.resolve()
returns a new StubTransformer() without setting its name. When
DefaultTransformerRegistry.resolveTransformer() calls
TransformerKey.createFrom(answer), the stub has null name/from/to, so
createFrom() falls to new TransformerKey(answer.getName()) where getName() is
null, causing the crash.
Stack Trace
{code:java}
org.apache.camel.FailedToStartRouteException: Failed to start route:
aws-ddb-sink-1 (source: aws-ddb-sink.kamelet.yaml:142) because: toType must be
specified and not empty
Caused by: java.lang.IllegalArgumentException: toType must be specified and
not empty
at org.apache.camel.util.StringHelper.notEmpty(StringHelper.java:375)
at org.apache.camel.spi.TransformerKey.<init>(TransformerKey.java:33)
at org.apache.camel.spi.TransformerKey.createFrom(TransformerKey.java:67)
at
org.apache.camel.impl.engine.DefaultTransformerRegistry.resolveTransformer(DefaultTransformerRegistry.java:119)
at
org.apache.camel.processor.transformer.DataTypeProcessor.doInit(DataTypeProcessor.java:73)
{code}
Steps to Reproduce
1. Create a route file (`TimerWithBodyRouteBuilder.java`):
{code:java}
import org.apache.camel.builder.RouteBuilder;
public class TimerWithBodyRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {
from("timer:x?repeatCount=1")
.setBody(constant("{\"key\": {\"id\": {\"S\": \"1\"}}}"))
.to("kamelet:aws-ddb-sink?table=test®ion=us-east-1&accessKey=x&secretKey=x");
}
}{code}
2. Run camel export:
{code:java}
camel export --runtime=spring-boot --gav=com.test:test:1.0 --dir=target
TimerWithBodyRouteBuilder.java{code}
was:
camel export crashes with "IllegalArgumentException: toType must be specified
and not empty" when exporting a route that references a kamelet containing a
transformDataType step (e.g. aws-ddb-sink).
During camel export, Run.java sets stubPattern="*" which stubs all
components/transformers. DependencyDownloaderTransformerResolver.resolve()
returns a new StubTransformer() without setting its name. When
DefaultTransformerRegistry.resolveTransformer() calls
TransformerKey.createFrom(answer), the stub has null name/from/to, so
createFrom() falls to new TransformerKey(answer.getName()) where getName() is
null, causing the crash.
Stack Trace
org.apache.camel.FailedToStartRouteException: Failed to start route:
aws-ddb-sink-1 (source: aws-ddb-sink.kamelet.yaml:142) because: toType must be
specified and not empty
Caused by: java.lang.IllegalArgumentException: toType must be specified and
not empty
at org.apache.camel.util.StringHelper.notEmpty(StringHelper.java:375)
at org.apache.camel.spi.TransformerKey.<init>(TransformerKey.java:33)
at org.apache.camel.spi.TransformerKey.createFrom(TransformerKey.java:67)
at
org.apache.camel.impl.engine.DefaultTransformerRegistry.resolveTransformer(DefaultTransformerRegistry.java:119)
at
org.apache.camel.processor.transformer.DataTypeProcessor.doInit(DataTypeProcessor.java:73)
Steps to Reproduce
1. Create a route file (`TimerWithBodyRouteBuilder.java`):
```java
import org.apache.camel.builder.RouteBuilder;
public class TimerWithBodyRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {
from("timer:x?repeatCount=1")
.setBody(constant("\{\"key\": {\"id\": {\"S\": \"1\"}}}"))
.to("kamelet:aws-ddb-sink?table=test®ion=us-east-1&accessKey=x&secretKey=x");
}
}
```
2. Run camel export:
```
camel export --runtime=spring-boot --gav=com.test:test:1.0 --dir=target
TimerWithBodyRouteBuilder.java
```
> camel-kamelet-main: camel export fails with IllegalArgumentException on
> kamelets using transformDataType EIP
> -------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-23384
> URL: https://issues.apache.org/jira/browse/CAMEL-23384
> Project: Camel
> Issue Type: Bug
> Components: camel-kamelet-main
> Affects Versions: 4.18.2, 4.19.0
> Reporter: Marco Carletti
> Priority: Critical
>
> camel export crashes with "IllegalArgumentException: toType must be specified
> and not empty" when exporting a route that references a kamelet containing a
> transformDataType step (e.g. aws-ddb-sink).
>
> During camel export, Run.java sets stubPattern="*" which stubs all
> components/transformers. DependencyDownloaderTransformerResolver.resolve()
> returns a new StubTransformer() without setting its name. When
> DefaultTransformerRegistry.resolveTransformer() calls
> TransformerKey.createFrom(answer), the stub has null name/from/to, so
> createFrom() falls to new TransformerKey(answer.getName()) where getName() is
> null, causing the crash.
> Stack Trace
> {code:java}
> org.apache.camel.FailedToStartRouteException: Failed to start route:
> aws-ddb-sink-1 (source: aws-ddb-sink.kamelet.yaml:142) because: toType must
> be specified and not empty
>
> Caused by: java.lang.IllegalArgumentException: toType must be specified and
> not empty
> at org.apache.camel.util.StringHelper.notEmpty(StringHelper.java:375)
>
>
>
> at org.apache.camel.spi.TransformerKey.<init>(TransformerKey.java:33)
>
>
>
> at
> org.apache.camel.spi.TransformerKey.createFrom(TransformerKey.java:67)
>
>
> at
> org.apache.camel.impl.engine.DefaultTransformerRegistry.resolveTransformer(DefaultTransformerRegistry.java:119)
>
>
> at
> org.apache.camel.processor.transformer.DataTypeProcessor.doInit(DataTypeProcessor.java:73)
> {code}
>
>
> Steps to Reproduce
> 1. Create a route file (`TimerWithBodyRouteBuilder.java`):
> {code:java}
> import org.apache.camel.builder.RouteBuilder;
> public class TimerWithBodyRouteBuilder extends RouteBuilder {
> @Override
> public void configure() throws Exception {
> from("timer:x?repeatCount=1")
> .setBody(constant("{\"key\": {\"id\": {\"S\": \"1\"}}}"))
>
> .to("kamelet:aws-ddb-sink?table=test®ion=us-east-1&accessKey=x&secretKey=x");
> }
> }{code}
>
> 2. Run camel export:
> {code:java}
> camel export --runtime=spring-boot --gav=com.test:test:1.0 --dir=target
> TimerWithBodyRouteBuilder.java{code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)