Browse Source
Jersey 2 has some Spring support built in but it's a bit awkward to use in a Boot app, so autoconfiguration seems appropriate. The tests and sample show how to use it, but the short story is that any @Component can define JAX-RS endpoints via @GET etc. There's a sample for Jersey 1 as well (pay careful attention to the plugin configuration if you want to build an executable jar) Fixes gh-1651pull/1659/head
19 changed files with 770 additions and 0 deletions
@ -0,0 +1,106 @@
@@ -0,0 +1,106 @@
|
||||
/* |
||||
* Copyright 2012-2013 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.autoconfigure.jersey; |
||||
|
||||
import javax.annotation.PostConstruct; |
||||
import javax.servlet.ServletContext; |
||||
import javax.servlet.ServletException; |
||||
import javax.servlet.ServletRegistration; |
||||
import javax.ws.rs.ApplicationPath; |
||||
|
||||
import org.glassfish.jersey.server.ResourceConfig; |
||||
import org.glassfish.jersey.server.spring.SpringComponentProvider; |
||||
import org.glassfish.jersey.servlet.ServletContainer; |
||||
import org.glassfish.jersey.servlet.ServletProperties; |
||||
import org.springframework.beans.factory.ListableBeanFactory; |
||||
import org.springframework.beans.factory.annotation.Autowired; |
||||
import org.springframework.boot.autoconfigure.AutoConfigureBefore; |
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; |
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; |
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; |
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; |
||||
import org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration; |
||||
import org.springframework.boot.context.embedded.ServletRegistrationBean; |
||||
import org.springframework.context.annotation.Bean; |
||||
import org.springframework.context.annotation.Configuration; |
||||
import org.springframework.core.Ordered; |
||||
import org.springframework.core.annotation.AnnotationUtils; |
||||
import org.springframework.core.annotation.Order; |
||||
import org.springframework.web.WebApplicationInitializer; |
||||
import org.springframework.web.filter.RequestContextFilter; |
||||
|
||||
/** |
||||
* @author Dave Syer |
||||
* |
||||
*/ |
||||
@Configuration |
||||
@ConditionalOnClass({ SpringComponentProvider.class, ServletRegistration.class }) |
||||
@ConditionalOnBean(ResourceConfig.class) |
||||
@ConditionalOnWebApplication |
||||
@Order(Ordered.HIGHEST_PRECEDENCE) |
||||
@AutoConfigureBefore(DispatcherServletAutoConfiguration.class) |
||||
public class JerseyAutoConfiguration implements WebApplicationInitializer { |
||||
|
||||
@Autowired |
||||
private ListableBeanFactory context; |
||||
|
||||
@Autowired |
||||
private ResourceConfig config; |
||||
|
||||
private String path; |
||||
|
||||
@PostConstruct |
||||
public void path() { |
||||
path = findPath(AnnotationUtils.findAnnotation(config.getClass(), |
||||
ApplicationPath.class)); |
||||
} |
||||
|
||||
@Bean |
||||
@ConditionalOnMissingBean |
||||
public RequestContextFilter requestContextFilter() { |
||||
return new RequestContextFilter(); |
||||
} |
||||
|
||||
@Bean |
||||
@ConditionalOnMissingBean(name = "jerseyServletRegistration") |
||||
public ServletRegistrationBean jerseyServletRegistration() { |
||||
Class<? extends ResourceConfig> configType = config.getClass(); |
||||
ServletRegistrationBean registration = new ServletRegistrationBean( |
||||
new ServletContainer(), path); |
||||
registration.addInitParameter(ServletProperties.JAXRS_APPLICATION_CLASS, |
||||
configType.getName()); |
||||
registration.setName("jerseyServlet"); |
||||
return registration; |
||||
} |
||||
|
||||
@Override |
||||
public void onStartup(ServletContext servletContext) throws ServletException { |
||||
// We need to switch *off* the Jersey WebApplicationInitializer because it
|
||||
// will try and register a ContextLoaderListener which we don't need
|
||||
servletContext.setInitParameter("contextConfigLocation", "<NONE>"); |
||||
} |
||||
|
||||
private static String findPath(ApplicationPath annotation) { |
||||
// Jersey doesn't like to be the default servlet, so map to /* as a fallback
|
||||
if (annotation == null) { |
||||
return "/*"; |
||||
} |
||||
String path = annotation.value(); |
||||
return path.isEmpty() || path.equals("/") ? "/*" : path + "/*"; |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,99 @@
@@ -0,0 +1,99 @@
|
||||
/* |
||||
* Copyright 2012-2013 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.autoconfigure.jersey; |
||||
|
||||
import static org.junit.Assert.assertEquals; |
||||
|
||||
import java.lang.annotation.Documented; |
||||
import java.lang.annotation.ElementType; |
||||
import java.lang.annotation.Retention; |
||||
import java.lang.annotation.RetentionPolicy; |
||||
import java.lang.annotation.Target; |
||||
|
||||
import javax.ws.rs.ApplicationPath; |
||||
import javax.ws.rs.GET; |
||||
import javax.ws.rs.Path; |
||||
|
||||
import org.glassfish.jersey.server.ResourceConfig; |
||||
import org.junit.Test; |
||||
import org.junit.runner.RunWith; |
||||
import org.springframework.beans.factory.annotation.Value; |
||||
import org.springframework.boot.SpringApplication; |
||||
import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; |
||||
import org.springframework.boot.autoconfigure.jersey.CustomServletPathTests.Application; |
||||
import org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration; |
||||
import org.springframework.boot.autoconfigure.web.ServerPropertiesAutoConfiguration; |
||||
import org.springframework.boot.test.IntegrationTest; |
||||
import org.springframework.boot.test.SpringApplicationConfiguration; |
||||
import org.springframework.boot.test.TestRestTemplate; |
||||
import org.springframework.context.annotation.Import; |
||||
import org.springframework.http.HttpStatus; |
||||
import org.springframework.http.ResponseEntity; |
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; |
||||
import org.springframework.test.context.web.WebAppConfiguration; |
||||
import org.springframework.web.client.RestTemplate; |
||||
|
||||
@RunWith(SpringJUnit4ClassRunner.class) |
||||
@SpringApplicationConfiguration(classes = Application.class) |
||||
@IntegrationTest("server.port=0") |
||||
@WebAppConfiguration |
||||
public class CustomServletPathTests { |
||||
|
||||
@Value("${local.server.port}") |
||||
private int port; |
||||
|
||||
private RestTemplate restTemplate = new TestRestTemplate(); |
||||
|
||||
@Test |
||||
public void contextLoads() { |
||||
ResponseEntity<String> entity = restTemplate.getForEntity("http://localhost:" + port + "/rest/hello", String.class); |
||||
assertEquals(HttpStatus.OK, entity.getStatusCode()); |
||||
} |
||||
|
||||
@MinimalWebConfiguration |
||||
@ApplicationPath("/rest") |
||||
@Path("/hello") |
||||
public static class Application extends ResourceConfig { |
||||
|
||||
@Value("${message:World}") |
||||
private String msg; |
||||
|
||||
@GET |
||||
public String message() { |
||||
return "Hello " + msg; |
||||
} |
||||
|
||||
public Application() { |
||||
register(Application.class); |
||||
} |
||||
|
||||
public static void main(String[] args) { |
||||
SpringApplication.run(Application.class, args); |
||||
} |
||||
|
||||
} |
||||
|
||||
@Target(ElementType.TYPE) |
||||
@Retention(RetentionPolicy.RUNTIME) |
||||
@Documented |
||||
@Import({ EmbeddedServletContainerAutoConfiguration.class, |
||||
ServerPropertiesAutoConfiguration.class, JerseyAutoConfiguration.class, |
||||
PropertyPlaceholderAutoConfiguration.class }) |
||||
protected static @interface MinimalWebConfiguration { |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,98 @@
@@ -0,0 +1,98 @@
|
||||
/* |
||||
* Copyright 2012-2013 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.autoconfigure.jersey; |
||||
|
||||
import static org.junit.Assert.assertEquals; |
||||
|
||||
import java.lang.annotation.Documented; |
||||
import java.lang.annotation.ElementType; |
||||
import java.lang.annotation.Retention; |
||||
import java.lang.annotation.RetentionPolicy; |
||||
import java.lang.annotation.Target; |
||||
|
||||
import javax.ws.rs.GET; |
||||
import javax.ws.rs.Path; |
||||
|
||||
import org.glassfish.jersey.server.ResourceConfig; |
||||
import org.junit.Test; |
||||
import org.junit.runner.RunWith; |
||||
import org.springframework.beans.factory.annotation.Value; |
||||
import org.springframework.boot.SpringApplication; |
||||
import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; |
||||
import org.springframework.boot.autoconfigure.jersey.DefaultServletPathTests.Application; |
||||
import org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration; |
||||
import org.springframework.boot.autoconfigure.web.ServerPropertiesAutoConfiguration; |
||||
import org.springframework.boot.test.IntegrationTest; |
||||
import org.springframework.boot.test.SpringApplicationConfiguration; |
||||
import org.springframework.boot.test.TestRestTemplate; |
||||
import org.springframework.context.annotation.Import; |
||||
import org.springframework.http.HttpStatus; |
||||
import org.springframework.http.ResponseEntity; |
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; |
||||
import org.springframework.test.context.web.WebAppConfiguration; |
||||
import org.springframework.web.client.RestTemplate; |
||||
|
||||
@RunWith(SpringJUnit4ClassRunner.class) |
||||
@SpringApplicationConfiguration(classes = Application.class) |
||||
@IntegrationTest("server.port=0") |
||||
@WebAppConfiguration |
||||
public class DefaultServletPathTests { |
||||
|
||||
@Value("${local.server.port}") |
||||
private int port; |
||||
|
||||
private RestTemplate restTemplate = new TestRestTemplate(); |
||||
|
||||
@Test |
||||
public void contextLoads() { |
||||
ResponseEntity<String> entity = restTemplate.getForEntity("http://localhost:" |
||||
+ port + "/hello", String.class); |
||||
assertEquals(HttpStatus.OK, entity.getStatusCode()); |
||||
} |
||||
|
||||
@MinimalWebConfiguration |
||||
@Path("/hello") |
||||
public static class Application extends ResourceConfig { |
||||
|
||||
@Value("${message:World}") |
||||
private String msg; |
||||
|
||||
public Application() { |
||||
register(Application.class); |
||||
} |
||||
|
||||
@GET |
||||
public String message() { |
||||
return "Hello " + msg; |
||||
} |
||||
|
||||
public static void main(String[] args) { |
||||
SpringApplication.run(Application.class, args); |
||||
} |
||||
|
||||
} |
||||
|
||||
@Target(ElementType.TYPE) |
||||
@Retention(RetentionPolicy.RUNTIME) |
||||
@Documented |
||||
@Import({ EmbeddedServletContainerAutoConfiguration.class, |
||||
ServerPropertiesAutoConfiguration.class, JerseyAutoConfiguration.class, |
||||
PropertyPlaceholderAutoConfiguration.class }) |
||||
protected static @interface MinimalWebConfiguration { |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,41 @@
@@ -0,0 +1,41 @@
|
||||
<?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" |
||||
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> |
||||
|
||||
<artifactId>spring-boot-sample-jersey</artifactId> |
||||
<version>1.0.0.BUILD-SNAPSHOT</version> |
||||
<packaging>war</packaging> |
||||
|
||||
<name>spring-boot-sample-jersey</name> |
||||
<description>Spring Boot Jersey sample project</description> |
||||
|
||||
<parent> |
||||
<!-- Your own application should inherit from spring-boot-starter-parent --> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-samples</artifactId> |
||||
<version>1.2.0.BUILD-SNAPSHOT</version> |
||||
</parent> |
||||
|
||||
<dependencies> |
||||
<dependency> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-starter-jersey</artifactId> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-starter-test</artifactId> |
||||
<scope>test</scope> |
||||
</dependency> |
||||
</dependencies> |
||||
|
||||
<build> |
||||
<plugins> |
||||
<plugin> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-maven-plugin</artifactId> |
||||
</plugin> |
||||
</plugins> |
||||
</build> |
||||
|
||||
</project> |
||||
@ -0,0 +1,41 @@
@@ -0,0 +1,41 @@
|
||||
/* |
||||
* Copyright 2012-2013 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 sample.jersey; |
||||
|
||||
import javax.ws.rs.GET; |
||||
import javax.ws.rs.Path; |
||||
|
||||
import org.springframework.beans.factory.annotation.Value; |
||||
import org.springframework.stereotype.Component; |
||||
|
||||
/** |
||||
* @author Dave Syer |
||||
* |
||||
*/ |
||||
@Component |
||||
@Path("/hello") |
||||
public class Endpoint { |
||||
|
||||
@Value("${message:World}") |
||||
private String msg; |
||||
|
||||
@GET |
||||
public String message() { |
||||
return "Hello " + msg; |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,29 @@
@@ -0,0 +1,29 @@
|
||||
/* |
||||
* Copyright 2012-2013 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 sample.jersey; |
||||
|
||||
import org.glassfish.jersey.server.ResourceConfig; |
||||
import org.springframework.stereotype.Component; |
||||
|
||||
@Component |
||||
public class JerseyConfig extends ResourceConfig { |
||||
|
||||
public JerseyConfig() { |
||||
register(Endpoint.class); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,38 @@
@@ -0,0 +1,38 @@
|
||||
/* |
||||
* Copyright 2012-2013 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 sample.jersey; |
||||
|
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; |
||||
import org.springframework.boot.builder.SpringApplicationBuilder; |
||||
import org.springframework.boot.context.web.SpringBootServletInitializer; |
||||
import org.springframework.context.annotation.ComponentScan; |
||||
|
||||
@ComponentScan |
||||
@EnableAutoConfiguration |
||||
public class SampleJerseyApplication extends SpringBootServletInitializer { |
||||
|
||||
@Override |
||||
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { |
||||
return application.sources(SampleJerseyApplication.class); |
||||
} |
||||
|
||||
public static void main(String[] args) { |
||||
new SampleJerseyApplication().configure(new SpringApplicationBuilder(SampleJerseyApplication.class)).run( |
||||
args); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,51 @@
@@ -0,0 +1,51 @@
|
||||
/* |
||||
* Copyright 2012-2013 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 sample.jersey; |
||||
|
||||
import static org.junit.Assert.assertEquals; |
||||
|
||||
import org.junit.Test; |
||||
import org.junit.runner.RunWith; |
||||
import org.springframework.beans.factory.annotation.Value; |
||||
import org.springframework.boot.test.IntegrationTest; |
||||
import org.springframework.boot.test.SpringApplicationConfiguration; |
||||
import org.springframework.boot.test.TestRestTemplate; |
||||
import org.springframework.http.HttpStatus; |
||||
import org.springframework.http.ResponseEntity; |
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; |
||||
import org.springframework.test.context.web.WebAppConfiguration; |
||||
import org.springframework.web.client.RestTemplate; |
||||
|
||||
@RunWith(SpringJUnit4ClassRunner.class) |
||||
@SpringApplicationConfiguration(classes = SampleJerseyApplication.class) |
||||
@IntegrationTest("server.port=0") |
||||
@WebAppConfiguration |
||||
public class SampleJerseyApplicationTests { |
||||
|
||||
@Value("${local.server.port}") |
||||
private int port; |
||||
|
||||
private RestTemplate restTemplate =new TestRestTemplate(); |
||||
|
||||
@Test |
||||
public void contextLoads() { |
||||
ResponseEntity<String> entity = restTemplate.getForEntity("http://localhost:" |
||||
+ port + "/hello", String.class); |
||||
assertEquals(HttpStatus.OK, entity.getStatusCode()); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,70 @@
@@ -0,0 +1,70 @@
|
||||
<?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" |
||||
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> |
||||
|
||||
<artifactId>spring-boot-sample-jersey1</artifactId> |
||||
<version>0.0.1-SNAPSHOT</version> |
||||
<packaging>jar</packaging> |
||||
|
||||
<name>spring-boot-sample-jersey1</name> |
||||
<description>Spring Boot Sample with Jersey 1.x</description> |
||||
|
||||
<parent> |
||||
<!-- Your own application should inherit from spring-boot-starter-parent --> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-samples</artifactId> |
||||
<version>1.2.0.BUILD-SNAPSHOT</version> |
||||
</parent> |
||||
|
||||
<dependencies> |
||||
<dependency> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-starter</artifactId> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-starter-tomcat</artifactId> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.springframework</groupId> |
||||
<artifactId>spring-web</artifactId> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>com.sun.jersey</groupId> |
||||
<artifactId>jersey-servlet</artifactId> |
||||
<version>1.13</version> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-starter-test</artifactId> |
||||
<scope>test</scope> |
||||
</dependency> |
||||
</dependencies> |
||||
|
||||
<build> |
||||
<plugins> |
||||
<plugin> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-maven-plugin</artifactId> |
||||
<configuration> |
||||
<requiresUnpack> |
||||
<dependency> |
||||
<groupId>com.sun.jersey</groupId> |
||||
<artifactId>jersey-servlet</artifactId> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>com.sun.jersey</groupId> |
||||
<artifactId>jersey-server</artifactId> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>com.sun.jersey</groupId> |
||||
<artifactId>jersey-core</artifactId> |
||||
</dependency> |
||||
</requiresUnpack> |
||||
</configuration> |
||||
</plugin> |
||||
</plugins> |
||||
</build> |
||||
|
||||
</project> |
||||
@ -0,0 +1,47 @@
@@ -0,0 +1,47 @@
|
||||
package sample.jersey1; |
||||
|
||||
import javax.ws.rs.GET; |
||||
import javax.ws.rs.Path; |
||||
import javax.ws.rs.Produces; |
||||
|
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; |
||||
import org.springframework.boot.builder.SpringApplicationBuilder; |
||||
import org.springframework.boot.context.embedded.FilterRegistrationBean; |
||||
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; |
||||
import org.springframework.context.annotation.Bean; |
||||
import org.springframework.context.annotation.ComponentScan; |
||||
import org.springframework.context.annotation.Configuration; |
||||
|
||||
import com.sun.jersey.spi.container.servlet.ServletContainer; |
||||
|
||||
@Configuration |
||||
@ComponentScan |
||||
@EnableAutoConfiguration |
||||
@Path("/") |
||||
public class SampleJersey1Application { |
||||
|
||||
public static void main(String[] args) { |
||||
new SpringApplicationBuilder(SampleJersey1Application.class).web(true).run(args); |
||||
} |
||||
|
||||
@GET |
||||
@Produces("text/plain") |
||||
public String hello() { |
||||
return "Hello World"; |
||||
} |
||||
|
||||
@Bean |
||||
// Not needed if Spring Web MVC is also present on claspath
|
||||
public TomcatEmbeddedServletContainerFactory tomcatEmbeddedServletContainerFactory() { |
||||
return new TomcatEmbeddedServletContainerFactory(); |
||||
} |
||||
|
||||
@Bean |
||||
public FilterRegistrationBean jersey() { |
||||
FilterRegistrationBean bean = new FilterRegistrationBean(); |
||||
bean.setFilter(new ServletContainer()); |
||||
bean.addInitParameter("com.sun.jersey.config.property.packages", "com.sun.jersey;demo"); |
||||
return bean; |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,30 @@
@@ -0,0 +1,30 @@
|
||||
package sample.jersey1; |
||||
|
||||
import static org.junit.Assert.assertEquals; |
||||
|
||||
import org.junit.Test; |
||||
import org.junit.runner.RunWith; |
||||
import org.springframework.test.context.web.WebAppConfiguration; |
||||
import org.springframework.beans.factory.annotation.Value; |
||||
import org.springframework.boot.test.IntegrationTest; |
||||
import org.springframework.boot.test.SpringApplicationConfiguration; |
||||
import org.springframework.boot.test.TestRestTemplate; |
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; |
||||
|
||||
import sample.jersey1.SampleJersey1Application; |
||||
|
||||
@RunWith(SpringJUnit4ClassRunner.class) |
||||
@SpringApplicationConfiguration(classes = SampleJersey1Application.class) |
||||
@WebAppConfiguration |
||||
@IntegrationTest("server.port:0") |
||||
public class SampleJersey1ApplicationTests { |
||||
|
||||
@Value("${local.server.port}") |
||||
private int port; |
||||
|
||||
@Test |
||||
public void contextLoads() { |
||||
assertEquals("Hello World", new TestRestTemplate().getForObject("http://localhost:" + port + "/", String.class)); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,69 @@
@@ -0,0 +1,69 @@
|
||||
<?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" |
||||
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> |
||||
<parent> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-starters</artifactId> |
||||
<version>1.2.0.BUILD-SNAPSHOT</version> |
||||
</parent> |
||||
<artifactId>spring-boot-starter-jersey</artifactId> |
||||
<name>spring-boot-starter-jersey</name> |
||||
<description>Spring Boot Jersey Starter</description> |
||||
<url>http://projects.spring.io/spring-boot/</url> |
||||
<organization> |
||||
<name>Pivotal Software, Inc.</name> |
||||
<url>http://www.spring.io</url> |
||||
</organization> |
||||
<properties> |
||||
<main.basedir>${basedir}/../..</main.basedir> |
||||
</properties> |
||||
<dependencies> |
||||
<dependency> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-starter</artifactId> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-starter-tomcat</artifactId> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>com.fasterxml.jackson.core</groupId> |
||||
<artifactId>jackson-databind</artifactId> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.hibernate</groupId> |
||||
<artifactId>hibernate-validator</artifactId> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.springframework</groupId> |
||||
<artifactId>spring-core</artifactId> |
||||
<exclusions> |
||||
<exclusion> |
||||
<groupId>commons-logging</groupId> |
||||
<artifactId>commons-logging</artifactId> |
||||
</exclusion> |
||||
</exclusions> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.springframework</groupId> |
||||
<artifactId>spring-web</artifactId> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.glassfish.jersey.core</groupId> |
||||
<artifactId>jersey-server</artifactId> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.glassfish.jersey.containers</groupId> |
||||
<artifactId>jersey-container-servlet-core</artifactId> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.glassfish.jersey.containers</groupId> |
||||
<artifactId>jersey-container-servlet</artifactId> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.glassfish.jersey.ext</groupId> |
||||
<artifactId>jersey-spring3</artifactId> |
||||
</dependency> |
||||
</dependencies> |
||||
</project> |
||||
Loading…
Reference in new issue