You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计TomEE中Jersey编写的应用托管的Web服务及对应源码类

统计TomEE中Jersey Web服务数量及定位源码类的方法

方法一:运行时通过Jersey API直接获取

  • 给应用加一个专门的元数据查询端点(如果没有的话),代码示例:
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import org.glassfish.jersey.server.ApplicationHandler;
import org.glassfish.jersey.server.model.Resource;
import org.glassfish.jersey.server.model.ResourceMethod;

@Path("/service-metadata")
public class ServiceMetadataResource {

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getServiceInfo() {
        ApplicationHandler appHandler = ApplicationHandler.getCurrent();
        StringBuilder result = new StringBuilder();
        int totalCount = 0;
        
        for (Resource resource : appHandler.getConfiguration().getResources()) {
            String basePath = resource.getPath();
            result.append("基础路径: ").append(basePath).append("\n");
            
            for (ResourceMethod method : resource.getAllMethods()) {
                String fullUrl = "/" + basePath + method.getPath();
                String sourceClass = method.getInvocable().getHandler().getHandlerClass().getName();
                result.append("  HTTP方法: ").append(method.getHttpMethod())
                      .append(" | 完整URL: ").append(fullUrl)
                      .append(" | 源码类: ").append(sourceClass)
                      .append("\n");
                totalCount++;
            }
        }
        
        result.append("\n总Web服务数量: ").append(totalCount);
        return result.toString();
    }
}
  • 部署应用后,访问http://<TomEE地址>:<端口>/<应用上下文>/service-metadata,就能直接看到所有服务的URL、对应HTTP方法和源码类全限定名,同时得到总数。
  • 注意:确保应用依赖了Jersey的server包(org.glassfish.jersey.core:jersey-server)。

方法二:解析Jersey配置文件找服务

情况1:用web.xml配置Jersey

  • 打开web.xml,找到<servlet>下的<init-param>,其中jersey.config.server.provider.packages指定了扫描的包路径。
  • 直接去源码目录里搜这个包下带@Path注解的类,每个类的@Path值加上方法上的@Path(如果有)就是完整服务URL,统计这些类+方法的组合数就行,源码类也直接对应找到。

情况2:用Application子类配置Jersey

  • 找到继承javax.ws.rs.core.Application的类,看getClasses()或getSingletons()返回的类列表。
  • 逐个检查这些类是否带@Path注解,再看类里带@GET/@POST等HTTP注解的方法,组合路径得到URL,同时直接定位到源码类。

方法三:通过字节码分析WAR包

  • 从TomEE管理控制台找到你的应用,导出WAR包或解压后的classes目录。
  • 用JD-GUI、Bytecode Viewer这类工具扫描所有class文件,筛选出带@javax.ws.rs.Path注解的类。
  • 逐个查看这些类里的HTTP方法注解,记录对应的URL路径和类名,最后统计总数。

内容的提问来源于stack exchange,提问作者Prasad Jadhav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 19:35:33