Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
S
spring-boot
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
DEMO
spring-boot
Commits
bb2058bf
Commit
bb2058bf
authored
Jan 17, 2017
by
Andy Wilkinson
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch '1.4.x' into 1.5.x
parents
7fa33cdd
2a5586fb
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
166 additions
and
52 deletions
+166
-52
JarResourceManager.java
...rk/boot/context/embedded/undertow/JarResourceManager.java
+79
-0
UndertowEmbeddedServletContainerFactory.java
...ded/undertow/UndertowEmbeddedServletContainerFactory.java
+1
-52
JarResourceManagerTests.java
...ot/context/embedded/undertow/JarResourceManagerTests.java
+86
-0
No files found.
spring-boot/src/main/java/org/springframework/boot/context/embedded/undertow/JarResourceManager.java
0 → 100644
View file @
bb2058bf
/*
* Copyright 2012-2017 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org
.
springframework
.
boot
.
context
.
embedded
.
undertow
;
import
java.io.File
;
import
java.io.IOException
;
import
java.net.URL
;
import
io.undertow.UndertowMessages
;
import
io.undertow.server.handlers.resource.Resource
;
import
io.undertow.server.handlers.resource.ResourceChangeListener
;
import
io.undertow.server.handlers.resource.ResourceManager
;
import
io.undertow.server.handlers.resource.URLResource
;
/**
* {@link ResourceManager} for JAR resources.
*
* @author Ivan Sopov
* @author Andy Wilkinson
*/
class
JarResourceManager
implements
ResourceManager
{
private
final
String
jarPath
;
JarResourceManager
(
File
jarFile
)
{
this
(
jarFile
.
getAbsolutePath
());
}
JarResourceManager
(
String
jarPath
)
{
this
.
jarPath
=
jarPath
;
}
@Override
public
Resource
getResource
(
String
path
)
throws
IOException
{
URL
url
=
new
URL
(
"jar:file:"
+
this
.
jarPath
+
"!"
+
(
path
.
startsWith
(
"/"
)
?
path
:
"/"
+
path
));
URLResource
resource
=
new
URLResource
(
url
,
url
.
openConnection
(),
path
);
if
(
resource
.
getContentLength
()
<
0
)
{
return
null
;
}
return
resource
;
}
@Override
public
boolean
isResourceChangeListenerSupported
()
{
return
false
;
}
@Override
public
void
registerResourceChangeListener
(
ResourceChangeListener
listener
)
{
throw
UndertowMessages
.
MESSAGES
.
resourceChangeListenerNotSupported
();
}
@Override
public
void
removeResourceChangeListener
(
ResourceChangeListener
listener
)
{
throw
UndertowMessages
.
MESSAGES
.
resourceChangeListenerNotSupported
();
}
@Override
public
void
close
()
throws
IOException
{
}
}
spring-boot/src/main/java/org/springframework/boot/context/embedded/undertow/UndertowEmbeddedServletContainerFactory.java
View file @
bb2058bf
/*
* Copyright 2012-201
6
the original author or authors.
* Copyright 2012-201
7
the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
...
...
@@ -43,17 +43,13 @@ import javax.servlet.ServletException;
import
io.undertow.Undertow
;
import
io.undertow.Undertow.Builder
;
import
io.undertow.UndertowMessages
;
import
io.undertow.server.HandlerWrapper
;
import
io.undertow.server.HttpHandler
;
import
io.undertow.server.handlers.accesslog.AccessLogHandler
;
import
io.undertow.server.handlers.accesslog.AccessLogReceiver
;
import
io.undertow.server.handlers.accesslog.DefaultAccessLogReceiver
;
import
io.undertow.server.handlers.resource.FileResourceManager
;
import
io.undertow.server.handlers.resource.Resource
;
import
io.undertow.server.handlers.resource.ResourceChangeListener
;
import
io.undertow.server.handlers.resource.ResourceManager
;
import
io.undertow.server.handlers.resource.URLResource
;
import
io.undertow.server.session.SessionManager
;
import
io.undertow.servlet.Servlets
;
import
io.undertow.servlet.api.DeploymentInfo
;
...
...
@@ -603,53 +599,6 @@ public class UndertowEmbeddedServletContainerFactory
this
.
useForwardHeaders
=
useForwardHeaders
;
}
/**
* Undertow {@link ResourceManager} for JAR resources.
*/
private
static
class
JarResourceManager
implements
ResourceManager
{
private
final
String
jarPath
;
JarResourceManager
(
File
jarFile
)
{
this
(
jarFile
.
getAbsolutePath
());
}
JarResourceManager
(
String
jarPath
)
{
this
.
jarPath
=
jarPath
;
}
@Override
public
Resource
getResource
(
String
path
)
throws
IOException
{
URL
url
=
new
URL
(
"jar:file:"
+
this
.
jarPath
+
"!"
+
path
);
URLResource
resource
=
new
URLResource
(
url
,
url
.
openConnection
(),
path
);
if
(
resource
.
getContentLength
()
<
0
)
{
return
null
;
}
return
resource
;
}
@Override
public
boolean
isResourceChangeListenerSupported
()
{
return
false
;
}
@Override
public
void
registerResourceChangeListener
(
ResourceChangeListener
listener
)
{
throw
UndertowMessages
.
MESSAGES
.
resourceChangeListenerNotSupported
();
}
@Override
public
void
removeResourceChangeListener
(
ResourceChangeListener
listener
)
{
throw
UndertowMessages
.
MESSAGES
.
resourceChangeListenerNotSupported
();
}
@Override
public
void
close
()
throws
IOException
{
}
}
/**
* {@link ServletContainerInitializer} to initialize {@link ServletContextInitializer
* ServletContextInitializers}.
...
...
spring-boot/src/test/java/org/springframework/boot/context/embedded/undertow/JarResourceManagerTests.java
0 → 100644
View file @
bb2058bf
/*
* Copyright 2012-2017 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org
.
springframework
.
boot
.
context
.
embedded
.
undertow
;
import
java.io.File
;
import
java.io.FileOutputStream
;
import
java.io.IOException
;
import
java.util.jar.JarOutputStream
;
import
java.util.zip.ZipEntry
;
import
io.undertow.server.handlers.resource.Resource
;
import
io.undertow.server.handlers.resource.ResourceManager
;
import
org.junit.Before
;
import
org.junit.Rule
;
import
org.junit.Test
;
import
org.junit.rules.TemporaryFolder
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
/**
* Tests for {@link JarResourceManager}.
*
* @author Andy Wilkinson
*/
public
class
JarResourceManagerTests
{
@Rule
public
TemporaryFolder
temp
=
new
TemporaryFolder
();
private
ResourceManager
resourceManager
;
@Before
public
void
createJar
()
throws
IOException
{
File
jar
=
this
.
temp
.
newFile
();
JarOutputStream
out
=
new
JarOutputStream
(
new
FileOutputStream
(
jar
));
out
.
putNextEntry
(
new
ZipEntry
(
"hello.txt"
));
out
.
write
(
"hello"
.
getBytes
());
out
.
close
();
this
.
resourceManager
=
new
JarResourceManager
(
jar
);
}
@Test
public
void
emptyPathIsHandledCorrectly
()
throws
IOException
{
Resource
resource
=
this
.
resourceManager
.
getResource
(
""
);
assertThat
(
resource
).
isNotNull
();
assertThat
(
resource
.
isDirectory
()).
isTrue
();
}
@Test
public
void
rootPathIsHandledCorrectly
()
throws
IOException
{
Resource
resource
=
this
.
resourceManager
.
getResource
(
"/"
);
assertThat
(
resource
).
isNotNull
();
assertThat
(
resource
.
isDirectory
()).
isTrue
();
}
@Test
public
void
resourceIsFoundInJarFile
()
throws
IOException
{
Resource
resource
=
this
.
resourceManager
.
getResource
(
"/hello.txt"
);
assertThat
(
resource
).
isNotNull
();
assertThat
(
resource
.
isDirectory
()).
isFalse
();
assertThat
(
resource
.
getContentLength
()).
isEqualTo
(
5
);
}
@Test
public
void
resourceIsFoundInJarFileWithoutLeadingSlash
()
throws
IOException
{
Resource
resource
=
this
.
resourceManager
.
getResource
(
"hello.txt"
);
assertThat
(
resource
).
isNotNull
();
assertThat
(
resource
.
isDirectory
()).
isFalse
();
assertThat
(
resource
.
getContentLength
()).
isEqualTo
(
5
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment