31

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代わりに設定することで、この問題を解決しました。localhost127.0.0.1

4

3 に答える 3