Jersey と Glassfish Grizzly を使用して Java で REST サービスを作成しようとしています。内部で動作する非常に単純なケースがありますが、外部アドレスからサーバーを呼び出すことができないようです。外部から見える IP を持つさまざまな異なるマシンのペアを使用してみましたが、代わりにサーバーで実際の IP アドレスを指定しようとしましたlocalhost
が、何も機能しません。私は公式のユーザーガイドhereにやや大まかに従っています。私のリソース:
package resources;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
@Path("/simpleREST")
public class SimpleRESTResource
{
@GET
@Produces("text/plain")
public String getMessage()
{
return "Message from server\n";
}
}
そしてサーバー:
import java.io.IOException;
import java.net.URI;
import javax.ws.rs.core.UriBuilder;
import org.glassfish.grizzly.http.server.HttpServer;
import com.sun.jersey.api.container.grizzly2.GrizzlyServerFactory;
import com.sun.jersey.api.core.PackagesResourceConfig;
import com.sun.jersey.api.core.ResourceConfig;
public class Main
{
public static final URI BASE_URI = UriBuilder.fromUri("http://localhost").port(9998).build();
public static void main(String[] args) throws IOException
{
System.out.println("Starting grizzly...");
ResourceConfig rc = new PackagesResourceConfig("resources");
HttpServer myServer = GrizzlyServerFactory.createHttpServer(BASE_URI, rc);
System.out.println(String.format("Jersey app started with WADL available at %s/application.wadl\n" +
"Try out %s/simpleREST\nHit enter to stop it...", BASE_URI, BASE_URI));
System.in.read();
myServer.stop();
}
}
同じマシンで、次を使用してサーバーと正常に対話できます
curl -X GET localhost:9998/simpleREST
また
curl -X GET [external numeric address]:9998/simpleREST
ご提案いただきありがとうございます。
解決
サーバー URI を、、または実際のアドレスのhttp://0.0.0.0:9998
代わりに設定することで、この問題を解決しました。localhost
127.0.0.1