Karol Krawczyk created CAMEL-24748:
--------------------------------------
Summary: Component metadata disagrees with what seven components
accept (operation enums, consumer/producer labels, options without @UriParam)
Key: CAMEL-24748
URL: https://issues.apache.org/jira/browse/CAMEL-24748
Project: Camel
Issue Type: Bug
Components: camel-web3j, camel-google-storage, camel-netty-http,
camel-grpc, camel-azure, camel-google, camel-jt400
Affects Versions: 4.22.0
Reporter: Karol Krawczyk
While fixing the YAML examples of the component documentation in CAMEL-24710
(PR https://github.com/apache/camel/pull/26397), 16 examples kept failing the
catalog checks although they are right for the runtime: the component metadata
says something the component does not do. [~davsclaus] asked for a ticket on
these in the review of that PR. The examples were left as they are.
*1. azure-storage-datalake: the operation enum lists 2 values, one of them does
not exist* (8 examples)
{{DataLakeConfiguration.java:106}} has {{@UriParam(label = "producer", enums =
"listFileSystem, listFiles", ...)}} on {{DataLakeOperationsDefinition
operation}}. The enum has 15 values ({{listFileSystem, createFileSystem,
deleteFileSystem, listPaths, getFile, downloadToFile, downloadLink, deleteFile,
appendToFile, flushToFile, uploadFromFile, upload, openQueryInputStream,
createFile, deleteDirectory}}) and no {{listFiles}}. The catalog therefore
rejects {{createFileSystem}}, {{deleteFile}}, {{uploadFromFile}} and the other
operations the page documents.
Likely fix: drop the {{enums}} attribute so the generator takes the Java enum,
or list its 15 values.
*2. google-secret-manager: the operation enum lists 1 of 4 values* (3 examples)
{{GoogleSecretManagerConfiguration.java:37-38}} has {{enums = "createSecret"}},
while {{GoogleSecretManagerOperations}} also has {{getSecretVersion}},
{{deleteSecret}} and {{listSecrets}}.
Likely fix: the same as above.
*3. google-storage: objectName is labelled producer, the consumer uses it* (1
example)
{{GoogleCloudStorageConfiguration.java:44}} has {{@UriParam(label =
"producer")}} on {{objectName}}. {{GoogleCloudStorageConsumer.poll}} reads it
({{GoogleCloudStorageConsumer.java:87}}) to fetch a single object, and the
producer reads it too ({{GoogleCloudStorageProducer.java:380}}).
Likely fix: {{label = "common"}}.
*4. web3j: operation is labelled producer, the consumer uses it* (1 example)
{{Web3jConfiguration.java:30}} has {{@UriParam(label = "producer")}} on
{{operation}}. {{Web3jConsumer.doStart}} switches on it to choose the
subscription ({{Web3jConsumer.java:61}}), and the producer uses it as the
default operation ({{Web3jProducer.java:100}}).
Likely fix: {{label = "common"}}.
*5. grpc: forwardOnError and forwardOnCompleted are labelled consumer, the
producer uses them* (2 examples)
{{GrpcConfiguration.java:103-107}} label both options {{consumer}}. The
consumer uses them ({{GrpcConsumer.java:186,194}}), and so does the producer
when it streams replies to a route with {{streamRepliesTo}}
({{GrpcResponseRouterStreamObserver.java:63,75}}, created by
{{GrpcStreamObserverFactory}}). The component page shows them on a {{to}}.
Likely fix: {{label = "common"}}.
*6. netty-http: bootstrapConfiguration is not in the metadata* (1 example)
{{NettyHttpComponent.java:103-104}} takes {{bootstrapConfiguration}} out of the
endpoint parameters ({{resolveAndRemoveReferenceParameter}}) and binds its
properties onto the configuration, and the page documents it
({{netty-http-component.adoc}}, "bootstrapConfiguration" section).
{{netty-http.json}} has no such option, so the catalog calls it unknown.
Likely fix: declare it as an endpoint option, for example a {{@UriParam}} of
type {{NettyServerBootstrapConfiguration}} on the endpoint or configuration, so
it shows in the metadata.
*7. jt400: the documented output options have no @UriParam, the ones in the
metadata cannot be set in a URI*
The page and the tests set {{fieldsLength}} and {{outputFieldsIdx}} as
comma-separated strings (for example {{Jt400PgmEndpointTest.java:40}}:
{{outputFieldsIdx=1,2&fieldsLength=10,512,255}}). They reach
{{Jt400Configuration.setOutputFieldsIdx(String)}} and
{{setFieldsLength(String)}} ({{Jt400Configuration.java:414,425}}), which have
no {{@UriParam}}. The metadata instead lists {{outputFieldsIdxArray}} and
{{outputFieldsLengthArray}} of type {{Integer[]}}
({{Jt400Configuration.java:150-154}}), and the type converter does not turn a
string such as {{1,2}} into an {{Integer[]}}, so those two cannot be set from a
URI.
Likely fix: {{@UriParam}} on the String options (and {{@UriParam}} removed, or
a converter added, for the array ones).
The jt400 examples fail the catalog checks for another reason as well (the
{{/QSYS.LIB/...}} path is read as options), so none of the 16 examples is
counted here.
Each item is small and local to its component. Once they are fixed, the 16
examples pass the catalog checks as they are written today.
_Reported by Claude Code on behalf of Karol Krawczyk_
--
This message was sent by Atlassian Jira
(v8.20.10#820010)