java - 正则表达式 Java 端点注释

标签 java javascript python regex perl

我有一个项目来记录一个非常大的项目中的所有端点。我只有源文件,所以我不能在上面运行某种文档工具。我唯一的资源(据我所知)是带有 perl 或 python 或类似东西的正则表达式。

下面是方法注释的示例:

/**
 * Method Javadoc
 */
@Endpoint
@POST
@Path("path/{objectid}")
@Consumes(MediaType.APPLICATION_JSON)
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@TypeHint(SomeObject.class)
public Response deleteObject(@PathParam("objectid") Integer objectid) {
  //method code
}

我相信我唯一可以相信的是一致的是每个端点方法都会有 @Endpoint 注释。它可能是也可能不是第一个注释。这些方法可以有任何签名。

任何有关正则表达式的帮助都会很棒。我预计它需要的不仅仅是一个正则表达式来匹配所有这些信息,所以一些 , ,甚至 也会有帮助的!

只是为了让您知道我要做什么(我不希望您为我做这项工作,我主要是在寻求有关正则表达式的帮助),我想要的是一个 csv 与以下构造:

SourceFile.java  |  MethodName  |      Path       | Method  |  QueryParams  |  FormParams  |  Consumes                  |  Produces                                                |  ReturnedObject
ClassName.java   | deleteObject | path/{objectid} |  POST   |  objectid,    |              | MediaType.APPLICATION_JSON |  {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML} | SomeObject.class

最佳答案

您认为正则表达式是您唯一的解决方案吗? 假设您已经编译了代码(或可以编译它),并且零售了您之后的注释,您可以编写一个遍历所有类的 java 方法,使用 class.forName() 加载它们,然后您有一个各种反射 API 供您使用,以检查类、方法、字段等上的注释。

如果类不一致,您只需在运行时将 jar 添加到类路径中,然后使用 ZipInputStream 打开它,遍历条目,然后使用 class.forName() 将它们一个一个地加载。如果它“爆炸”(只是一堆 *.class 文件),你的工作就更容易了。

检查一个 zip(*.jar、*.ear、*.war 是)是这样的:

ZipInputStream zis = new ZipInputStream(new FileInputStream("fileName"));
ZipEntry entry;
while ((entry = zis.getNextEntry())!=null) {
    if (entry.isDirectory()) {
        continue;
    }
    if (!entry.getName().endsWith(".class")) {
        continue;
    }
    Class theClass = Class.forName(entry.getName());
    Endpoint targetAnnotation = theClass.getAnnotation(Endpoint.class);
    if (targetAnnotation == null) {
        continue;
    }
    //probably what youre looking for
}

当然,您的程序需要在 Class.forName() 调用的执行路径上使用目标 *.war/jar/ear 来执行。如果编译后的代码没有被破坏,那么您可以简单地以非常相似的方式遍历文件系统。

如果您所追求的注解在编译后没有保留,您可能会考虑引入一个可以读取 Java 代码并遍历语法树的库,例如 this

关于java - 正则表达式 Java 端点注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15211284/

相关文章:

java - Fragment 布局中的 ScrollView 问题

java - 图形:.obj 文件和 Material /纹理

javascript - 在 Promise 中返回 Promise 的值

javascript - 键值对中的随机变量未解释为变量

python 用户界面卡住

python - Python 的字符串和 unicode 强制/魔术函数如何工作?

python - Pandas 计数值大于最后 n 行中的当前行

java - Richfaces 3.3 ExtendedDataTable onRowClick 正在设置上一行单击的数据

javascript - vuex:从异步函数设置默认值

java servlet 信息