Claus Ibsen created CAMEL-24775:
-----------------------------------
Summary: camel-core - BeanFactoryDefinition.type is required in
the schemas but optional at runtime for scripted and builder beans
Key: CAMEL-24775
URL: https://issues.apache.org/jira/browse/CAMEL-24775
Project: Camel
Issue Type: Bug
Components: camel-xml-io, camel-yaml-dsl, camel-core
Reporter: Claus Ibsen
Assignee: Claus Ibsen
Found while checking the documentation examples (CAMEL-24773): the three
{{<templateBean scriptLanguage="groovy">}} blocks of
route-template-bean-binding.adoc have no {{type}}, which {{camel-spring.xsd}}
rejects, while the runtime and the Java DSL do not need
it.{{BeanFactoryDefinition.type}} is {{@XmlAttribute(required = true)}} since
CAMEL-17611 (2022), when {{type}} was the kind discriminator ({{#class}},
{{#type}}, {{bean}}, {{groovy}}, {{joor}}...). CAMEL-19953 (2023) moved the
kind to {{scriptLanguage}} and redefined {{type}} as the class name, but the
{{required}} stayed. For a bean created by a script the class is genuinely
optional:* {{BeanModelHelper.bind()}} (route template and kamelet local beans)
falls back to {{Object.class}} when {{type}} is null* the Java DSL
{{templateBean(name, language, script)}} sets no type at all
(KameletLocalBeanGroovyTest, KameletEipAggregateGroovyTest...)*
{{BeanModelHelper.newInstance()}} ({{<beans><bean>}}) fails with a
NullPointerException at {{type.startsWith("#")}} before it reaches the script
or builder branch, so there the type is required by accidentThe single
annotation fans out to four generated artifacts that disagree with the runtime:
{{camel-spring.xsd}} (Spring XML rejects a scripted bean without type),
{{camel-xml-io.xsd}} (the xml-io parser accepts it), {{camelYamlDsl.json}} (the
YAML validator, {{camel validate}}, the TUI and the MCP tools reject it; the
YAML runtime loader accepts it), and the catalog {{beanFactory.json}} (every
doc table says required).Fix: drop {{required = true}} on {{type}} (keep it on
{{name}}), and make {{newInstance()}} match the model: {{Object.class}}
fallback for the script path as in {{bind()}}, null-safe builder path, and a
clear IllegalArgumentException for a class or factory bean without a type
instead of the NPE. Update the description of {{type}}, regenerate the model
JSON, both XSDs, the YAML schema and the catalog, add tests for a scripted bean
without type in xml-io, YAML (loader and validator) and Spring XML, and note
the schema relaxation in the 4.23 upgrade guide._Claude Code on behalf of
davsclaus_
--
This message was sent by Atlassian Jira
(v8.20.10#820010)