在JavaEE6中,如何以编程方式获取JAX-RS端点的URL?

在JavaEE6中,如何以编程方式获取JAX-RS端点的URL?,java,jakarta-ee,jersey,jax-rs,apache-tomee,Java,Jakarta Ee,Jersey,Jax Rs,Apache Tomee,TomEE 1.7.2,JavaEE6,Java8 我有一个JAX-RS应用程序: @ApplicationPath("/api") public class CallStatsCatcherApplication extends Application { @Override public Set<Class<?>> getClasses() { return new HashSet<Class<?>>(Array

TomEE 1.7.2,JavaEE6,Java8

我有一个JAX-RS应用程序:

@ApplicationPath("/api")
public class CallStatsCatcherApplication extends Application {
    @Override
    public Set<Class<?>> getClasses() {
        return new HashSet<Class<?>>(Arrays.asList(RestEndpoint.class));
    }
}

@ApplicationScoped
@Path("/rest")
public class RestEndpoint {
    @GET
    public String echo(@QueryParam("foo") String foo) {
        return foo;
    }
}

如何在启动期间以编程方式获取该URL?我想创建一个框架,在网络上本地发布此URL。

要获取服务器地址部分,您可以尝试使用类似以下内容:

但如果您需要启动bean中的IP地址,可以尝试使用:

InetAddress ip = InetAddress.getLocalHost();
String ipAddress = ip.getHostAddress();`
另一种选择是使用:

MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer()`
但它可能与服务器平台关联,您需要搜索该属性。

您可以将该类与该类结合使用,以使用当前路径装载或创建URL


stackoverflow中也有类似的问题:

在没有活动的HttpRequest的情况下,请求生命周期中是否还有其他方法可以这样做。。。那只是稍微远一点。。。服务器正在侦听的端口呢?端口不是恒定的?在生产环境中是恒定的,但是对于本地测试来说,它肯定是不同的。啊,废话。。。还需要上下文根。唉。这很难!我也看过那个班。。。javadoc说它必须在请求的范围内调用,我希望在启动时找到一些东西
MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer()`