我试图使用Jersey测试框架来测试Rest Web服务,因为我需要在不运行tomcat服务器的情况下对其进行测试。我在执行此操作时遇到了一些问题。我尝试了几种方法,但没有任何帮助。
这是我尝试的方式。
方法1:
private static URI uri = UriBuilder.fromUri("http://localhost/").port(1010).build();
private static Client client = ClientBuilder.newClient();
@BeforeClass
public static void initServer() throws IOException {
server = HttpServer.create(new InetSocketAddress(uri.getPort()), 0);
HttpHandler handler = RuntimeDelegate.getInstance().createEndpoint(new JerseyConfiguration(),
HttpHandler.class);
server.createContext(uri.getPath(), handler);
server.start();
}
@Test
public void testGetMessage() {
Response response = client.target("http://localhost:1010/webservicePath").request()
.accept(MediaType.APPLICATION_JSON).get();
System.out.println("Response : " + response);
assertEquals(200, response.getStatus());
server.stop(0);
}
public JerseyConfiguration(Class<?>... classes) {
register(new AbstractBinder() {
@Override
protected void configure() {
bind(InterfaceClass.class).to(ImplementationClass.class);
}
});
}
}
在这种方法下,我无法创建端点。创建端点时遇到问题。
java.lang.IllegalArgumentException
at org.apache.cxf.jaxrs.impl.RuntimeDelegateImpl.createEndpoint(RuntimeDelegateImpl.java:111)
方法2:
static final String BASE_URI = "http://localhost:9080/basePath";
static HttpServer server;
static Client client;
private static org.glassfish.grizzly.http.server.HttpServer
startServer() {
final ResourceConfig resourceConfig = new ResourceConfig()
.register(JerseyConfiguration.class);
return
GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI),resourceConfig);
}
@BeforeClass
public static void setUpClass() {
server = startServer();
client = ClientBuilder.newClient();
}
@AfterClass
public static void tearDownClass() {
server.shutdown();
}
@Test
public void test() {
WebTarget target = client.target(BASE_URI);
Response response = target.path("/webservicePath").request().post(Entity.text(""));
assertEquals(200, response.getStatus());
response.close();
}
此方法显示404-找不到错误。
有人可以帮我解决这个问题吗? 如果没有其他方法可以在不运行tomcat服务器的情况下测试Web服务,请提出建议。
注意:我的Web服务结构如下
@WebService
@Produces("application/json")
@Consumes("application/json")
@Path("/api")
@Service
public interface WebServiceInterface {
//abstract methods
}
和实现类如下:
@Service
@org.apache.cxf.interceptor.OutFaultInterceptors(
interceptors = { "service.soap.HttpStatusInterceptor" })
@WebService(endpointInterface = "end.point.path")
public class WebServiceImpl implements WebServiceInterface {
}