}
return headers;
}
private PathInfo parseRequestUri(final String uri) throws BatchException {
PathInfoImpl pathInfo = new PathInfoImpl();
pathInfo.setServiceRoot(batchRequestPathInfo.getServiceRoot());
pathInfo.setPrecedingPathSegment(batchRequestPathInfo.getPrecedingSegments());
final String odataPathSegmentsAsString;
final String queryParametersAsString;
try {
Scanner uriScanner = new Scanner(uri);
uriScanner.useDelimiter(LF);
URI uriObject = new URI(uri);
if (uriObject.isAbsolute()) {
Pattern regexRequestUri = Pattern.compile(baseUri + "/([^/][^?]*)(\\?.*)?");
if (uriScanner.hasNext(regexRequestUri)) {
uriScanner.next(regexRequestUri);
MatchResult result = uriScanner.match();
if (result.groupCount() == 2) {
odataPathSegmentsAsString = result.group(1);
queryParametersAsString = result.group(2) != null ? result.group(2) : "";
} else {
uriScanner.close();
throw new BatchException(BatchException.INVALID_URI.addContent(currentLineNumber));
}
} else {
uriScanner.close();
throw new BatchException(BatchException.INVALID_URI.addContent(currentLineNumber));
}
} else {
Pattern regexRequestUri = Pattern.compile("([^/][^?]*)(\\?.*)?");
if (uriScanner.hasNext(regexRequestUri)) {
uriScanner.next(regexRequestUri);
MatchResult result = uriScanner.match();
if (result.groupCount() == 2) {
odataPathSegmentsAsString = result.group(1);
queryParametersAsString = result.group(2) != null ? result.group(2) : "";
} else {
uriScanner.close();
throw new BatchException(BatchException.INVALID_URI.addContent(currentLineNumber));
}
} else if (uriScanner.hasNext("/(.*)")) {
uriScanner.close();
throw new BatchException(BatchException.UNSUPPORTED_ABSOLUTE_PATH.addContent(currentLineNumber));
} else {
uriScanner.close();
throw new BatchException(BatchException.INVALID_URI.addContent(currentLineNumber));
}
}
uriScanner.close();
pathInfo.setODataPathSegment(parseODataPathSegments(odataPathSegmentsAsString));
if (!odataPathSegmentsAsString.startsWith("$")) {
String requestUri = baseUri + "/" + odataPathSegmentsAsString + queryParametersAsString;
pathInfo.setRequestUri(new URI(requestUri));
}
return pathInfo;
} catch (URISyntaxException e) {
throw new BatchException(BatchException.INVALID_URI.addContent(currentLineNumber), e);
}