From 037cd06a46cffb1b26f9e27ae160787d7fb912d8 Mon Sep 17 00:00:00 2001 From: Frank Hossfeld Date: Thu, 29 Jul 2021 19:41:15 +0200 Subject: [PATCH] #211 - NPE in RouterParser class in case a parameter is not set --- .../client/internal/route/RouteParser.java | 36 +++++++++++-------- .../internal/route/RouteParserTest.java | 10 ++++++ 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/nalu/src/main/java/com/github/nalukit/nalu/client/internal/route/RouteParser.java b/nalu/src/main/java/com/github/nalukit/nalu/client/internal/route/RouteParser.java index dcf2f8388..ee554cbed 100644 --- a/nalu/src/main/java/com/github/nalukit/nalu/client/internal/route/RouteParser.java +++ b/nalu/src/main/java/com/github/nalukit/nalu/client/internal/route/RouteParser.java @@ -9,22 +9,22 @@ import java.util.stream.Stream; public class RouteParser { - + private static RouteParser instance = new RouteParser(); - + private SimpleEventBus eventBus; - + private RouteParser() { } - + public static RouteParser get() { return instance; } - + public void setEventBus(SimpleEventBus eventBus) { this.eventBus = eventBus; } - + /** * Parse the hash and divides it into shellCreator, route and parameters * @@ -147,7 +147,7 @@ RouteResult parse(String route, } return routeResult; } - + /** * Generates a new route! *

@@ -166,7 +166,7 @@ String generate(String route, routeValue = routeValue.substring(1); } String[] partsOfRoute = routeValue.split("/"); - + int parameterIndex = 0; for (String s : partsOfRoute) { sb.append("/"); @@ -175,21 +175,29 @@ String generate(String route, sb.append(":"); } if (params.length - 1 >= parameterIndex) { - sb.append(params[parameterIndex].replace("/", - RouterConstants.NALU_SLASH_REPLACEMENT)); + if (!Objects.isNull(params[parameterIndex])) { + sb.append(params[parameterIndex].replace("/", + RouterConstants.NALU_SLASH_REPLACEMENT)); + } parameterIndex++; } } else { sb.append(s); } } - + // in case there are more parameters then placesholders, we add them add the end! long numberOfPlaceHolders = Stream.of(partsOfRoute) .filter(s -> "*".equals(s) || s.startsWith(":")) .count(); if (params.length > numberOfPlaceHolders) { - String sbExeption = "Warning: route >>" + route + "<< has less parameter placeholder >>" + numberOfPlaceHolders + "<< than the number of parameters in the list of parameters >>" + params.length + "<< --> adding Parameters add the end of the url"; + String sbExeption = "Warning: route >>" + + route + + "<< has less parameter placeholder >>" + + numberOfPlaceHolders + + "<< than the number of parameters in the list of parameters >>" + + params.length + + "<< --> adding Parameters add the end of the url"; this.eventBus.fireEvent(LogEvent.create() .sdmOnly(true) .addMessage(sbExeption)); @@ -207,7 +215,7 @@ String generate(String route, parameterIndex++; } } - + // remove leading '/' String generatedRoute = sb.toString(); if (generatedRoute.startsWith("/")) { @@ -222,5 +230,5 @@ String generate(String route, } return generatedRoute; } - + } diff --git a/nalu/src/test/java/com/github/nalukit/nalu/client/internal/route/RouteParserTest.java b/nalu/src/test/java/com/github/nalukit/nalu/client/internal/route/RouteParserTest.java index 55fa5dad5..cf12fe3d3 100644 --- a/nalu/src/test/java/com/github/nalukit/nalu/client/internal/route/RouteParserTest.java +++ b/nalu/src/test/java/com/github/nalukit/nalu/client/internal/route/RouteParserTest.java @@ -594,4 +594,14 @@ void generate04() { is("application/person/list/A")); } + @Test + void generate05() { + String hash = RouteParser.get() + .generate("/application/person/list/:name/:citty", + null, + null); + MatcherAssert.assertThat(hash, + is("application/person/list//")); + } + } \ No newline at end of file