如何使用外部提供程序指定球衣测试的上下文路径
How to specify context path for jersey test with external provider
我希望我的球衣测试在 tomcat 的一个实例上进行 运行,其余服务 运行ning 在
http://myhost:port/contexpath/service1/
http://myhost:port/contexpath/service2/
..so on
我有内存和外部容器依赖性
[ group: 'org.glassfish.jersey.test-framework.providers', name: 'jersey-test-framework-provider-inmemory', version: '2.17'],
[group: 'org.glassfish.jersey.test-framework.providers', name: 'jersey-test-framework-provider-external' , version: '2.17'],
然后在测试中我超越了下面的方法来决定选择哪个容器
@Override
public TestContainerFactory getTestContainerFactory() {
System.setProperty("jersey.test.host", "localhost");
System.setProperty("jersey.config.test.container.port", "8000");
//how to set the context path ??
return new ExternalTestContainerFactory();
}
内存测试有效,因为服务是由框架部署在它知道的路径上(无论如何它没有上下文路径)
当我 运行 在外部容器上时,它会尝试连接到 http://myhost:port/service1/ instead of http://myhost:port/contexpath/service1/ 从而得到 404 not found
到外部容器上的 运行 我如何指定上下文路径?
该文档仅指定主机和端口 property.Is 上下文路径有任何 属性 ?
我正在使用 Jersey 2.17
终于想到了解决办法
@Override
public TestContainerFactory getTestContainerFactory() {
return new ExternalTestContainerFactory(){
@Override
public TestContainer create(URI baseUri, DeploymentContext context)
throws IllegalArgumentException {
try {
baseUri = new URI("http://localhost:8000/contextpath");
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return super.create(baseUri, context);
}
};
}
如果您有外部 servlet:
导入 jersey-test-framework-core api 以实现您自己的 TestContainerFactory
testCompile 'org.glassfish.jersey.test-framework:jersey-test-framework-core:2.22.2'
.
让 JerseyTest 知道您将通过 SystemProperties 拥有自己的提供程序
systemProperty 'jersey.config.test.container.factory', 'my.package.MyTestContainerFactory'
.
创建您自己的提供商(比他们的 jersey-test-framework-provider-external
更好、更可自定义配置)
import org.glassfish.jersey.test.spi.TestContainer;
import org.glassfish.jersey.test.spi.TestContainerFactory;
public class MyTestContainerFactory implements TestContainerFactory {
@Override
public TestContainer create(URI baseUri, DeploymentContext deploymentContext) {
return new TestContainer(){
@Override
public ClientConfig getClientConfig() {
return null;
}
@Override
public URI getBaseUri() {
return URI.create("http://localhost:8080/myapp/api");
}
@Override
public void start() {
// Do nothing
}
@Override
public void stop() {
// Do nothing
}
};
}
}
我希望我的球衣测试在 tomcat 的一个实例上进行 运行,其余服务 运行ning 在
http://myhost:port/contexpath/service1/
http://myhost:port/contexpath/service2/
..so on
我有内存和外部容器依赖性
[ group: 'org.glassfish.jersey.test-framework.providers', name: 'jersey-test-framework-provider-inmemory', version: '2.17'],
[group: 'org.glassfish.jersey.test-framework.providers', name: 'jersey-test-framework-provider-external' , version: '2.17'],
然后在测试中我超越了下面的方法来决定选择哪个容器
@Override
public TestContainerFactory getTestContainerFactory() {
System.setProperty("jersey.test.host", "localhost");
System.setProperty("jersey.config.test.container.port", "8000");
//how to set the context path ??
return new ExternalTestContainerFactory();
}
内存测试有效,因为服务是由框架部署在它知道的路径上(无论如何它没有上下文路径) 当我 运行 在外部容器上时,它会尝试连接到 http://myhost:port/service1/ instead of http://myhost:port/contexpath/service1/ 从而得到 404 not found
到外部容器上的 运行 我如何指定上下文路径? 该文档仅指定主机和端口 property.Is 上下文路径有任何 属性 ?
我正在使用 Jersey 2.17
终于想到了解决办法
@Override
public TestContainerFactory getTestContainerFactory() {
return new ExternalTestContainerFactory(){
@Override
public TestContainer create(URI baseUri, DeploymentContext context)
throws IllegalArgumentException {
try {
baseUri = new URI("http://localhost:8000/contextpath");
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return super.create(baseUri, context);
}
};
}
如果您有外部 servlet:
导入 jersey-test-framework-core api 以实现您自己的 TestContainerFactory
testCompile 'org.glassfish.jersey.test-framework:jersey-test-framework-core:2.22.2'
.
让 JerseyTest 知道您将通过 SystemProperties 拥有自己的提供程序
systemProperty 'jersey.config.test.container.factory', 'my.package.MyTestContainerFactory'
.
创建您自己的提供商(比他们的 jersey-test-framework-provider-external
更好、更可自定义配置)
import org.glassfish.jersey.test.spi.TestContainer;
import org.glassfish.jersey.test.spi.TestContainerFactory;
public class MyTestContainerFactory implements TestContainerFactory {
@Override
public TestContainer create(URI baseUri, DeploymentContext deploymentContext) {
return new TestContainer(){
@Override
public ClientConfig getClientConfig() {
return null;
}
@Override
public URI getBaseUri() {
return URI.create("http://localhost:8080/myapp/api");
}
@Override
public void start() {
// Do nothing
}
@Override
public void stop() {
// Do nothing
}
};
}
}