= HTTP with vanilla JAX-RS or with Camel `platform-http` component: A Camel Quarkus example
:cq-example-description: An example that shows how to create HTTP endpoints using either the RESTEasy
implementation of JAX-RS or using Camel `platform-http` component.

{cq-description}

The Quarkus REST service `ExampleResource.java` and the Camel route `CamelRoute.java`
are independent and are present in this example to demonstrate how you can build microservices
with both Quarkus and Camel separated.

You can of course also combine Quarkus REST services with Camel (see further below).

TIP: Check the https://camel.apache.org/camel-quarkus/latest/first-steps.html[Camel Quarkus User guide] for prerequisites
and other general information.

This example was used in a 10 minute video recording to demonstrate
how to quickly run 100 Camels with Apache Camel, Quarkus and GraalVM:

- https://www.youtube.com/watch?v=4lXSf8DBQkQ


== Start in the Development mode

[source,shell]
----
$ mvn clean compile quarkus:dev
----

The above command compiles the project, starts the application and lets the Quarkus tooling watch for changes in your
workspace. Any modifications in your project will automatically take effect in the running application.

TIP: Please refer to the Development mode section of
https://camel.apache.org/camel-quarkus/latest/first-steps.html#_development_mode[Camel Quarkus User guide] for more details.

From a web browser, you can call the two services via

- http://localhost:8080/hello
- http://localhost:8080/camel/hello

There is also health check and metrics available from the following urls:

- http://localhost:8080/health
- http://localhost:8080/metrics

=== Package and run the application

Once you are done with developing you may want to package and run the application.

TIP: Find more details about the JVM mode and Native mode in the Package and run section of
https://camel.apache.org/camel-quarkus/latest/first-steps.html#_package_and_run_the_application[Camel Quarkus User guide]

==== JVM mode

[source,shell]
----
$ mvn clean package
$ java -jar target/quarkus-app/quarkus-run.jar
...
[io.quarkus] (main) camel-quarkus-examples-... started in 1.163s. Listening on: http://0.0.0.0:8080
----

==== Native mode

IMPORTANT: Native mode requires having GraalVM and other tools installed. Please check the Prerequisites section
of https://camel.apache.org/camel-quarkus/latest/first-steps.html#_prerequisites[Camel Quarkus User guide].

To prepare a native executable using GraalVM, run the following command:

[source,shell]
----
$ mvn clean package -Pnative
$ ./target/*-runner
...
[io.quarkus] (main) camel-quarkus-examples-... started in 0.013s. Listening on: http://0.0.0.0:8080
...
----

== Using Camel from Quarkus JAX-RS

The `ExampleResource.java` is a pure JAX-RS REST service without using Camel.
Suppose you wanted to add a HTTP POST that sends the HTTP body to a Kafka topic,
via the camel-kafka component. You can then integrate Quarkus
with Camel by dependency injecting Camels `FluentProducerTemplate` that allows to
send the message in one line of code to Kafka. What's left is to configure the URL to the Kafka brokers,
which can be done in the `application.properties` file.

[source,java]
----
import org.apache.camel.FluentProducerTemplate;
import org.jboss.resteasy.annotations.Body;
import javax.inject.Inject;
import javax.ws.rs.Consumes;

@Path("/hello")
public class ExampleResource {

    @Inject
    FluentProducerTemplate producer;

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
        return "hello";
    }

    @POST
    @Consumes(MediaType.TEXT_PLAIN)
    public void foo(@Body String payload) {
        producer.to("kafka:foo").send(payload);
    }
}
----

== Feedback

Please report bugs and propose improvements via https://github.com/apache/camel-quarkus/issues[GitHub issues of Camel Quarkus] project.
