Java Jersey单元测试返回404
我试图让一个简单的单元测试工作,但是它返回404状态 Enpoints等级:Java Jersey单元测试返回404,java,unit-testing,jersey,jersey-client,Java,Unit Testing,Jersey,Jersey Client,我试图让一个简单的单元测试工作,但是它返回404状态 Enpoints等级: @Path("/v1") public class Endpoints { @Context private HttpServletResponse servletResponse; private void allowCrossDomainAccess() { if (servletResponse != null){ servletResponse
@Path("/v1")
public class Endpoints {
@Context
private HttpServletResponse servletResponse;
private void allowCrossDomainAccess() {
if (servletResponse != null){
servletResponse.setHeader("Access-Control-Allow-Origin", "*");
}
}
@GET
@Path("/whoami")
@Produces(MediaType.APPLICATION_JSON)
public String whoami(@Context final HttpServletRequest request){
allowCrossDomainAccess();
// Extract the software version from the user agent
final String userAgent = request.getHeader("user-agent");
final Pattern pattern = Pattern.compile("\\((.+?)\\)"); // Regex to extract anything between opening and closing curly bracers
final Matcher matcher = pattern.matcher(userAgent);
matcher.find();
final String software = matcher.group(1);
final String ipAddress;
if (request.getHeader("X-Forwarded-For") != null){ // Heroku adds this header
ipAddress = request.getHeader("X-Forwarded-For");
} else {
ipAddress = request.getRemoteAddr();
}
final JSONObject json = new JSONObject();
json.put("ipaddress", ipAddress);
json.put("locale", request.getLocale());
json.put("software", software);
return json.toString(4);
}
}
我的测试班:
public class EndpointsTest extends JerseyTest {
@Override
protected Application configure() {
return new ResourceConfig(Endpoints.class);
}
@Test
public void parseHeadersTest() {
Response output = target().path("/api/v1/whoami").request().get();
System.out.println("response: " + output);
assertEquals(200, output.getStatus());
}
}
输出:
Jul 15, 2016 2:30:37 PM org.glassfish.jersey.test.grizzly.GrizzlyTestContainerFactory$GrizzlyTestContainer <init>
INFO: Creating GrizzlyTestContainer configured at the base URI http://localhost:9998/
Jul 15, 2016 2:30:37 PM org.glassfish.grizzly.http.server.NetworkListener start
INFO: Started listener bound to [localhost:9998]
Jul 15, 2016 2:30:37 PM org.glassfish.grizzly.http.server.HttpServer start
INFO: [HttpServer] Started.
response: InboundJaxrsResponse{context=ClientResponse{method=GET, uri=http://localhost:9998/api/v1/whoami, status=404, reason=Not Found}}
Jul 15, 2016 2:30:37 PM org.glassfish.grizzly.http.server.NetworkListener shutdownNow
INFO: Stopped listener bound to [localhost:9998]
WEB-INF/WEB.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>org.rich.fcc</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
</web-app>
Jersey Web应用程序
org.glassfish.jersey.servlet.ServletContainer
jersey.config.server.provider.packages
org.rich.fcc
1.
Jersey Web应用程序
/原料药/*
我们可能需要查看您的配置。似乎服务器在单元测试期间启动时没有注册终结点。@sdotdi我已经编辑了这个问题,以包含我认为相关的所有内容。当我设置响应输出=目标().path(“/v1/whoami”).request().get()时,将/api
放到路径(…)
@peeskillet中
响应是:response:inboundjaxrssponse{context=ClientResponse{method=GET,uri=http://localhost:9998/v1/whoami,status=500,reason=Request失败。}
。您需要修复服务器端的错误。至少现在您实际正在访问服务器,我们可能需要查看您的配置。似乎服务器在单元测试期间启动时没有注册终结点。@sdotdi我已经编辑了这个问题,以包含我认为相关的所有内容。当我设置响应输出=目标().path(“/v1/whoami”).request().get()时,将/api
放到路径(…)
@peeskillet中
响应是:response:inboundjaxrssponse{context=ClientResponse{method=GET,uri=http://localhost:9998/v1/whoami,status=500,reason=Request失败。}
。您需要修复服务器端的错误。至少现在你真的在攻击服务器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>org.rich.fcc</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
</web-app>