Skip to content

Commit 75c8e31

Browse files
author
Łukasz Paczos
committed
added encoding for RouteOptions.toUrl
1 parent 1a1f4e2 commit 75c8e31

2 files changed

Lines changed: 52 additions & 3 deletions

File tree

services-directions-models/src/main/java/com/mapbox/api/directions/v5/models/RouteOptions.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import com.mapbox.geojson.Point;
1717
import java.io.UnsupportedEncodingException;
1818
import java.net.MalformedURLException;
19+
import java.net.URI;
20+
import java.net.URISyntaxException;
1921
import java.net.URL;
2022
import java.net.URLDecoder;
2123
import java.util.List;
@@ -846,7 +848,7 @@ public static RouteOptions fromUrl(@NonNull URL url) {
846848
}
847849

848850
/**
849-
* Create a URL from RouteOptions instance.
851+
* Create an encoded URL from RouteOptions instance.
850852
*
851853
* @param accessToken access token to make API request
852854
* @return a URL object instance
@@ -957,8 +959,18 @@ public URL toUrl(@NonNull String accessToken) {
957959
}
958960

959961
try {
960-
return new URL(sb.toString());
961-
} catch (MalformedURLException ex) {
962+
URL decodedUrl = new URL(sb.toString());
963+
URI encodedUri = new URI(
964+
decodedUrl.getProtocol(),
965+
decodedUrl.getUserInfo(),
966+
decodedUrl.getHost(),
967+
decodedUrl.getPort(),
968+
decodedUrl.getPath(),
969+
decodedUrl.getQuery(),
970+
decodedUrl.getRef()
971+
);
972+
return encodedUri.toURL();
973+
} catch (MalformedURLException | URISyntaxException ex) {
962974
throw new RuntimeException(ex);
963975
}
964976
}

services-directions-models/src/test/java/com/mapbox/api/directions/v5/models/RouteOptionsTest.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,43 @@ public void baseUrlWithLastSlash() {
382382
assertEquals(expectedUrl, url.toString());
383383
}
384384

385+
@Test
386+
public void routeOptionsWithDecodedChars_toUrlWithEncodedChars() {
387+
String expectedEncodedUrl = "https://api.mapbox.com/directions/v5/mapbox/driving/-122.4003312,37.7736941;-122.4187529,37.7689715?access_token=pk.token&geometries=polyline6&waypoint_names=my%20starting%20position;my%20destination";
388+
List<Point> coordinates = new ArrayList<>();
389+
coordinates.add(Point.fromLngLat(-122.4003312, 37.7736941));
390+
coordinates.add(Point.fromLngLat(-122.4187529, 37.7689715));
391+
392+
RouteOptions options = RouteOptions.builder()
393+
.profile(DirectionsCriteria.PROFILE_DRIVING)
394+
.coordinatesList(coordinates)
395+
.waypointNames("my starting position;my destination")
396+
.build();
397+
398+
URL url = options.toUrl(ACCESS_TOKEN);
399+
400+
assertEquals(expectedEncodedUrl, url.toString());
401+
}
402+
403+
@Test
404+
public void routeOptions_toUrl_fromUrl_withEncodedChars() {
405+
List<Point> coordinates = new ArrayList<>();
406+
coordinates.add(Point.fromLngLat(-122.4003312, 37.7736941));
407+
coordinates.add(Point.fromLngLat(-122.4187529, 37.7689715));
408+
409+
RouteOptions expectedOptions = RouteOptions.builder()
410+
.profile(DirectionsCriteria.PROFILE_DRIVING)
411+
.coordinatesList(coordinates)
412+
.waypointNames("my starting position;my destination")
413+
.build();
414+
415+
URL url = expectedOptions.toUrl(ACCESS_TOKEN);
416+
417+
RouteOptions resultingOptions = RouteOptions.fromUrl(url);
418+
419+
assertEquals(expectedOptions, resultingOptions);
420+
}
421+
385422
/**
386423
* Fills up all the options using string variants. Values need ot be equal to the ones in {@link #optionsJson}.
387424
*/

0 commit comments

Comments
 (0)