Я пытаюсь протестировать веб-сервисы Rest, используя среду тестирования Джерси, потому что мне нужно протестировать ее без запуска сервера 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.
ПРИМЕЧАНИЕ. Моя структура веб-службы выглядит следующим образом
@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 {
}