1

我正在尝试从 Java 客户端使用 Artifactory REST API(特别是 Artifactory 查询语言),但网站上的示例是用 Groovy(片段)编写的,目前尚不清楚 Java 客户端如何工作。

非常感谢使用 REST API(或 Artifactory Java Client API)执行 AQL 查询的 Java 示例。

对于它的价值,这里是 Artifactory Query Language 网站的链接......

https://www.jfrog.com/confluence/display/RTF/Artifactory+Query+Language

4

2 回答 2

8

Artifactory Java 客户端本身不支持 AQL 查询。但是,您可以使用它提供的通用 Rest 调用接口来创建指向 AQL API端点的ArtifactoryRequest

您链接的wiki中的示例不在Groovy中,而是在AQL语法中-您只需构造一个您想要的任何查询的字符串并将其作为请求的主体发送-大致类似于

String aqlQuery = "items.find({\"name\": {\"$match\" : \"*test.*\"}})";
Artifactory artifactory = Artifactory.create(url, userName, password);
ArtifactoryRequest aqlRequest = new ArtifactoryRequestImpl()
            .method(ArtifactoryRequest.Method.POST)
            .apiUrl("/api/search/aql")
            .requestBody(aqlQuery);
 //Parse this string as json
 String aqlResponse = artifactory.restCall(aqlRequest);

响应是您可以解析和处理的 JSON - 检查我提供的 API 链接中的示例。

于 2016-02-25T16:07:08.967 回答
1

@fundeldman 感谢您提出上述答案。经过一些小的调整,代码现在可以工作了。这是最新和最伟大的...

String aqlQuery = "items.find({\"name\": {\"$match\" : \"*rup-receipt*\"}}).include(\"repo\", \"path\", \"name\")";
Artifactory artifactory = ArtifactoryClient.create(artifactoryUrl, username, password);
ArtifactoryRequest aqlRequest = new ArtifactoryRequestImpl()
            .method(ArtifactoryRequest.Method.POST)
            .apiUrl("api/search/aql")
            .requestType(ArtifactoryRequest.ContentType.TEXT)
            .responseType(ArtifactoryRequest.ContentType.JSON)
            .requestBody(aqlQuery);
Map<String, ?> aqlResponse = artifactory.restCall(aqlRequest);
于 2016-05-23T14:31:32.873 回答