This is an automated email from the ASF dual-hosted git repository. orpiske pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push: new fa375eddb03 (chores) camel-platform-http-vertx: break large methods fa375eddb03 is described below commit fa375eddb0396a4c7d2bb651da2bda16353ee9dc Author: Otavio Rodolfo Piske <angusyo...@gmail.com> AuthorDate: Mon Oct 30 10:11:14 2023 +0100 (chores) camel-platform-http-vertx: break large methods This should help obtain better information when profiling the code --- .../http/vertx/VertxPlatformHttpConsumer.java | 68 +++++++++++++--------- .../http/vertx/VertxPlatformHttpSupport.java | 34 +++++++---- 2 files changed, 61 insertions(+), 41 deletions(-) diff --git a/components/camel-platform-http-vertx/src/main/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpConsumer.java b/components/camel-platform-http-vertx/src/main/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpConsumer.java index 708e0a86e25..d948d5c833a 100644 --- a/components/camel-platform-http-vertx/src/main/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpConsumer.java +++ b/components/camel-platform-http-vertx/src/main/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpConsumer.java @@ -26,6 +26,7 @@ import java.util.regex.Pattern; import jakarta.activation.DataHandler; +import io.vertx.core.AsyncResult; import io.vertx.core.Handler; import io.vertx.core.MultiMap; import io.vertx.core.Vertx; @@ -183,35 +184,44 @@ public class VertxPlatformHttpConsumer extends DefaultConsumer implements Suspen handleProxy(ctx, exchange); } - vertx.executeBlocking(() -> { - createUoW(exchange); - getProcessor().process(exchange); - return null; - }, false) - .onComplete(result -> { - Throwable failure = null; - try { - if (result.succeeded()) { - try { - writeResponse(ctx, exchange, getEndpoint().getHeaderFilterStrategy(), muteExceptions); - } catch (Exception e) { - failure = e; - } - } else { - failure = result.cause(); - } - - if (failure != null) { - getExceptionHandler().handleException( - "Failed handling platform-http endpoint " + getEndpoint().getPath(), - failure); - ctx.fail(failure); - } - } finally { - doneUoW(exchange); - releaseExchange(exchange, false); - } - }); + vertx.executeBlocking(() -> processRequest(exchange), false) + .onComplete(result -> processResult(ctx, result, exchange)); + } + + private void processResult( + RoutingContext ctx, AsyncResult<Object> result, Exchange exchange) { + Throwable failure = null; + try { + if (result.succeeded()) { + try { + writeResponse(ctx, exchange, getEndpoint().getHeaderFilterStrategy(), muteExceptions); + } catch (Exception e) { + failure = e; + } + } else { + failure = result.cause(); + } + + if (failure != null) { + handleFailure(ctx, failure); + } + } finally { + doneUoW(exchange); + releaseExchange(exchange, false); + } + } + + private void handleFailure(RoutingContext ctx, Throwable failure) { + getExceptionHandler().handleException( + "Failed handling platform-http endpoint " + getEndpoint().getPath(), + failure); + ctx.fail(failure); + } + + private Object processRequest(Exchange exchange) throws Exception { + createUoW(exchange); + getProcessor().process(exchange); + return null; } private static void handleSuspend(RoutingContext ctx) { diff --git a/components/camel-platform-http-vertx/src/main/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpSupport.java b/components/camel-platform-http-vertx/src/main/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpSupport.java index 74cec0c62e1..73e3e22641c 100644 --- a/components/camel-platform-http-vertx/src/main/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpSupport.java +++ b/components/camel-platform-http-vertx/src/main/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpSupport.java @@ -35,6 +35,7 @@ import io.vertx.core.net.SocketAddress; import io.vertx.ext.web.RoutingContext; import org.apache.camel.Exchange; import org.apache.camel.Message; +import org.apache.camel.NoTypeConversionAvailableException; import org.apache.camel.TypeConverter; import org.apache.camel.spi.HeaderFilterStrategy; import org.apache.camel.support.ExchangeHelper; @@ -204,21 +205,30 @@ public final class VertxPlatformHttpSupport { } else if (body instanceof Buffer) { response.end((Buffer) body); } else { - final TypeConverter tc = camelExchange.getContext().getTypeConverter(); - // Try to convert to ByteBuffer for performance reason - final ByteBuffer bb = tc.tryConvertTo(ByteBuffer.class, camelExchange, body); - if (bb != null) { - final Buffer b = Buffer.buffer(bb.capacity()); - b.setBytes(0, bb); - response.end(b); - } else { - // Otherwise fallback to most generic InputStream conversion - final InputStream is = tc.mandatoryConvertTo(InputStream.class, camelExchange, body); - writeResponseAs(response, is); - } + writeResponseAsFallback(camelExchange, body, response); } } + private static void writeResponseAsFallback(Exchange camelExchange, Object body, HttpServerResponse response) + throws NoTypeConversionAvailableException, IOException { + final TypeConverter tc = camelExchange.getContext().getTypeConverter(); + // Try to convert to ByteBuffer for performance reason + final ByteBuffer bb = tc.tryConvertTo(ByteBuffer.class, camelExchange, body); + if (bb != null) { + writeResponseAs(response, bb); + } else { + // Otherwise fallback to most generic InputStream conversion + final InputStream is = tc.mandatoryConvertTo(InputStream.class, camelExchange, body); + writeResponseAs(response, is); + } + } + + private static void writeResponseAs(HttpServerResponse response, ByteBuffer bb) { + final Buffer b = Buffer.buffer(bb.capacity()); + b.setBytes(0, bb); + response.end(b); + } + private static void writeResponseAs(HttpServerResponse response, InputStream is) throws IOException { final byte[] bytes = new byte[4096]; try (InputStream in = is) {