tarilabs opened a new issue, #3986:
URL: https://github.com/apache/camel-k/issues/3986
Hi,
I have a Kamelet definition as:
```yaml
apiVersion: camel.apache.org/v1alpha1
kind: Kamelet
metadata:
name: kdtable
labels:
camel.apache.org/kamelet.type: "action"
spec:
definition:
title: "Kamelet decision table with YaRD"
description: |-
Experimental Kamelet processor supporting (only) YaRD's decision table.
required:
- kdtable
properties:
kdtable:
title: kdtable
description: the YaRD's decision table element
type: object
expressionLang:
title: expressionLang
description: can be blank
type: string
default: "null" # <--- unable to use `null` in this kamelet
definition
resultKey:
title: resultKey
description: can be blank
type: string
default: kdtable
dependencies:
- ...
template:
beans:
- name: mmbean
type: '#class:org.drools.yard.kdtable.KdtableProcessor'
properties:
kdtable: '{{kdtable}}'
expressionLang: '{{expressionLang}}'
resultKey: '{{resultKey}}'
from:
uri: "kamelet:source"
...
```
For the Processor, defined as a bean in the template on suggestion from
@lburgazzoli , `expressionLang` is optional.
However, despite it's not in the `spec.definition.required` of the Kamelet
definition as a required property, I still need to assign it a `default:
<something>` which cannot be null, empty, etc.
- I've tried `default: null` and the Integration _at runtime_ complain the
expressionLang property is not defined.
- I've tried `default: ""` same thing.
I think I was able to get it to be null by using in the _KameletBinding_
something ~like:
```yaml
ref:
kind: Kamelet
apiVersion: camel.apache.org/v1alpha1
name: kdtable
properties:
expressionLang: null
kdtable: ...
```
but this is not really what I want, I would like the user to ~"ignore"
expressionLang in the end-user definition, so that the processor can establish
some default when non-supplied.
So currently I have it as:
```yaml
expressionLang:
title: expressionLang
description: can be blank
type: string
default: "null" # unable to use `null` in this kamelet definition
```
and then in my Processor I have to:
```java
public class KdtableProcessor implements Processor {
private Object kdtable;
private String expressionLang;
private String resultKey = "kdtable";
public void setKdtable(Object kdtable) {
if (expressionLang != null && !expressionLang.isEmpty() &&
!expressionLang.equals("null")) {
yard.setExpressionLang(expressionLang);
} else {
yard.setExpressionLang(null);
}
// ...
```
which is very far from ideal, since I have to exclude the hard-coded
`"null"` string as a null-value semantic.
Q1. is it pragmatically possible to define a non-required property, given
the above report, please?
Q2. is it possible in a Processor to be notified _all the properties_ have
been set --not at `process(Exchange exchange)` runtime, I mean at Processor
instantiation for the bean/registry/context before the route building, please?
Thanks in advance 🙏
/cc @valdar @danielezonca
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]