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
a6e4744c
Commit
a6e4744c
authored
Nov 18, 2014
by
Phillip Webb
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixup line endings
parent
b5832622
Changes
5
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
753 additions
and
753 deletions
+753
-753
pom.xml
spring-boot-starters/spring-boot-starter-undertow/pom.xml
+41
-41
MANIFEST.MF
...oot-starters/spring-boot-starter-web/META-INF/MANIFEST.MF
+3
-3
UndertowEmbeddedServletContainer.java
...t/embedded/undertow/UndertowEmbeddedServletContainer.java
+106
-106
UndertowEmbeddedServletContainerFactory.java
...ded/undertow/UndertowEmbeddedServletContainerFactory.java
+507
-507
UndertowEmbeddedServletContainerFactoryTests.java
...ndertow/UndertowEmbeddedServletContainerFactoryTests.java
+96
-96
No files found.
spring-boot-starters/spring-boot-starter-undertow/pom.xml
View file @
a6e4744c
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>
4.0.0
</modelVersion>
<modelVersion>
4.0.0
</modelVersion>
<parent>
<parent>
<groupId>
org.springframework.boot
</groupId>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starters
</artifactId>
<artifactId>
spring-boot-starters
</artifactId>
<version>
1.2.0.BUILD-SNAPSHOT
</version>
<version>
1.2.0.BUILD-SNAPSHOT
</version>
</parent>
</parent>
<artifactId>
spring-boot-starter-undertow
</artifactId>
<artifactId>
spring-boot-starter-undertow
</artifactId>
<name>
Spring Boot Undertow Starter
</name>
<name>
Spring Boot Undertow Starter
</name>
<description>
Spring Boot Undertow Starter
</description>
<description>
Spring Boot Undertow Starter
</description>
<url>
http://projects.spring.io/spring-boot/
</url>
<url>
http://projects.spring.io/spring-boot/
</url>
<organization>
<organization>
<name>
Pivotal Software, Inc.
</name>
<name>
Pivotal Software, Inc.
</name>
<url>
http://www.spring.io
</url>
<url>
http://www.spring.io
</url>
</organization>
</organization>
<properties>
<properties>
<main.basedir>
${basedir}/../..
</main.basedir>
<main.basedir>
${basedir}/../..
</main.basedir>
</properties>
</properties>
<dependencies>
<dependencies>
<dependency>
<dependency>
<groupId>
io.undertow
</groupId>
<groupId>
io.undertow
</groupId>
<artifactId>
undertow-core
</artifactId>
<artifactId>
undertow-core
</artifactId>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>
io.undertow
</groupId>
<groupId>
io.undertow
</groupId>
<artifactId>
undertow-servlet
</artifactId>
<artifactId>
undertow-servlet
</artifactId>
<exclusions>
<exclusions>
<exclusion>
<exclusion>
<groupId>
org.jboss.spec.javax.servlet
</groupId>
<groupId>
org.jboss.spec.javax.servlet
</groupId>
<artifactId>
jboss-servlet-api_3.1_spec
</artifactId>
<artifactId>
jboss-servlet-api_3.1_spec
</artifactId>
</exclusion>
</exclusion>
</exclusions>
</exclusions>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>
javax.servlet
</groupId>
<groupId>
javax.servlet
</groupId>
<artifactId>
javax.servlet-api
</artifactId>
<artifactId>
javax.servlet-api
</artifactId>
</dependency>
</dependency>
</dependencies>
</dependencies>
</project>
</project>
spring-boot-starters/spring-boot-starter-web/META-INF/MANIFEST.MF
View file @
a6e4744c
Manifest-Version: 1.0
Manifest-Version: 1.0
Class-Path:
Class-Path:
spring-boot/src/main/java/org/springframework/boot/context/embedded/undertow/UndertowEmbeddedServletContainer.java
View file @
a6e4744c
/*
/*
* Copyright 2012-2014 the original author or authors.
* Copyright 2012-2014 the original author or authors.
*
*
* Licensed under the Apache License, Version 2.0 (the "License");
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* You may obtain a copy of the License at
*
*
* http://www.apache.org/licenses/LICENSE-2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
*
* Unless required by applicable law or agreed to in writing, software
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* See the License for the specific language governing permissions and
* limitations under the License.
* limitations under the License.
*/
*/
package
org
.
springframework
.
boot
.
context
.
embedded
.
undertow
;
package
org
.
springframework
.
boot
.
context
.
embedded
.
undertow
;
import
io.undertow.Handlers
;
import
io.undertow.Handlers
;
import
io.undertow.Undertow
;
import
io.undertow.Undertow
;
import
io.undertow.Undertow.Builder
;
import
io.undertow.Undertow.Builder
;
import
io.undertow.server.HttpHandler
;
import
io.undertow.server.HttpHandler
;
import
io.undertow.server.handlers.PathHandler
;
import
io.undertow.server.handlers.PathHandler
;
import
io.undertow.servlet.api.DeploymentManager
;
import
io.undertow.servlet.api.DeploymentManager
;
import
javax.servlet.ServletException
;
import
javax.servlet.ServletException
;
import
org.springframework.boot.context.embedded.EmbeddedServletContainer
;
import
org.springframework.boot.context.embedded.EmbeddedServletContainer
;
import
org.springframework.boot.context.embedded.EmbeddedServletContainerException
;
import
org.springframework.boot.context.embedded.EmbeddedServletContainerException
;
import
org.springframework.util.StringUtils
;
import
org.springframework.util.StringUtils
;
/**
/**
* {@link EmbeddedServletContainer} that can be used to control an embedded Undertow
* {@link EmbeddedServletContainer} that can be used to control an embedded Undertow
* server. Typically this class should be created using
* server. Typically this class should be created using
* {@link UndertowEmbeddedServletContainerFactory} and not directly.
* {@link UndertowEmbeddedServletContainerFactory} and not directly.
*
*
* @author Ivan Sopov
* @author Ivan Sopov
* @author Andy Wilkinson
* @author Andy Wilkinson
* @since 1.2.0
* @since 1.2.0
* @see UndertowEmbeddedServletContainer
* @see UndertowEmbeddedServletContainer
*/
*/
public
class
UndertowEmbeddedServletContainer
implements
EmbeddedServletContainer
{
public
class
UndertowEmbeddedServletContainer
implements
EmbeddedServletContainer
{
private
final
DeploymentManager
manager
;
private
final
DeploymentManager
manager
;
private
final
Builder
builder
;
private
final
Builder
builder
;
private
final
String
contextPath
;
private
final
String
contextPath
;
private
final
int
port
;
private
final
int
port
;
private
final
boolean
autoStart
;
private
final
boolean
autoStart
;
private
Undertow
undertow
;
private
Undertow
undertow
;
private
boolean
started
=
false
;
private
boolean
started
=
false
;
public
UndertowEmbeddedServletContainer
(
Builder
builder
,
DeploymentManager
manager
,
public
UndertowEmbeddedServletContainer
(
Builder
builder
,
DeploymentManager
manager
,
String
contextPath
,
int
port
,
boolean
autoStart
)
{
String
contextPath
,
int
port
,
boolean
autoStart
)
{
this
.
builder
=
builder
;
this
.
builder
=
builder
;
this
.
manager
=
manager
;
this
.
manager
=
manager
;
this
.
contextPath
=
contextPath
;
this
.
contextPath
=
contextPath
;
this
.
port
=
port
;
this
.
port
=
port
;
this
.
autoStart
=
autoStart
;
this
.
autoStart
=
autoStart
;
}
}
@Override
@Override
public
synchronized
void
start
()
throws
EmbeddedServletContainerException
{
public
synchronized
void
start
()
throws
EmbeddedServletContainerException
{
if
(!
this
.
autoStart
)
{
if
(!
this
.
autoStart
)
{
return
;
return
;
}
}
if
(
this
.
undertow
==
null
)
{
if
(
this
.
undertow
==
null
)
{
try
{
try
{
HttpHandler
servletHandler
=
this
.
manager
.
start
();
HttpHandler
servletHandler
=
this
.
manager
.
start
();
if
(
StringUtils
.
isEmpty
(
this
.
contextPath
))
{
if
(
StringUtils
.
isEmpty
(
this
.
contextPath
))
{
this
.
builder
.
setHandler
(
servletHandler
);
this
.
builder
.
setHandler
(
servletHandler
);
}
}
else
{
else
{
PathHandler
pathHandler
=
Handlers
.
path
().
addPrefixPath
(
PathHandler
pathHandler
=
Handlers
.
path
().
addPrefixPath
(
this
.
contextPath
,
servletHandler
);
this
.
contextPath
,
servletHandler
);
this
.
builder
.
setHandler
(
pathHandler
);
this
.
builder
.
setHandler
(
pathHandler
);
}
}
this
.
undertow
=
this
.
builder
.
build
();
this
.
undertow
=
this
.
builder
.
build
();
}
}
catch
(
ServletException
ex
)
{
catch
(
ServletException
ex
)
{
throw
new
EmbeddedServletContainerException
(
throw
new
EmbeddedServletContainerException
(
"Unable to start embdedded Undertow"
,
ex
);
"Unable to start embdedded Undertow"
,
ex
);
}
}
}
}
this
.
undertow
.
start
();
this
.
undertow
.
start
();
this
.
started
=
true
;
this
.
started
=
true
;
}
}
@Override
@Override
public
synchronized
void
stop
()
throws
EmbeddedServletContainerException
{
public
synchronized
void
stop
()
throws
EmbeddedServletContainerException
{
if
(
this
.
started
)
{
if
(
this
.
started
)
{
this
.
started
=
false
;
this
.
started
=
false
;
this
.
undertow
.
stop
();
this
.
undertow
.
stop
();
}
}
}
}
@Override
@Override
public
int
getPort
()
{
public
int
getPort
()
{
return
this
.
port
;
return
this
.
port
;
}
}
}
}
\ No newline at end of file
spring-boot/src/main/java/org/springframework/boot/context/embedded/undertow/UndertowEmbeddedServletContainerFactory.java
View file @
a6e4744c
This diff is collapsed.
Click to expand it.
spring-boot/src/test/java/org/springframework/boot/context/embedded/undertow/UndertowEmbeddedServletContainerFactoryTests.java
View file @
a6e4744c
/*
/*
* Copyright 2012-2014 the original author or authors.
* Copyright 2012-2014 the original author or authors.
*
*
* Licensed under the Apache License, Version 2.0 (the "License");
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* You may obtain a copy of the License at
*
*
* http://www.apache.org/licenses/LICENSE-2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
*
* Unless required by applicable law or agreed to in writing, software
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* See the License for the specific language governing permissions and
* limitations under the License.
* limitations under the License.
*/
*/
package
org
.
springframework
.
boot
.
context
.
embedded
.
undertow
;
package
org
.
springframework
.
boot
.
context
.
embedded
.
undertow
;
import
io.undertow.Undertow.Builder
;
import
io.undertow.Undertow.Builder
;
import
java.util.Arrays
;
import
java.util.Arrays
;
import
org.junit.Test
;
import
org.junit.Test
;
import
org.mockito.InOrder
;
import
org.mockito.InOrder
;
import
org.springframework.boot.context.embedded.AbstractEmbeddedServletContainerFactory
;
import
org.springframework.boot.context.embedded.AbstractEmbeddedServletContainerFactory
;
import
org.springframework.boot.context.embedded.AbstractEmbeddedServletContainerFactoryTests
;
import
org.springframework.boot.context.embedded.AbstractEmbeddedServletContainerFactoryTests
;
import
org.springframework.boot.context.embedded.ErrorPage
;
import
org.springframework.boot.context.embedded.ErrorPage
;
import
org.springframework.boot.context.embedded.ExampleServlet
;
import
org.springframework.boot.context.embedded.ExampleServlet
;
import
org.springframework.boot.context.embedded.ServletRegistrationBean
;
import
org.springframework.boot.context.embedded.ServletRegistrationBean
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.HttpStatus
;
import
static
org
.
hamcrest
.
Matchers
.
equalTo
;
import
static
org
.
hamcrest
.
Matchers
.
equalTo
;
import
static
org
.
junit
.
Assert
.
assertThat
;
import
static
org
.
junit
.
Assert
.
assertThat
;
import
static
org
.
mockito
.
Matchers
.
anyObject
;
import
static
org
.
mockito
.
Matchers
.
anyObject
;
import
static
org
.
mockito
.
Mockito
.
inOrder
;
import
static
org
.
mockito
.
Mockito
.
inOrder
;
import
static
org
.
mockito
.
Mockito
.
mock
;
import
static
org
.
mockito
.
Mockito
.
mock
;
/**
/**
* Tests for {@link UndertowEmbeddedServletContainerFactory} and
* Tests for {@link UndertowEmbeddedServletContainerFactory} and
* {@link UndertowEmbeddedServletContainer} .
* {@link UndertowEmbeddedServletContainer} .
*
*
* @author Ivan Sopov
* @author Ivan Sopov
* @author Andy Wilkinson
* @author Andy Wilkinson
*/
*/
public
class
UndertowEmbeddedServletContainerFactoryTests
extends
public
class
UndertowEmbeddedServletContainerFactoryTests
extends
AbstractEmbeddedServletContainerFactoryTests
{
AbstractEmbeddedServletContainerFactoryTests
{
@Override
@Override
protected
UndertowEmbeddedServletContainerFactory
getFactory
()
{
protected
UndertowEmbeddedServletContainerFactory
getFactory
()
{
return
new
UndertowEmbeddedServletContainerFactory
(
0
);
return
new
UndertowEmbeddedServletContainerFactory
(
0
);
}
}
@Test
@Test
public
void
errorPage404
()
throws
Exception
{
public
void
errorPage404
()
throws
Exception
{
AbstractEmbeddedServletContainerFactory
factory
=
getFactory
();
AbstractEmbeddedServletContainerFactory
factory
=
getFactory
();
factory
.
addErrorPages
(
new
ErrorPage
(
HttpStatus
.
NOT_FOUND
,
"/hello"
));
factory
.
addErrorPages
(
new
ErrorPage
(
HttpStatus
.
NOT_FOUND
,
"/hello"
));
this
.
container
=
factory
.
getEmbeddedServletContainer
(
new
ServletRegistrationBean
(
this
.
container
=
factory
.
getEmbeddedServletContainer
(
new
ServletRegistrationBean
(
new
ExampleServlet
(),
"/hello"
));
new
ExampleServlet
(),
"/hello"
));
this
.
container
.
start
();
this
.
container
.
start
();
assertThat
(
getResponse
(
getLocalUrl
(
"/hello"
)),
equalTo
(
"Hello World"
));
assertThat
(
getResponse
(
getLocalUrl
(
"/hello"
)),
equalTo
(
"Hello World"
));
assertThat
(
getResponse
(
getLocalUrl
(
"/not-found"
)),
equalTo
(
"Hello World"
));
assertThat
(
getResponse
(
getLocalUrl
(
"/not-found"
)),
equalTo
(
"Hello World"
));
}
}
@Test
@Test
public
void
setNullUndertowBuilderCustomizersThrows
()
{
public
void
setNullUndertowBuilderCustomizersThrows
()
{
UndertowEmbeddedServletContainerFactory
factory
=
getFactory
();
UndertowEmbeddedServletContainerFactory
factory
=
getFactory
();
this
.
thrown
.
expect
(
IllegalArgumentException
.
class
);
this
.
thrown
.
expect
(
IllegalArgumentException
.
class
);
this
.
thrown
.
expectMessage
(
"undertowBuilderCustomizers must not be null"
);
this
.
thrown
.
expectMessage
(
"undertowBuilderCustomizers must not be null"
);
factory
.
setUndertowBuilderCustomizers
(
null
);
factory
.
setUndertowBuilderCustomizers
(
null
);
}
}
@Test
@Test
public
void
addNullContextCustomizersThrows
()
{
public
void
addNullContextCustomizersThrows
()
{
UndertowEmbeddedServletContainerFactory
factory
=
getFactory
();
UndertowEmbeddedServletContainerFactory
factory
=
getFactory
();
this
.
thrown
.
expect
(
IllegalArgumentException
.
class
);
this
.
thrown
.
expect
(
IllegalArgumentException
.
class
);
this
.
thrown
.
expectMessage
(
"undertowBuilderCustomizers must not be null"
);
this
.
thrown
.
expectMessage
(
"undertowBuilderCustomizers must not be null"
);
factory
.
addUndertowBuilderCustomizers
((
UndertowBuilderCustomizer
[])
null
);
factory
.
addUndertowBuilderCustomizers
((
UndertowBuilderCustomizer
[])
null
);
}
}
@Test
@Test
public
void
builderCustomizers
()
throws
Exception
{
public
void
builderCustomizers
()
throws
Exception
{
UndertowEmbeddedServletContainerFactory
factory
=
getFactory
();
UndertowEmbeddedServletContainerFactory
factory
=
getFactory
();
UndertowBuilderCustomizer
[]
customizers
=
new
UndertowBuilderCustomizer
[
4
];
UndertowBuilderCustomizer
[]
customizers
=
new
UndertowBuilderCustomizer
[
4
];
for
(
int
i
=
0
;
i
<
customizers
.
length
;
i
++)
{
for
(
int
i
=
0
;
i
<
customizers
.
length
;
i
++)
{
customizers
[
i
]
=
mock
(
UndertowBuilderCustomizer
.
class
);
customizers
[
i
]
=
mock
(
UndertowBuilderCustomizer
.
class
);
}
}
factory
.
setUndertowBuilderCustomizers
(
Arrays
.
asList
(
customizers
[
0
],
factory
.
setUndertowBuilderCustomizers
(
Arrays
.
asList
(
customizers
[
0
],
customizers
[
1
]));
customizers
[
1
]));
factory
.
addUndertowBuilderCustomizers
(
customizers
[
2
],
customizers
[
3
]);
factory
.
addUndertowBuilderCustomizers
(
customizers
[
2
],
customizers
[
3
]);
this
.
container
=
factory
.
getEmbeddedServletContainer
();
this
.
container
=
factory
.
getEmbeddedServletContainer
();
InOrder
ordered
=
inOrder
((
Object
[])
customizers
);
InOrder
ordered
=
inOrder
((
Object
[])
customizers
);
for
(
UndertowBuilderCustomizer
customizer
:
customizers
)
{
for
(
UndertowBuilderCustomizer
customizer
:
customizers
)
{
ordered
.
verify
(
customizer
).
customize
((
Builder
)
anyObject
());
ordered
.
verify
(
customizer
).
customize
((
Builder
)
anyObject
());
}
}
}
}
}
}
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