in juneau-core/juneau-marshall/src/main/java/org/apache/juneau/UriResolver.java [163:263]
public Appendable append(Appendable a, Object o) {
try {
String uri = stringify(o);
uri = nullIfEmpty(uri);
boolean needsNormalize = hasDotSegments(uri) && resolution != null;
// Absolute paths are not changed.
if (isAbsoluteUri(uri))
return a.append(needsNormalize ? normalize(uri) : uri);
if (resolution == NONE && ! isSpecialUri(uri))
return a.append(emptyIfNull(uri));
if (resolution == ROOT_RELATIVE && startsWith(uri, '/'))
return a.append(needsNormalize ? normalize(uri) : uri);
Appendable a2 = needsNormalize ? new StringBuilder() : a;
// Root-relative path
if (startsWith(uri, '/')) {
if (authority != null)
a2.append(authority);
if (uri.length() != 1)
a2.append(uri);
else if (authority == null)
a2.append('/');
}
// Context-relative path
else if (uri != null && uri.startsWith("context:/")) {
if (resolution == ABSOLUTE && authority != null)
a2.append(authority);
if (contextRoot != null)
a2.append('/').append(contextRoot);
if (uri.length() > 9)
a2.append('/').append(uri.substring(9));
else if (contextRoot == null && (authority == null || resolution != ABSOLUTE))
a2.append('/');
}
// Resource-relative path
else if (uri != null && uri.startsWith("servlet:/")) {
if (resolution == ABSOLUTE && authority != null)
a2.append(authority);
if (contextRoot != null)
a2.append('/').append(contextRoot);
if (servletPath != null)
a2.append('/').append(servletPath);
if (uri.length() > 9)
a2.append('/').append(uri.substring(9));
else if (servletPath == null && contextRoot == null && (authority == null || resolution != ABSOLUTE))
a2.append('/');
}
// Request-relative path
else if (uri != null && uri.startsWith("request:/")) {
if (resolution == ABSOLUTE && authority != null)
a2.append(authority);
if (contextRoot != null)
a2.append('/').append(contextRoot);
if (servletPath != null)
a2.append('/').append(servletPath);
if (pathInfo != null)
a2.append('/').append(pathInfo);
if (uri.length() > 9)
a2.append('/').append(uri.substring(9));
else if (servletPath == null && contextRoot == null && pathInfo == null && (authority == null || resolution != ABSOLUTE))
a2.append('/');
}
// Relative path
else {
if (resolution == ABSOLUTE && authority != null)
a2.append(authority);
if (contextRoot != null)
a2.append('/').append(contextRoot);
if (servletPath != null)
a2.append('/').append(servletPath);
if (relativity == RESOURCE && uri != null)
a2.append('/').append(uri);
else if (relativity == PATH_INFO) {
if (uri == null) {
if (pathInfo != null)
a2.append('/').append(pathInfo);
} else {
if (parentPath != null)
a2.append('/').append(parentPath);
a2.append('/').append(uri);
}
}
else if (uri == null && contextRoot == null && servletPath == null && (authority == null || resolution != ABSOLUTE))
a2.append('/');
}
if (needsNormalize)
a.append(normalize(a2.toString()));
return a;
} catch (IOException e) {
throw asRuntimeException(e);
}
}