[id="extensions-[=artifactIdBase]"]
= [=name]
[#if pageAliases?? ]:page-aliases: [=pageAliases]
[/#if]
:linkattrs:
:cq-artifact-id: camel-quarkus-[=artifactIdBase]
:cq-native-supported: [=nativeSupported?then('true', 'false')]
:cq-status: [=status]
:cq-status-deprecation: [=statusDeprecation]
:cq-description: [=description]
:cq-deprecated: [=deprecated?then('true', 'false')]
:cq-jvm-since: [=jvmSince]
:cq-native-since: [=nativeSince]

ifeval::[{doc-show-badges} == true]
[.badges]
[.badge-key]##JVM since##[.badge-supported]##[=jvmSince]## [.badge-key]##Native[=nativeSupported?then(' since', '')]##[.badge-[=nativeSupported?then('', 'un')]supported]##[=nativeSupported?then(nativeSince, 'unsupported')]##[#if deprecated ] [.badge-key]##⚠️##[.badge-unsupported]##Deprecated##[/#if]
endif::[]

[=intro]
[#if models?size > 0]

[id="extensions-[=artifactIdBase]-whats-inside"]
== What's inside

[#list models as model]
* [=camelBitLink(model, models)][[=model.title][#if model.kind != "other" ] [=humanReadableKind(model.kind)][/#if]][#if model.kind == "component" ], URI syntax: `[=model.syntax]`[/#if]
[/#list]

Please refer to the above link[#if models?size != 1]s[/#if] for usage and configuration details.
[/#if]

[id="extensions-[=artifactIdBase]-maven-coordinates"]
== Maven coordinates

[#if !unlisted]https://{link-quarkus-code-generator}/?extension-search=camel-quarkus-[=artifactIdBase][Create a new project with this extension on {link-quarkus-code-generator}, window="_blank"]

Or add the coordinates to your existing project:

[/#if][source,xml]
----
<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-[=artifactIdBase]</artifactId>
</dependency>
----
ifeval::[{doc-show-user-guide-link} == true]
Check the xref:user-guide/index.adoc[User guide] for more information about writing Camel Quarkus applications.
endif::[]
[#if usage?? || usageAdvanced?? ]

[id="extensions-[=artifactIdBase]-usage"]
== Usage
[#if usage?? ]
[=usage]
[/#if]
[#if usageAdvanced?? ]
ifeval::[{doc-show-advanced-features} == true]
[=usageAdvanced]
endif::[]
[/#if]
[/#if]
[#if limitations?? ]

[id="extensions-[=artifactIdBase]-camel-quarkus-limitations"]
== Camel Quarkus limitations

[=limitations]
[/#if]
[#if activatesNativeSsl ]

[id="extensions-[=artifactIdBase]-ssl-in-native-mode"]
== SSL in native mode

This extension auto-enables SSL support in native mode. Hence you do not need to add
`quarkus.ssl.native=true` to your `application.properties` yourself. See also
https://quarkus.io/guides/native-and-ssl[Quarkus SSL guide].
[/#if]
[#if activatesContextMapAll ]

[id="extensions-[=artifactIdBase]-allowcontextmapall-option-in-native-mode"]
== allowContextMapAll option in native mode

The `allowContextMapAll` option is not supported in native mode as it requires reflective access to security sensitive camel core classes such as
`CamelContext` & `Exchange`. This is considered a security risk and thus access to the feature is not provided by default.
[/#if]
[#if activatesTransferException ]

[id="extensions-[=artifactIdBase]-transferexception-option-in-native-mode"]
== transferException option in native mode

To use the `transferException` option in native mode, you must enable support for object serialization. Refer to the xref:user-guide/native-mode.adoc#serialization[native mode user guide]
for more information.

You will also need to enable serialization for the exception classes that you intend to serialize. For example.
[source,java]
----
@RegisterForReflection(targets = { IllegalStateException.class, MyCustomException.class }, serialization = true)
----
[/#if]
[#if activatesQuarkusLangChain4jBom ]

[id="extensions-[=artifactIdBase]-quarkus-langchain4j-bom"]
== Ensure Quarkus LangChain4j dependencies version alignment with the Bom

In order to ensure alignment across all Quarkus and LangChain4j related dependencies, it is recommended to import the Quarkus LangChain4j bom as below:
[source,xml]
----
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>io.quarkiverse.langchain4j</groupId>
      <artifactId>quarkus-langchain4j-bom</artifactId>
      <version>${insert your version here}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
  ...
</dependencyManagement>
----

Note that the import order is paramount when using maven `dependencyManagement`.
As such, one might need to import the `quarkus-langchain4j-bom` before other related Camel and Quarkus boms.
[/#if]
[#if configuration?? || quarkusAwsClient?? || configOptions?size != 0 ]

[id="extensions-[=artifactIdBase]-additional-camel-quarkus-configuration"]
== Additional Camel Quarkus configuration
[#if configuration??]

[=configuration]
[/#if]
[#if quarkusAwsClient??]

[id="extensions-[=artifactIdBase]-optional-integration-with-[=quarkusAwsClient.extensionNameIdHeading]"]
=== Optional integration with [=quarkusAwsClient.extensionName]

If desired, it is possible to use the [=quarkusAwsClient.extensionName] extension in conjunction with Camel Quarkus [=name].
Note that this is fully optional and not mandatory at all.
Please follow the [=quarkusAwsClient.configurationUrl][Quarkus documentation] but beware of the following caveats:

1. The client type `apache` has to be selected by configuring the following property:
+
[source,properties]
----
[=quarkusAwsClient.configBase].sync-client.type=apache
----

2. The `[=quarkusAwsClient.clientClassSimpleName]` has to be made "unremovable" in the sense of https://quarkus.io/guides/cdi-reference#remove_unused_beans[Quarkus CDI reference] so that Camel Quarkus is able to look it up at runtime.
You can reach that e.g. by adding a dummy bean injecting `[=quarkusAwsClient.clientClassSimpleName]`:
+
[source,java]
----
import jakarta.enterprise.context.ApplicationScoped;
import io.quarkus.arc.Unremovable;
import [=quarkusAwsClient.clientClassFqName];

@ApplicationScoped
@Unremovable
class Unremovable[=quarkusAwsClient.clientClassSimpleName] {
    @Inject
    [=quarkusAwsClient.clientClassSimpleName] [=quarkusAwsClient.clientFieldName];
}
----
[/#if]
[#if configOptions?size != 0 ]

[width="100%",cols="80,5,15",options="header"]
|===
| Configuration property | Type | Default

[#list configOptions as configDocItem][#assign anchor = toAnchor(configDocItem.key)]

|[=configDocItem.illustration] [[[=anchor]]]`link:#[=anchor][[=configDocItem.key]]`

[=configDocItem.configDoc]
| `[=configDocItem.type]`
| [#if configDocItem.defaultValue?has_content]`[=configDocItem.defaultValue]`[#elseif ! configDocItem.optional]required icon:exclamation-circle[title=Configuration property is required][/#if]
[/#list]
|===

[.configuration-legend]
{doc-link-icon-lock}[title=Fixed at build time] Configuration property fixed at build time. All other configuration properties are overridable at runtime.

[/#if]
[/#if]
