All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.quarkiverse.cxf.hc5.it.Hc5Resource Maven / Gradle / Ivy

// tag::quarkus-cxf-rt-transports-http-hc5.usage.mutiny[]
package io.quarkiverse.cxf.hc5.it;

import java.util.concurrent.Future;

import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.QueryParam;
import jakarta.ws.rs.core.MediaType;

import org.apache.cxf.endpoint.Client;
import org.apache.cxf.frontend.ClientProxy;
import org.jboss.eap.quickstarts.wscalculator.calculator.AddResponse;
import org.jboss.eap.quickstarts.wscalculator.calculator.CalculatorService;

import io.quarkiverse.cxf.annotation.CXFClient;
import io.smallrye.mutiny.Uni;

@Path("/hc5")
public class Hc5Resource {

    @Inject
    @CXFClient("myCalculator") // name used in application.properties
    CalculatorService myCalculator;

    @SuppressWarnings("unchecked")
    @Path("/add-async")
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public Uni addAsync(@QueryParam("a") int a, @QueryParam("b") int b) {
        return Uni.createFrom()
                .future(
                        (Future) myCalculator
                                .addAsync(a, b, res -> {
                                }))
                .map(addResponse -> addResponse.getReturn());
    }

    // end::quarkus-cxf-rt-transports-http-hc5.usage.mutiny[]
    @Path("/add-sync")
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public int addSync(@QueryParam("a") int a, @QueryParam("b") int b) {
        return myCalculator.add(a, b);
    }

    @Inject
    @CXFClient("observableCalculator")
    CalculatorService observableCalculator;

    @SuppressWarnings("unchecked")
    @Path("/add-async-observable")
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public Uni addAsyncObservable(@QueryParam("a") int a, @QueryParam("b") int b) {
        return Uni.createFrom()
                .future(
                        (Future) observableCalculator
                                .addAsync(a, b, res -> {
                                }))
                .map(addResponse -> addResponse.getReturn());
    }

    @Path("/add-sync-observable")
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public int addSyncObservable(@QueryParam("a") int a, @QueryParam("b") int b) {
        return observableCalculator.add(a, b);
    }

    @Inject
    @CXFClient("contextPropagationCalculator")
    CalculatorService contextPropagationCalculator;

    @SuppressWarnings("unchecked")
    @Path("/add-async-contextPropagation")
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public Uni addAsyncContextPropagation(@QueryParam("a") int a, @QueryParam("b") int b) {
        return Uni.createFrom()
                .future(
                        (Future) contextPropagationCalculator
                                .addAsync(a, b, res -> {
                                }))
                .map(addResponse -> addResponse.getReturn());
    }

    @Path("/add-sync-contextPropagation")
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public int addSyncContextPropagation(@QueryParam("a") int a, @QueryParam("b") int b) {
        return contextPropagationCalculator.add(a, b);
    }

    @Path("/conduit")
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String conduit() {
        final Client client = ClientProxy.getClient(myCalculator);
        return client.getConduit().getClass().getName();
    }

    // tag::quarkus-cxf-rt-transports-http-hc5.usage.mutiny[]
}
// end::quarkus-cxf-rt-transports-http-hc5.usage.mutiny[]




© 2015 - 2025 Weber Informatics LLC | Privacy Policy