Я пытаюсь написать службу REST в java, используя Джерси и Glassfish Grizzly. У меня очень простой случай, работающий внутри, но не могу вызвать вызов на сервере с внешнего адреса. Я пробовал использовать различные пары компьютеров с видимыми извне IP-адресами и попытался указать фактический IP-адрес на сервере вместо localhost
, но ничего не работает. Я несколько слабо следую за официальным руководством пользователя здесь. Мой ресурс:
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
или фактического адреса.