【发布时间】:2012-08-22 16:40:30
【问题描述】:
我正在尝试使用 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 或实际地址来解决此问题。
【问题讨论】:
-
什么是操作系统?你有防火墙在运行吗?
-
@Tom:在 OSX、Red Hat 和其他 linux 上试过,没有防火墙
-
我也面临同样的问题。我已将 BASE_URI 更改为 0.0.0.0,但仍然无法正常工作
-
您应该回答自己的问题,然后(2 天后)将其标记为已接受的答案。
标签: rest glassfish jersey ip-address jax-rs