You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Claus Ibsen (Jira)" <ji...@apache.org> on 2026/09/16 12:31:00 UTC

[jira] [Commented] (CAMEL-24775) camel-core - BeanFactoryDefinition.type is required in the schemas but optional at runtime for scripted and builder beans

    [ https://issues.apache.org/jira/browse/CAMEL-24775?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18116016#comment-18116016 ] 

Claus Ibsen commented on CAMEL-24775:
-------------------------------------

PR: https://github.com/apache/camel/pull/26513

One more enforcement point than listed above: the YAML {{BeansDeserializer}} had its own {{notNull(type)}} check, so the YAML runtime loader rejected a scripted {{beans:}} entry without type as well (the route template path did not). Relaxed in the same way.

_Claude Code on behalf of davsclaus_

> 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-core, camel-xml-io, camel-yaml-dsl
>            Reporter: Claus Ibsen
>            Assignee: Claus Ibsen
>            Priority: Major
>
> 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)