私は非常に単純な JAX-RS WS を持っています:
@Stateless
@Path("/foo")
public class FooFacadeBean {
@GET
@Produces(MediaType.TEXT_HTML)
public String performFooCall(@Context HttpServletRequest request, @Context HttpServletResponse response) {
response.setStatus(500);
return "Hello";
}
}
デプロイ後、curl -v localhost:8080/foo を実行すると、結果は次のようになりました。
About to connect() to localhost port 8080
Trying 127.0.0.1...
connected
Connected to localhost (127.0.0.1) port 8080
GET /foo HTTP/1.1
User-Agent: curl/7.26.0
Host: localhost:8080
Accept: */
HTTP/1.1 200 OK
X-Powered-By: Servlet/3.0 JSP/2.2 (GlassFish Server Open Source Edition 3.1.2 Java/Sun Microsystems Inc./1.6)
Server: GlassFish Server Open Source Edition 3.1.2
Content-Type: text/html
Transfer-Encoding: chunked
Date: Thu, 26 Jul 2012 13:52:10 GMT
Hello
Connection to host localhost left intact
Closing connection
ご覧のとおり、手動で設定したにもかかわらず、HTTP のステータス コードはまったく変更されていません。なぜこれが起こるのですか?私は何の結果もなしにグーグルで何時間も費やしました。
次のような Response オブジェクトを返すなどの回避策:
Response.status(404).entity("Hello").build();
完璧に動作します!
Glassfish は JERSEY を JAX-RS 実装として使用します。私はGlassfishの埋め込みバリアントを使用しています。