class org.springframework.web.servlet.function.PathResourceLookupFunction implements java.util.function.Function<org.springframework.web.servlet.function.ServerRequest, java.util.Optional<org.springframework.core.io.Resource>>
minor version: 0
major version: 59
flags: flags: (0x0020) ACC_SUPER
this_class: org.springframework.web.servlet.function.PathResourceLookupFunction
super_class: java.lang.Object
{
private final org.springframework.web.util.pattern.PathPattern pattern;
descriptor: Lorg/springframework/web/util/pattern/PathPattern;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final org.springframework.core.io.Resource location;
descriptor: Lorg/springframework/core/io/Resource;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
public void <init>(java.lang.String, org.springframework.core.io.Resource);
descriptor: (Ljava/lang/String;Lorg/springframework/core/io/Resource;)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=3, args_size=3
start local 0 start local 1 start local 2 0: aload 0
invokespecial java.lang.Object.<init>:()V
1: aload 1
ldc "'pattern' must not be empty"
invokestatic org.springframework.util.Assert.hasLength:(Ljava/lang/String;Ljava/lang/String;)V
2: aload 2
ldc "'location' must not be null"
invokestatic org.springframework.util.Assert.notNull:(Ljava/lang/Object;Ljava/lang/String;)V
3: aload 0
getstatic org.springframework.web.util.pattern.PathPatternParser.defaultInstance:Lorg/springframework/web/util/pattern/PathPatternParser;
aload 1
invokevirtual org.springframework.web.util.pattern.PathPatternParser.parse:(Ljava/lang/String;)Lorg/springframework/web/util/pattern/PathPattern;
putfield org.springframework.web.servlet.function.PathResourceLookupFunction.pattern:Lorg/springframework/web/util/pattern/PathPattern;
4: aload 0
aload 2
putfield org.springframework.web.servlet.function.PathResourceLookupFunction.location:Lorg/springframework/core/io/Resource;
5: return
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 6 0 this Lorg/springframework/web/servlet/function/PathResourceLookupFunction;
0 6 1 pattern Ljava/lang/String;
0 6 2 location Lorg/springframework/core/io/Resource;
MethodParameters:
Name Flags
pattern
location
public java.util.Optional<org.springframework.core.io.Resource> apply(org.springframework.web.servlet.function.ServerRequest);
descriptor: (Lorg/springframework/web/servlet/function/ServerRequest;)Ljava/util/Optional;
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=5, args_size=2
start local 0 start local 1 0: aload 1
invokeinterface org.springframework.web.servlet.function.ServerRequest.requestPath:()Lorg/springframework/http/server/RequestPath;
invokeinterface org.springframework.http.server.RequestPath.pathWithinApplication:()Lorg/springframework/http/server/PathContainer;
astore 2
start local 2 1: aload 0
getfield org.springframework.web.servlet.function.PathResourceLookupFunction.pattern:Lorg/springframework/web/util/pattern/PathPattern;
aload 2
invokevirtual org.springframework.web.util.pattern.PathPattern.matches:(Lorg/springframework/http/server/PathContainer;)Z
ifne 3
2: invokestatic java.util.Optional.empty:()Ljava/util/Optional;
areturn
3: StackMap locals: org.springframework.http.server.PathContainer
StackMap stack:
aload 0
getfield org.springframework.web.servlet.function.PathResourceLookupFunction.pattern:Lorg/springframework/web/util/pattern/PathPattern;
aload 2
invokevirtual org.springframework.web.util.pattern.PathPattern.extractPathWithinPattern:(Lorg/springframework/http/server/PathContainer;)Lorg/springframework/http/server/PathContainer;
astore 2
4: aload 0
aload 2
invokeinterface org.springframework.http.server.PathContainer.value:()Ljava/lang/String;
invokevirtual org.springframework.web.servlet.function.PathResourceLookupFunction.processPath:(Ljava/lang/String;)Ljava/lang/String;
astore 3
start local 3 5: aload 3
ldc "%"
invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
ifeq 7
6: aload 3
getstatic java.nio.charset.StandardCharsets.UTF_8:Ljava/nio/charset/Charset;
invokestatic org.springframework.util.StringUtils.uriDecode:(Ljava/lang/String;Ljava/nio/charset/Charset;)Ljava/lang/String;
astore 3
7: StackMap locals: java.lang.String
StackMap stack:
aload 3
invokestatic org.springframework.util.StringUtils.hasLength:(Ljava/lang/String;)Z
ifeq 8
aload 0
aload 3
invokevirtual org.springframework.web.servlet.function.PathResourceLookupFunction.isInvalidPath:(Ljava/lang/String;)Z
ifeq 9
8: StackMap locals:
StackMap stack:
invokestatic java.util.Optional.empty:()Ljava/util/Optional;
areturn
9: StackMap locals:
StackMap stack:
aload 0
getfield org.springframework.web.servlet.function.PathResourceLookupFunction.location:Lorg/springframework/core/io/Resource;
aload 3
invokeinterface org.springframework.core.io.Resource.createRelative:(Ljava/lang/String;)Lorg/springframework/core/io/Resource;
astore 4
start local 4 10: aload 4
invokeinterface org.springframework.core.io.Resource.exists:()Z
ifeq 13
aload 4
invokeinterface org.springframework.core.io.Resource.isReadable:()Z
ifeq 13
aload 0
aload 4
invokevirtual org.springframework.web.servlet.function.PathResourceLookupFunction.isResourceUnderLocation:(Lorg/springframework/core/io/Resource;)Z
ifeq 13
11: aload 4
invokestatic java.util.Optional.of:(Ljava/lang/Object;)Ljava/util/Optional;
12: areturn
13: StackMap locals: org.springframework.core.io.Resource
StackMap stack:
invokestatic java.util.Optional.empty:()Ljava/util/Optional;
14: areturn
end local 4 15: StackMap locals: org.springframework.web.servlet.function.PathResourceLookupFunction org.springframework.web.servlet.function.ServerRequest org.springframework.http.server.PathContainer java.lang.String
StackMap stack: java.io.IOException
astore 4
start local 4 16: new java.io.UncheckedIOException
dup
aload 4
invokespecial java.io.UncheckedIOException.<init>:(Ljava/io/IOException;)V
athrow
end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 17 0 this Lorg/springframework/web/servlet/function/PathResourceLookupFunction;
0 17 1 request Lorg/springframework/web/servlet/function/ServerRequest;
1 17 2 pathContainer Lorg/springframework/http/server/PathContainer;
5 17 3 path Ljava/lang/String;
10 15 4 resource Lorg/springframework/core/io/Resource;
16 17 4 ex Ljava/io/IOException;
Exception table:
from to target type
9 12 15 Class java.io.IOException
13 14 15 Class java.io.IOException
Signature: (Lorg/springframework/web/servlet/function/ServerRequest;)Ljava/util/Optional<Lorg/springframework/core/io/Resource;>;
MethodParameters:
Name Flags
request
private java.lang.String processPath(java.lang.String);
descriptor: (Ljava/lang/String;)Ljava/lang/String;
flags: (0x0002) ACC_PRIVATE
Code:
stack=3, locals=4, args_size=2
start local 0 start local 1 0: iconst_0
istore 2
start local 2 1: iconst_0
istore 3
start local 3 2: goto 14
3: StackMap locals: int int
StackMap stack:
aload 1
iload 3
invokevirtual java.lang.String.charAt:(I)C
bipush 47
if_icmpne 6
4: iconst_1
istore 2
5: goto 13
6: StackMap locals:
StackMap stack:
aload 1
iload 3
invokevirtual java.lang.String.charAt:(I)C
bipush 32
if_icmple 13
aload 1
iload 3
invokevirtual java.lang.String.charAt:(I)C
bipush 127
if_icmpeq 13
7: iload 3
ifeq 8
iload 3
iconst_1
if_icmpne 9
iload 2
ifeq 9
8: StackMap locals:
StackMap stack:
aload 1
areturn
9: StackMap locals:
StackMap stack:
iload 2
ifeq 10
new java.lang.StringBuilder
dup
ldc "/"
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
aload 1
iload 3
invokevirtual java.lang.String.substring:(I)Ljava/lang/String;
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
goto 11
StackMap locals:
StackMap stack:
10: aload 1
iload 3
invokevirtual java.lang.String.substring:(I)Ljava/lang/String;
StackMap locals:
StackMap stack: java.lang.String
11: astore 1
12: aload 1
areturn
13: StackMap locals:
StackMap stack:
iinc 3 1
StackMap locals:
StackMap stack:
14: iload 3
aload 1
invokevirtual java.lang.String.length:()I
if_icmplt 3
end local 3 15: iload 2
ifeq 16
ldc "/"
goto 17
StackMap locals:
StackMap stack:
16: ldc ""
StackMap locals:
StackMap stack: java.lang.String
17: areturn
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 18 0 this Lorg/springframework/web/servlet/function/PathResourceLookupFunction;
0 18 1 path Ljava/lang/String;
1 18 2 slash Z
2 15 3 i I
MethodParameters:
Name Flags
path
private boolean isInvalidPath(java.lang.String);
descriptor: (Ljava/lang/String;)Z
flags: (0x0002) ACC_PRIVATE
Code:
stack=2, locals=3, args_size=2
start local 0 start local 1 0: aload 1
ldc "WEB-INF"
invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
ifne 1
aload 1
ldc "META-INF"
invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
ifeq 2
1: StackMap locals:
StackMap stack:
iconst_1
ireturn
2: StackMap locals:
StackMap stack:
aload 1
ldc ":/"
invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
ifeq 8
3: aload 1
iconst_0
invokevirtual java.lang.String.charAt:(I)C
bipush 47
if_icmpne 4
aload 1
iconst_1
invokevirtual java.lang.String.substring:(I)Ljava/lang/String;
goto 5
StackMap locals:
StackMap stack:
4: aload 1
StackMap locals:
StackMap stack: java.lang.String
5: astore 2
start local 2 6: aload 2
invokestatic org.springframework.util.ResourceUtils.isUrl:(Ljava/lang/String;)Z
ifne 7
aload 2
ldc "url:"
invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
ifeq 8
7: StackMap locals: java.lang.String
StackMap stack:
iconst_1
ireturn
end local 2 8: StackMap locals:
StackMap stack:
aload 1
ldc ".."
invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
ifeq 9
aload 1
invokestatic org.springframework.util.StringUtils.cleanPath:(Ljava/lang/String;)Ljava/lang/String;
ldc "../"
invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
ifeq 9
iconst_1
ireturn
StackMap locals:
StackMap stack:
9: iconst_0
ireturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 10 0 this Lorg/springframework/web/servlet/function/PathResourceLookupFunction;
0 10 1 path Ljava/lang/String;
6 8 2 relativePath Ljava/lang/String;
MethodParameters:
Name Flags
path
private boolean isResourceUnderLocation(org.springframework.core.io.Resource);
descriptor: (Lorg/springframework/core/io/Resource;)Z
flags: (0x0002) ACC_PRIVATE
Code:
stack=3, locals=4, args_size=2
start local 0 start local 1 0: aload 1
invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
aload 0
getfield org.springframework.web.servlet.function.PathResourceLookupFunction.location:Lorg/springframework/core/io/Resource;
invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
if_acmpeq 2
1: iconst_0
ireturn
2: StackMap locals:
StackMap stack:
aload 1
instanceof org.springframework.core.io.UrlResource
ifeq 6
3: aload 1
invokeinterface org.springframework.core.io.Resource.getURL:()Ljava/net/URL;
invokevirtual java.net.URL.toExternalForm:()Ljava/lang/String;
astore 2
start local 2 4: aload 0
getfield org.springframework.web.servlet.function.PathResourceLookupFunction.location:Lorg/springframework/core/io/Resource;
invokeinterface org.springframework.core.io.Resource.getURL:()Ljava/net/URL;
invokevirtual java.net.URL.toString:()Ljava/lang/String;
invokestatic org.springframework.util.StringUtils.cleanPath:(Ljava/lang/String;)Ljava/lang/String;
astore 3
start local 3 5: goto 12
end local 3 end local 2 6: StackMap locals:
StackMap stack:
aload 1
instanceof org.springframework.core.io.ClassPathResource
ifeq 10
7: aload 1
checkcast org.springframework.core.io.ClassPathResource
invokevirtual org.springframework.core.io.ClassPathResource.getPath:()Ljava/lang/String;
astore 2
start local 2 8: aload 0
getfield org.springframework.web.servlet.function.PathResourceLookupFunction.location:Lorg/springframework/core/io/Resource;
checkcast org.springframework.core.io.ClassPathResource
invokevirtual org.springframework.core.io.ClassPathResource.getPath:()Ljava/lang/String;
invokestatic org.springframework.util.StringUtils.cleanPath:(Ljava/lang/String;)Ljava/lang/String;
astore 3
start local 3 9: goto 12
end local 3 end local 2 10: StackMap locals:
StackMap stack:
aload 1
invokeinterface org.springframework.core.io.Resource.getURL:()Ljava/net/URL;
invokevirtual java.net.URL.getPath:()Ljava/lang/String;
astore 2
start local 2 11: aload 0
getfield org.springframework.web.servlet.function.PathResourceLookupFunction.location:Lorg/springframework/core/io/Resource;
invokeinterface org.springframework.core.io.Resource.getURL:()Ljava/net/URL;
invokevirtual java.net.URL.getPath:()Ljava/lang/String;
invokestatic org.springframework.util.StringUtils.cleanPath:(Ljava/lang/String;)Ljava/lang/String;
astore 3
start local 3 12: StackMap locals: java.lang.String java.lang.String
StackMap stack:
aload 3
aload 2
invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
ifeq 14
13: iconst_1
ireturn
14: StackMap locals:
StackMap stack:
aload 3
ldc "/"
invokevirtual java.lang.String.endsWith:(Ljava/lang/String;)Z
ifne 15
aload 3
invokevirtual java.lang.String.isEmpty:()Z
ifeq 16
StackMap locals:
StackMap stack:
15: aload 3
goto 17
StackMap locals:
StackMap stack:
16: new java.lang.StringBuilder
dup
aload 3
invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
ldc "/"
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
StackMap locals:
StackMap stack: java.lang.String
17: astore 3
18: aload 2
aload 3
invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
ifne 20
19: iconst_0
ireturn
20: StackMap locals:
StackMap stack:
aload 2
ldc "%"
invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
ifeq 23
21: aload 2
getstatic java.nio.charset.StandardCharsets.UTF_8:Ljava/nio/charset/Charset;
invokestatic org.springframework.util.StringUtils.uriDecode:(Ljava/lang/String;Ljava/nio/charset/Charset;)Ljava/lang/String;
ldc "../"
invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
ifeq 23
22: iconst_0
ireturn
StackMap locals:
StackMap stack:
23: iconst_1
ireturn
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 24 0 this Lorg/springframework/web/servlet/function/PathResourceLookupFunction;
0 24 1 resource Lorg/springframework/core/io/Resource;
4 6 2 resourcePath Ljava/lang/String;
8 10 2 resourcePath Ljava/lang/String;
11 24 2 resourcePath Ljava/lang/String;
5 6 3 locationPath Ljava/lang/String;
9 10 3 locationPath Ljava/lang/String;
12 24 3 locationPath Ljava/lang/String;
Exceptions:
throws java.io.IOException
MethodParameters:
Name Flags
resource
public java.lang.String toString();
descriptor: ()Ljava/lang/String;
flags: (0x0001) ACC_PUBLIC
Code:
stack=2, locals=1, args_size=1
start local 0 0: new java.lang.StringBuilder
dup
invokespecial java.lang.StringBuilder.<init>:()V
aload 0
getfield org.springframework.web.servlet.function.PathResourceLookupFunction.pattern:Lorg/springframework/web/util/pattern/PathPattern;
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
ldc " -> "
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
aload 0
getfield org.springframework.web.servlet.function.PathResourceLookupFunction.location:Lorg/springframework/core/io/Resource;
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
areturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lorg/springframework/web/servlet/function/PathResourceLookupFunction;
public java.lang.Object apply(java.lang.Object);
descriptor: (Ljava/lang/Object;)Ljava/lang/Object;
flags: (0x1041) ACC_PUBLIC, ACC_BRIDGE, ACC_SYNTHETIC
Code:
stack=2, locals=2, args_size=2
0: aload 0
aload 1
checkcast org.springframework.web.servlet.function.ServerRequest
invokevirtual org.springframework.web.servlet.function.PathResourceLookupFunction.apply:(Lorg/springframework/web/servlet/function/ServerRequest;)Ljava/util/Optional;
areturn
LocalVariableTable:
Start End Slot Name Signature
}
Signature: Ljava/lang/Object;Ljava/util/function/Function<Lorg/springframework/web/servlet/function/ServerRequest;Ljava/util/Optional<Lorg/springframework/core/io/Resource;>;>;
SourceFile: "PathResourceLookupFunction.java"