This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch as2 in repository https://gitbox.apache.org/repos/asf/camel.git
commit d29e6619d405190363ce102042161a5cc765fcdd Author: Claus Ibsen <[email protected]> AuthorDate: Tue Oct 7 18:32:37 2025 +0200 CAMEL-22494: camel-as2 - When a route is stopped then the listener should return http 404 error as otherwise it will still process the incoming request. --- .../component/as2/api/AS2ServerConnection.java | 16 ++++++++++ .../camel/component/as2/api/AS2ServerManager.java | 4 +++ .../as2/api/NotFoundHttpRequestHandler.java | 34 ++++++++++++++++++++++ components/camel-as2/camel-as2-component/pom.xml | 15 +--------- .../apache/camel/component/as2/AS2Consumer.java | 5 ++++ 5 files changed, 60 insertions(+), 14 deletions(-) diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ServerConnection.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ServerConnection.java index c69a38f86d5e..b6210d7f3637 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ServerConnection.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ServerConnection.java @@ -130,6 +130,11 @@ public class AS2ServerConnection { void registerHandler(String requestUriPattern, HttpRequestHandler httpRequestHandler) { registry.register(null, requestUriPattern, httpRequestHandler); } + + void unregisterHandler(String requestUriPattern) { + // we cannot remove from http registry, but we can replace with a not found to simulate 404 + registry.register(null, requestUriPattern, new NotFoundHttpRequestHandler()); + } } class RequestHandlerThread extends Thread { @@ -307,6 +312,17 @@ public class AS2ServerConnection { } } + public void unlisten(String requestUri) { + if (listenerThread != null) { + lock.lock(); + try { + listenerThread.unregisterHandler(requestUri); + } finally { + lock.unlock(); + } + } + } + protected HttpProcessor initProtocolProcessor( String as2Version, String originServer, diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ServerManager.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ServerManager.java index 9836e9b63dd9..e2b49ae44753 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ServerManager.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ServerManager.java @@ -53,6 +53,10 @@ public class AS2ServerManager { as2ServerConnection.listen(requestUriPattern, handler); } + public void unlisten(String requestUriPattern) { + as2ServerConnection.unlisten(requestUriPattern); + } + public void handleMDNResponse( HttpContext httpContext, String subject, String from) { // Add Context attributes for Response diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/NotFoundHttpRequestHandler.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/NotFoundHttpRequestHandler.java new file mode 100644 index 000000000000..72a9067686b9 --- /dev/null +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/NotFoundHttpRequestHandler.java @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.as2.api; + +import java.io.IOException; + +import org.apache.hc.core5.http.ClassicHttpRequest; +import org.apache.hc.core5.http.ClassicHttpResponse; +import org.apache.hc.core5.http.HttpException; +import org.apache.hc.core5.http.io.HttpRequestHandler; +import org.apache.hc.core5.http.protocol.HttpContext; + +public class NotFoundHttpRequestHandler implements HttpRequestHandler { + + @Override + public void handle(ClassicHttpRequest classicHttpRequest, ClassicHttpResponse classicHttpResponse, HttpContext httpContext) + throws HttpException, IOException { + classicHttpResponse.setCode(404); + } +} diff --git a/components/camel-as2/camel-as2-component/pom.xml b/components/camel-as2/camel-as2-component/pom.xml index 0e58a92e6350..8e85c5bc8ccd 100644 --- a/components/camel-as2/camel-as2-component/pom.xml +++ b/components/camel-as2/camel-as2-component/pom.xml @@ -136,13 +136,9 @@ <consumerOnly>true</consumerOnly> <proxyClass>org.apache.camel.component.as2.api.AS2ServerManager</proxyClass> <fromJavasource> - <excludeMethods>stopListening|handleMDNResponse</excludeMethods> + <excludeMethods>stopListening|handleMDNResponse|unlisten</excludeMethods> </fromJavasource> <excludeConfigNames>handler</excludeConfigNames> - <!-- <nullableOptions> - <nullableOption>decryptingPrivateKey</nullableOption> - </nullableOptions> - --> </api> <api> <apiName>receipt</apiName> @@ -152,15 +148,6 @@ <excludeConfigNames>handler</excludeConfigNames> </api> </apis> - <!-- Specify global values for all APIs here, these are overridden at API level - <substitutions /> - <excludeConfigNames /> - <excludeConfigTypes /> - <extraOptions /> - <fromJavasource /> - <aliases /> - <nullableOptions /> - --> </configuration> </execution> </executions> diff --git a/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/AS2Consumer.java b/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/AS2Consumer.java index 9bdd8047733e..e05dacc1f39c 100644 --- a/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/AS2Consumer.java +++ b/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/AS2Consumer.java @@ -105,6 +105,11 @@ public class AS2Consumer extends AbstractApiConsumer<AS2ApiName, AS2Configuratio @Override protected void doStop() throws Exception { super.doStop(); + + if (apiProxy != null) { + String uri = properties.get("requestUriPattern").toString(); + apiProxy.unlisten(uri); + } } @Override
