Skip to content

Commit 5a17f3f

Browse files
authored
fixes #2345 Fix the transformer matching with encoding (#2346)
1 parent 512c278 commit 5a17f3f

File tree

4 files changed

+56
-2
lines changed

4 files changed

+56
-2
lines changed

handler/src/main/java/com/networknt/handler/Interceptor.java

+9
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import java.util.List;
1313
import java.util.Map;
14+
import java.util.Optional;
1415

1516
public interface Interceptor extends MiddlewareHandler {
1617

@@ -90,5 +91,13 @@ default boolean parseJsonArrayObject(final HttpServerExchange ex, final Attachme
9091
}
9192
}
9293

94+
default Optional<String> findMatchingPrefix(String url, List<String> prefixes) {
95+
return prefixes.stream()
96+
.filter(prefix -> {
97+
String[] parts = prefix.split(" ", 2);
98+
return url.startsWith(parts[0]);
99+
})
100+
.findFirst();
101+
}
93102

94103
}

request-transformer/src/main/java/com/networknt/reqtrans/RequestTransformerInterceptor.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public void handleRequest(HttpServerExchange exchange) throws Exception {
8686
String requestPath = exchange.getRequestPath();
8787
if (config.getAppliedPathPrefixes() != null) {
8888
// check if the path prefix has the second part of encoding to overwrite the defaultBodyEncoding.
89-
Optional<String> match = config.getAppliedPathPrefixes().stream().filter(requestPath::startsWith).findFirst();
89+
Optional<String> match = findMatchingPrefix(requestPath, config.getAppliedPathPrefixes());
9090
if(match.isPresent()) {
9191
String encoding = StringUtils.getSecondPart(match.get());
9292
if (encoding != null && logger.isTraceEnabled())

response-transformer/src/main/java/com/networknt/restrans/ResponseTransformerInterceptor.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ public void handleRequest(HttpServerExchange exchange) throws Exception {
105105
String requestPath = exchange.getRequestPath();
106106
if (config.getAppliedPathPrefixes() != null) {
107107
// check if the path prefix has the second part of encoding to overwrite the defaultBodyEncoding.
108-
Optional<String> match = config.getAppliedPathPrefixes().stream().filter(requestPath::startsWith).findFirst();
108+
Optional<String> match = findMatchingPrefix(requestPath, config.getAppliedPathPrefixes());
109109
if(match.isPresent()) {
110110
String encoding = StringUtils.getSecondPart(match.get());
111111
if(encoding != null && logger.isTraceEnabled()) logger.trace("Customized encoding {} found in the prefix {} for requestPath {}", encoding, match.get(), requestPath);

response-transformer/src/test/java/com/networknt/restrans/ResponseTransformerInterceptorTest.java

+45
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,11 @@
2222
import org.xnio.OptionMap;
2323

2424
import java.net.URI;
25+
import java.util.*;
2526
import java.util.concurrent.CountDownLatch;
2627
import java.util.concurrent.TimeUnit;
2728
import java.util.concurrent.atomic.AtomicReference;
29+
import java.util.function.Predicate;
2830

2931
public class ResponseTransformerInterceptorTest {
3032
static final Logger logger = LoggerFactory.getLogger(ResponseTransformerInterceptorTest.class);
@@ -144,4 +146,47 @@ public void run() {
144146
}
145147
}
146148

149+
150+
@Test
151+
public void testMatch() {
152+
List<String> list = new ArrayList<>();
153+
list.add("/corp/mras/1.0.0");
154+
list.add("/corp/lab/1.0");
155+
list.add("/gateway/partyInfo/1.0 ISO-8859-1");
156+
String requestPath = "/gateway/partyInfo/1.0/salesforce";
157+
158+
// Optional<String> match = list.stream().filter(requestPath::startsWith).findFirst();
159+
Optional<String> match = findMatchingPrefix(requestPath, list);
160+
Assert.assertTrue(match.isPresent());
161+
Assert.assertEquals("/gateway/partyInfo/1.0 ISO-8859-1", match.get());
162+
163+
164+
}
165+
166+
@Test
167+
public void testStarts() {
168+
String url = "https://www.example.com/path/to/resource";
169+
List<String> prefixes = Arrays.asList(
170+
"https://www.otherdomain.com",
171+
"https://www.example.com",
172+
"http://www.example.com"
173+
);
174+
175+
Optional<String> matchingPrefix = findMatchingPrefix(url, prefixes);
176+
177+
if (matchingPrefix.isPresent()) {
178+
System.out.println("Matching prefix found: " + matchingPrefix.get());
179+
} else {
180+
System.out.println("No matching prefix found");
181+
}
182+
}
183+
184+
Optional<String> findMatchingPrefix(String url, List<String> prefixes) {
185+
return prefixes.stream()
186+
.filter(prefix -> {
187+
String[] parts = prefix.split(" ", 2);
188+
return url.startsWith(parts[0]);
189+
})
190+
.findFirst();
191+
}
147192
}

0 commit comments

Comments
 (0)