[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]
[#assign link = camelBitLink(model, models)]
[#if link?starts_with("xref:")]* [=link][[=model.title][#if model.kind != "other" ] [=humanReadableKind(model.kind)][/#if]][#if model.kind == "component" ], URI syntax: `[=model.syntax]`[/#if][#else]* [=model.title][/#if]
[/#list]

[#if link?starts_with("xref:")]Please refer to the above link[#if models?size != 1]s[/#if] for usage and configuration details.[/#if]
[/#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"]
== LangChain4j dependency management

In order to ensure alignment across all Quarkus and LangChain4j related dependencies, it is recommended to import the LangChain4j BOM as below:
[source,xml,subs=attributes+]
----
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>dev.langchain4j</groupId>
      <artifactId>langchain4j-bom</artifactId>
      <version>{langchain4j-version}</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 `langchain4j-bom` before other related Camel and Quarkus BOMs.
[/#if]
[#if configuration?? || configOptions?size != 0 ]

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

[=configuration]
[/#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)]

a|[=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 hasDurationOption]

[NOTE]
[id=duration-note-anchor-[=artifactIdBase]]
.About the Duration format
====
To write duration values, use the standard `java.time.Duration` format.
See the link:https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/Duration.html#parse(java.lang.CharSequence)[Duration#parse() Java API documentation] for more information.

You can also use a simplified format, starting with a number:

* If the value is only a number, it represents time in seconds.
* If the value is a number followed by `ms`, it represents time in milliseconds.

In other cases, the simplified format is translated to the `java.time.Duration` format for parsing:

* If the value is a number followed by `h`, `m`, or `s`, it is prefixed with `PT`.
* If the value is a number followed by `d`, it is prefixed with `P`.
====
[/#if]
[#if hasMemSizeOption]

[NOTE]
[id=memory-size-note-anchor-[=artifactIdBase]]
.About the MemorySize format
====
A size configuration option recognizes strings in this format (shown as a regular expression): `[0-9]+[KkMmGgTtPpEeZzYy]?`.

If no suffix is given, assume bytes.
====
[/#if]

[/#if]
[/#if]
