2016-02-20 1 views
0

Я пытаюсь использовать API-интерфейс Artifactory REST (и, в частности, язык запросов Artifactory) от клиента Java, но примеры на сайте написаны в Groovy (фрагменты), и это не сразу понять, как будет работать клиент Java.Ищите пример Artifactory Query Language в Java

Пример Java, который использует REST API (или API-интерфейс Artifactory Java Client API) для выполнения запроса AQL, будет очень оценен.

Для чего это стоит, вот ссылка на сайт Artifactory Query Language ...

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

ответ

7

Клиент Artifactory Java не поддерживает AQL запросов изначально. Вы можете, однако, использовать общий интерфейс вызова Rest, чтобы он ArtifactoryRequest указал на API AQL endpoint.

Примеры в вики вы связаны не в 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, которую я предоставил.

+0

мне пришлось подправить линию 2, чтобы использовать класс ArtifactoryClient (как Artifactory является интерфейсом) ... 'Artifactory Artifactory = Artifactory.create (URL, имя пользователя, пароль), ' –

+0

я также должен был добавить .requestType и .responseType ... ' ArtifactoryRequest aqlRequest = новый ArtifactoryRequestImpl() .method (ArtifactoryRequest.Method.POST) .apiUrl ("/ апи/поиск/акль") .requestType (ArtifactoryRequest.ContentType.TEXT) .responseType (ArtifactoryRequest.ContentTyp e.JSON) .requestBody (aqlQuery); ' –

+0

Но все-таки, я не могу получить что-нибудь, но ... groovyx.net.http.HttpResponseException: Не найдено –

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);