[ 
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&region=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&region=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&region=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)

Reply via email to