fixes matrix params, checkstyle, spotbugs
This commit is contained in:
parent
bc84cfce4a
commit
53e9469d18
21 changed files with 161 additions and 196 deletions
|
@ -37,12 +37,14 @@ subprojects {
|
||||||
sourceCompatibility = JavaVersion.VERSION_1_8
|
sourceCompatibility = JavaVersion.VERSION_1_8
|
||||||
targetCompatibility = JavaVersion.VERSION_1_8
|
targetCompatibility = JavaVersion.VERSION_1_8
|
||||||
}
|
}
|
||||||
|
|
||||||
compileTestJava {
|
compileTestJava {
|
||||||
sourceCompatibility = JavaVersion.VERSION_11
|
sourceCompatibility = JavaVersion.VERSION_11
|
||||||
targetCompatibility = JavaVersion.VERSION_11
|
targetCompatibility = JavaVersion.VERSION_11
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.withType(JavaCompile) {
|
tasks.withType(JavaCompile) {
|
||||||
options.compilerArgs << "-Xlint:all,-serial"
|
options.compilerArgs << "-Xlint:all"
|
||||||
}
|
}
|
||||||
|
|
||||||
jar {
|
jar {
|
||||||
|
@ -130,7 +132,7 @@ subprojects {
|
||||||
}
|
}
|
||||||
|
|
||||||
checkstyle {
|
checkstyle {
|
||||||
configFile = rootProject.file('config/checkstyle/checkstyle.xml')
|
//configFile = rootProject.file('config/checkstyle/checkstyle.xml')
|
||||||
ignoreFailures = true
|
ignoreFailures = true
|
||||||
showViolations = true
|
showViolations = true
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,12 +53,10 @@ page at http://checkstyle.sourceforge.net/config.html -->
|
||||||
</module>
|
</module>
|
||||||
|
|
||||||
<module name="ImportOrder">
|
<module name="ImportOrder">
|
||||||
<!-- Checks for out of order import statements. -->
|
<property name="separated" value="true"/>
|
||||||
|
|
||||||
<property name="severity" value="warning"/>
|
<property name="severity" value="warning"/>
|
||||||
<property name="groups" value="com,io,junit,net,org,javax,java"/>
|
<property name="groups" value="*,javax,java"/>
|
||||||
<!-- This ensures that static imports go last. -->
|
<property name="option" value="bottom"/>
|
||||||
<property name="option" value="under"/>
|
|
||||||
<property name="tokens" value="IMPORT, STATIC_IMPORT"/>
|
<property name="tokens" value="IMPORT, STATIC_IMPORT"/>
|
||||||
</module>
|
</module>
|
||||||
|
|
||||||
|
|
|
@ -3,8 +3,8 @@ package org.xbib.net.http;
|
||||||
import org.xbib.net.PercentDecoder;
|
import org.xbib.net.PercentDecoder;
|
||||||
import org.xbib.net.PercentEncoder;
|
import org.xbib.net.PercentEncoder;
|
||||||
import org.xbib.net.PercentEncoders;
|
import org.xbib.net.PercentEncoders;
|
||||||
import org.xbib.net.http.util.LimitedSortedStringSet;
|
import org.xbib.net.http.util.LimitedSet;
|
||||||
import org.xbib.net.http.util.LimitedStringMap;
|
import org.xbib.net.http.util.LimitedTreeMap;
|
||||||
|
|
||||||
import java.nio.charset.MalformedInputException;
|
import java.nio.charset.MalformedInputException;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
@ -28,14 +28,14 @@ import java.util.SortedSet;
|
||||||
*/
|
*/
|
||||||
public class HttpParameters implements Map<String, SortedSet<String>> {
|
public class HttpParameters implements Map<String, SortedSet<String>> {
|
||||||
|
|
||||||
private final LimitedStringMap wrappedMap;
|
private final LimitedTreeMap<String, String> wrappedMap;
|
||||||
|
|
||||||
private final PercentEncoder percentEncoder;
|
private final PercentEncoder percentEncoder;
|
||||||
|
|
||||||
private final PercentDecoder percentDecoder;
|
private final PercentDecoder percentDecoder;
|
||||||
|
|
||||||
public HttpParameters() {
|
public HttpParameters() {
|
||||||
this.wrappedMap = new LimitedStringMap();
|
this.wrappedMap = new LimitedTreeMap<>();
|
||||||
this.percentEncoder = PercentEncoders.getQueryEncoder(StandardCharsets.UTF_8);
|
this.percentEncoder = PercentEncoders.getQueryEncoder(StandardCharsets.UTF_8);
|
||||||
this.percentDecoder = new PercentDecoder();
|
this.percentDecoder = new PercentDecoder();
|
||||||
}
|
}
|
||||||
|
@ -155,7 +155,7 @@ public class HttpParameters implements Map<String, SortedSet<String>> {
|
||||||
String k = percentEncode ? percentEncoder.encode(key) : key;
|
String k = percentEncode ? percentEncoder.encode(key) : key;
|
||||||
SortedSet<String> values = wrappedMap.get(k);
|
SortedSet<String> values = wrappedMap.get(k);
|
||||||
if (values == null) {
|
if (values == null) {
|
||||||
values = new LimitedSortedStringSet();
|
values = new LimitedSet<>();
|
||||||
wrappedMap.put(k, values);
|
wrappedMap.put(k, values);
|
||||||
}
|
}
|
||||||
String v = null;
|
String v = null;
|
||||||
|
@ -208,7 +208,7 @@ public class HttpParameters implements Map<String, SortedSet<String>> {
|
||||||
for (String key : m.keySet()) {
|
for (String key : m.keySet()) {
|
||||||
SortedSet<String> vals = get(key);
|
SortedSet<String> vals = get(key);
|
||||||
if (vals == null) {
|
if (vals == null) {
|
||||||
vals = new LimitedSortedStringSet();
|
vals = new LimitedSet<>();
|
||||||
put(key, vals);
|
put(key, vals);
|
||||||
}
|
}
|
||||||
vals.addAll(m.get(key));
|
vals.addAll(m.get(key));
|
||||||
|
|
|
@ -3,6 +3,9 @@ package org.xbib.net.http;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
public interface HttpResponse {
|
public interface HttpResponse {
|
||||||
|
|
||||||
int getStatusCode() throws IOException;
|
int getStatusCode() throws IOException;
|
||||||
|
|
|
@ -1,49 +0,0 @@
|
||||||
package org.xbib.net.http;
|
|
||||||
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class UrlStringRequestAdapter implements HttpRequest {
|
|
||||||
|
|
||||||
private String url;
|
|
||||||
|
|
||||||
public UrlStringRequestAdapter(String url) {
|
|
||||||
this.url = url;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getMethod() {
|
|
||||||
return "GET";
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getRequestUrl() {
|
|
||||||
return url;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRequestUrl(String url) {
|
|
||||||
this.url = url;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setHeader(String name, String value) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getHeader(String name) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Map<String, String> getAllHeaders() {
|
|
||||||
return Collections.emptyMap();
|
|
||||||
}
|
|
||||||
|
|
||||||
public InputStream getMessagePayload() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getContentType() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Object unwrap() {
|
|
||||||
return url;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
/**
|
||||||
|
* Net classes for HTTP.
|
||||||
|
*/
|
||||||
|
package org.xbib.net.http;
|
|
@ -0,0 +1,34 @@
|
||||||
|
package org.xbib.net.http.util;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.TreeSet;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Limited set.
|
||||||
|
* @param <T> type
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("serial")
|
||||||
|
public class LimitedSet<T extends CharSequence> extends TreeSet<T> {
|
||||||
|
|
||||||
|
private final int sizeLimit;
|
||||||
|
|
||||||
|
private final int elementSizeLimit;
|
||||||
|
|
||||||
|
public LimitedSet() {
|
||||||
|
this(1024, 65536);
|
||||||
|
}
|
||||||
|
|
||||||
|
public LimitedSet(int sizeLimit, int elementSizeLimit) {
|
||||||
|
this.sizeLimit = sizeLimit;
|
||||||
|
this.elementSizeLimit = elementSizeLimit;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean add(T t) {
|
||||||
|
Objects.requireNonNull(t);
|
||||||
|
if (size() < sizeLimit && t.length() <= elementSizeLimit) {
|
||||||
|
return super.add(t);
|
||||||
|
}
|
||||||
|
throw new IllegalArgumentException("limit exceeded");
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,28 +0,0 @@
|
||||||
package org.xbib.net.http.util;
|
|
||||||
|
|
||||||
import java.util.SortedSet;
|
|
||||||
import java.util.TreeSet;
|
|
||||||
|
|
||||||
public class LimitedSortedStringSet extends TreeSet<String> implements SortedSet<String> {
|
|
||||||
|
|
||||||
private final int sizeLimit;
|
|
||||||
|
|
||||||
private final int elementSizeLimit;
|
|
||||||
|
|
||||||
public LimitedSortedStringSet() {
|
|
||||||
this(1024, 65536);
|
|
||||||
}
|
|
||||||
|
|
||||||
public LimitedSortedStringSet(int sizeLimit, int elementSizeLimit) {
|
|
||||||
this.sizeLimit = sizeLimit;
|
|
||||||
this.elementSizeLimit = elementSizeLimit;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean add(String string) {
|
|
||||||
if (size() < sizeLimit && string.length() <= elementSizeLimit ) {
|
|
||||||
return super.add(string);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,25 +0,0 @@
|
||||||
package org.xbib.net.http.util;
|
|
||||||
|
|
||||||
import java.util.SortedSet;
|
|
||||||
import java.util.TreeMap;
|
|
||||||
|
|
||||||
public class LimitedStringMap extends TreeMap<String, SortedSet<String>> {
|
|
||||||
|
|
||||||
private final int limit;
|
|
||||||
|
|
||||||
public LimitedStringMap() {
|
|
||||||
this(1024);
|
|
||||||
}
|
|
||||||
|
|
||||||
public LimitedStringMap(int limit) {
|
|
||||||
this.limit = limit;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public SortedSet<String> put(String key, SortedSet<String> value) {
|
|
||||||
if (size() < limit) {
|
|
||||||
return super.put(key, value);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
package org.xbib.net.http.util;
|
||||||
|
|
||||||
|
import java.util.SortedSet;
|
||||||
|
import java.util.TreeMap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tree Map with a limited number of elements.
|
||||||
|
*
|
||||||
|
* @param <K> key
|
||||||
|
* @param <V> value
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("serial")
|
||||||
|
public class LimitedTreeMap<K, V> extends TreeMap<K, SortedSet<V>> {
|
||||||
|
|
||||||
|
private final int limit;
|
||||||
|
|
||||||
|
public LimitedTreeMap() {
|
||||||
|
this(1024);
|
||||||
|
}
|
||||||
|
|
||||||
|
public LimitedTreeMap(int limit) {
|
||||||
|
this.limit = limit;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SortedSet<V> put(K key, SortedSet<V> value) {
|
||||||
|
if (size() < limit) {
|
||||||
|
return super.put(key, value);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
/**
|
||||||
|
* Utilities for Net HTTP classes.
|
||||||
|
*/
|
||||||
|
package org.xbib.net.http.util;
|
31
net-url/src/main/java/org/xbib/net/Pair.java
Normal file
31
net-url/src/main/java/org/xbib/net/Pair.java
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
package org.xbib.net;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A pair of parameters.
|
||||||
|
* @param <K> the key type parameter
|
||||||
|
* @param <V> the value type parameter
|
||||||
|
*/
|
||||||
|
public class Pair<K, V> {
|
||||||
|
|
||||||
|
private final K first;
|
||||||
|
|
||||||
|
private final V second;
|
||||||
|
|
||||||
|
Pair(K first, V second) {
|
||||||
|
this.first = first;
|
||||||
|
this.second = second;
|
||||||
|
}
|
||||||
|
|
||||||
|
public K getFirst() {
|
||||||
|
return first;
|
||||||
|
}
|
||||||
|
|
||||||
|
public V getSecond() {
|
||||||
|
return second;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return first + ":" + second;
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,6 +2,7 @@ package org.xbib.net;
|
||||||
|
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
import java.util.BitSet;
|
import java.util.BitSet;
|
||||||
|
|
||||||
import static java.nio.charset.CodingErrorAction.REPORT;
|
import static java.nio.charset.CodingErrorAction.REPORT;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -10,13 +10,13 @@ import java.util.stream.Collectors;
|
||||||
* Query parameter list, of limited size. Default is 1024 pairs.
|
* Query parameter list, of limited size. Default is 1024 pairs.
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("serial")
|
@SuppressWarnings("serial")
|
||||||
public class QueryParameters extends ArrayList<QueryParameters.Pair<String, String>> {
|
public class QueryParameters extends ArrayList<Pair<String, String>> {
|
||||||
|
|
||||||
private static final char AMPERSAND_CHAR = '&';
|
private static final char AMPERSAND_CHAR = '&';
|
||||||
|
|
||||||
private static final char EQUAL_CHAR = '=';
|
private static final char EQUAL_CHAR = '=';
|
||||||
|
|
||||||
private final PercentDecoder percentDecoder;
|
private transient final PercentDecoder percentDecoder;
|
||||||
|
|
||||||
private final int max;
|
private final int max;
|
||||||
|
|
||||||
|
@ -42,10 +42,15 @@ public class QueryParameters extends ArrayList<QueryParameters.Pair<String, Stri
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean add(QueryParameters.Pair<String, String> element) {
|
public boolean add(Pair<String, String> element) {
|
||||||
return size() < max && super.add(element);
|
return size() < max && super.add(element);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
return o instanceof QueryParameters && super.equals(o);
|
||||||
|
}
|
||||||
|
|
||||||
public QueryParameters addPercentEncodedBody(String body) throws MalformedInputException, UnmappableCharacterException {
|
public QueryParameters addPercentEncodedBody(String body) throws MalformedInputException, UnmappableCharacterException {
|
||||||
String s = body;
|
String s = body;
|
||||||
while (s != null) {
|
while (s != null) {
|
||||||
|
@ -73,32 +78,4 @@ public class QueryParameters extends ArrayList<QueryParameters.Pair<String, Stri
|
||||||
String v = i >= 0 ? input.substring(i + 1) : null;
|
String v = i >= 0 ? input.substring(i + 1) : null;
|
||||||
return new Pair<>(k, v);
|
return new Pair<>(k, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* A pair of query parameters.
|
|
||||||
* @param <K> the key type parameter
|
|
||||||
* @param <V> the value type parameter
|
|
||||||
*/
|
|
||||||
public static class Pair<K, V> {
|
|
||||||
private final K first;
|
|
||||||
private final V second;
|
|
||||||
|
|
||||||
Pair(K first, V second) {
|
|
||||||
this.first = first;
|
|
||||||
this.second = second;
|
|
||||||
}
|
|
||||||
|
|
||||||
public K getFirst() {
|
|
||||||
return first;
|
|
||||||
}
|
|
||||||
|
|
||||||
public V getSecond() {
|
|
||||||
return second;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return first + ":" + second;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package org.xbib.net;
|
||||||
import org.xbib.net.scheme.Scheme;
|
import org.xbib.net.scheme.Scheme;
|
||||||
import org.xbib.net.scheme.SchemeRegistry;
|
import org.xbib.net.scheme.SchemeRegistry;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
import java.net.IDN;
|
import java.net.IDN;
|
||||||
import java.net.Inet4Address;
|
import java.net.Inet4Address;
|
||||||
import java.net.Inet6Address;
|
import java.net.Inet6Address;
|
||||||
|
@ -361,7 +362,7 @@ public class URL implements Comparable<URL> {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
Pair<String, String> p = indexOf(COLON_CHAR, builder.userInfo);
|
Pair<String, String> p = indexOf(COLON_CHAR, builder.userInfo);
|
||||||
return decode(p.first);
|
return decode(p.getFirst());
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getPassword() {
|
public String getPassword() {
|
||||||
|
@ -369,7 +370,7 @@ public class URL implements Comparable<URL> {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
Pair<String, String> p = indexOf(COLON_CHAR, builder.userInfo);
|
Pair<String, String> p = indexOf(COLON_CHAR, builder.userInfo);
|
||||||
return decode(p.second);
|
return decode(p.getSecond());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -668,9 +669,9 @@ public class URL implements Comparable<URL> {
|
||||||
if (withQuestionMark) {
|
if (withQuestionMark) {
|
||||||
sb.append(QUESTION_CHAR);
|
sb.append(QUESTION_CHAR);
|
||||||
}
|
}
|
||||||
Iterator<QueryParameters.Pair<String, String>> it = builder.queryParams.iterator();
|
Iterator<Pair<String, String>> it = builder.queryParams.iterator();
|
||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
QueryParameters.Pair<String, String> queryParam = it.next();
|
Pair<String, String> queryParam = it.next();
|
||||||
try {
|
try {
|
||||||
sb.append(withEncoding ? queryParamEncoder.encode(queryParam.getFirst()) : queryParam.getFirst());
|
sb.append(withEncoding ? queryParamEncoder.encode(queryParam.getFirst()) : queryParam.getFirst());
|
||||||
if (queryParam.getSecond() != null) {
|
if (queryParam.getSecond() != null) {
|
||||||
|
@ -916,11 +917,10 @@ public class URL implements Comparable<URL> {
|
||||||
}
|
}
|
||||||
|
|
||||||
public Builder pathSegment(String segment) {
|
public Builder pathSegment(String segment) {
|
||||||
if (pathSegments.isEmpty() && !isNullOrEmpty(host) && isNullOrEmpty(segment)) {
|
if (pathSegments.isEmpty() && !isNullOrEmpty(host) && !isNullOrEmpty(segment)) {
|
||||||
pathSegments.add(EMPTY_SEGMENT);
|
pathSegments.add(EMPTY_SEGMENT);
|
||||||
} else {
|
|
||||||
pathSegments.add(new PathSegment(segment));
|
|
||||||
}
|
}
|
||||||
|
pathSegments.add(new PathSegment(segment));
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1361,7 +1361,8 @@ public class URL implements Comparable<URL> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class URLWithFragmentComparator implements Comparator<URL> {
|
@SuppressWarnings("serial")
|
||||||
|
private static class URLWithFragmentComparator implements Comparator<URL>, Serializable {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int compare(URL o1, URL o2) {
|
public int compare(URL o1, URL o2) {
|
||||||
|
@ -1369,7 +1370,8 @@ public class URL implements Comparable<URL> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class URLWithoutFragmentComparator implements Comparator<URL> {
|
@SuppressWarnings("serial")
|
||||||
|
private static class URLWithoutFragmentComparator implements Comparator<URL>, Serializable {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int compare(URL o1, URL o2) {
|
public int compare(URL o1, URL o2) {
|
||||||
|
@ -1377,37 +1379,6 @@ public class URL implements Comparable<URL> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* A pair for matrix params.
|
|
||||||
*
|
|
||||||
* @param <K> key
|
|
||||||
* @param <V> value
|
|
||||||
*/
|
|
||||||
public static class Pair<K, V> {
|
|
||||||
|
|
||||||
private final K first;
|
|
||||||
|
|
||||||
private final V second;
|
|
||||||
|
|
||||||
Pair(K first, V second) {
|
|
||||||
this.first = first;
|
|
||||||
this.second = second;
|
|
||||||
}
|
|
||||||
|
|
||||||
public K getFirst() {
|
|
||||||
return first;
|
|
||||||
}
|
|
||||||
|
|
||||||
public V getSecond() {
|
|
||||||
return second;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return first + "=" + second;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A path segment with associated matrix params, if any.
|
* A path segment with associated matrix params, if any.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -3,6 +3,7 @@ package org.xbib.net;
|
||||||
/**
|
/**
|
||||||
* URL syntax exception.
|
* URL syntax exception.
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("serial")
|
||||||
public class URLSyntaxException extends Exception {
|
public class URLSyntaxException extends Exception {
|
||||||
|
|
||||||
URLSyntaxException(String message) {
|
URLSyntaxException(String message) {
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
package org.xbib.net.path;
|
package org.xbib.net.path;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Path pattern comparator.
|
* Path pattern comparator.
|
||||||
*/
|
*/
|
||||||
public class PathPatternComparator implements Comparator<String> {
|
@SuppressWarnings("serial")
|
||||||
|
public class PathPatternComparator implements Comparator<String>, Serializable {
|
||||||
|
|
||||||
private final String path;
|
private final String path;
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@ import java.util.regex.Pattern;
|
||||||
* path is resolved, a map from parameter names to raw String values is returned as part of the
|
* path is resolved, a map from parameter names to raw String values is returned as part of the
|
||||||
* result. Null values are not acceptable values in this trie. Parameter names can only contain
|
* result. Null values are not acceptable values in this trie. Parameter names can only contain
|
||||||
* alphanumeric characters or underscores, and cannot start with a numeric.
|
* alphanumeric characters or underscores, and cannot start with a numeric.
|
||||||
|
* @param <T> type
|
||||||
*/
|
*/
|
||||||
public class PathTrie<T> {
|
public class PathTrie<T> {
|
||||||
|
|
||||||
|
@ -100,6 +101,7 @@ public class PathTrie<T> {
|
||||||
/**
|
/**
|
||||||
* The resulting information for a successful path resolution, which includes the value to which
|
* The resulting information for a successful path resolution, which includes the value to which
|
||||||
* the path maps, as well as the raw (but URL decoded) string values of all path parameters.
|
* the path maps, as well as the raw (but URL decoded) string values of all path parameters.
|
||||||
|
* @param <T> type
|
||||||
*/
|
*/
|
||||||
public static class Result<T> {
|
public static class Result<T> {
|
||||||
|
|
||||||
|
@ -151,12 +153,13 @@ public class PathTrie<T> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A builder for creating a {@link PathTrie}, which is immutable.
|
* A builder for creating a {@link PathTrie}, which is immutable.
|
||||||
|
* @param <T> type
|
||||||
*/
|
*/
|
||||||
public static class Builder<T> {
|
public static class Builder<T> {
|
||||||
|
|
||||||
private final Map<String, Builder<T>> subBuilders = new LinkedHashMap<>();
|
private final Map<String, Builder<T>> subBuilders = new LinkedHashMap<>();
|
||||||
|
|
||||||
private final Map<String, MethodInfo<T>> httpMethodMap =new LinkedHashMap<>();
|
private final Map<String, MethodInfo<T>> httpMethodMap = new LinkedHashMap<>();
|
||||||
|
|
||||||
private final boolean throwOnConflict;
|
private final boolean throwOnConflict;
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ class ParseBodyTest {
|
||||||
QueryParameters queryParameters = new QueryParameters(100);
|
QueryParameters queryParameters = new QueryParameters(100);
|
||||||
List<String> list = new ArrayList<>();
|
List<String> list = new ArrayList<>();
|
||||||
for (int i = 0; i < 200; i++) {
|
for (int i = 0; i < 200; i++) {
|
||||||
list.add("a" + i + "=b" + i );
|
list.add("a" + i + "=b" + i);
|
||||||
}
|
}
|
||||||
String body = String.join("&", list);
|
String body = String.join("&", list);
|
||||||
queryParameters.addPercentEncodedBody(body);
|
queryParameters.addPercentEncodedBody(body);
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
/**
|
||||||
|
* Classes for parsing bodies.
|
||||||
|
*/
|
||||||
|
package org.xbib.net.body;
|
||||||
|
|
|
@ -4,7 +4,6 @@ import com.fasterxml.jackson.core.JsonParser;
|
||||||
import com.fasterxml.jackson.databind.JsonNode;
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import com.fasterxml.jackson.databind.ObjectReader;
|
import com.fasterxml.jackson.databind.ObjectReader;
|
||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.xbib.net.template.expression.ExpressionType;
|
import org.xbib.net.template.expression.ExpressionType;
|
||||||
import org.xbib.net.template.expression.TemplateExpression;
|
import org.xbib.net.template.expression.TemplateExpression;
|
||||||
|
@ -24,12 +23,6 @@ import org.xbib.net.template.vars.values.NullValue;
|
||||||
import org.xbib.net.template.vars.values.ScalarValue;
|
import org.xbib.net.template.vars.values.ScalarValue;
|
||||||
import org.xbib.net.template.vars.values.VariableValue;
|
import org.xbib.net.template.vars.values.VariableValue;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertSame;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
import static org.junit.jupiter.api.Assertions.fail;
|
|
||||||
|
|
||||||
import java.nio.CharBuffer;
|
import java.nio.CharBuffer;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
@ -39,6 +32,12 @@ import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertSame;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
import static org.junit.jupiter.api.Assertions.fail;
|
||||||
|
|
||||||
class URITemplateTest {
|
class URITemplateTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
Loading…
Reference in a new issue