ckan добавить исходный URL-адрес с помощью java-клиента

Я пытаюсь добавить URL-адрес источника в существующий ресурс, но не могу заставить его работать.

Вот что у меня есть:

HttpEntity reqEntity = MultipartEntityBuilder.create()
           .addPart("id", new StringBody("resource id",ContentType.TEXT_PLAIN))
           .addPart("Source", new StringBody("www.google.com",ContentType.TEXT_PLAIN))          
           .build();
postRequest = new HttpPost(host+"/api/3/action/resource_update");
               postRequest.setEntity(reqEntity);
               postRequest.setHeader("X-CKAN-API-Key", "myApi");

Что дает мне следующую ошибку:

"success": false, "error": {"__type": "Validation Error", "url": ["Missing value"]}

Я могу добавить поле Source при загрузке файла, но для него не создается ссылка. Может быть, потому что я использую ContentType.TEXT_PLAIN вместо чего-то, что скажет CKAN, что это ссылка?

Изменить: под источником я подразумеваю ссылку на информацию о ресурсе, где она указывает на веб-страницу исходных данных. При ручной загрузке файла у вас есть эта опция, я просто не могу заставить ее работать с API.


person Skaros Ilias    schedule 20.10.2015    source источник
comment
Непонятно, пытаетесь ли вы загрузить файл или указываете URL-адрес файла. Уточните это, а также предоставьте снимок экрана веб-формы, которую вы пытаетесь эмулировать в API.   -  person D Read    schedule 21.10.2015


Ответы (1)


Ошибка говорит вам, что вы не указали значение url для ресурса, которое необходимо.

Контент, который вы отправляете POST, должен быть в формате JSON, тогда как вы, похоже, отправляете его как составные данные формы.

Ключи JSON, которые вам нужно отправить для ресурса: id, url, name, format и т. д., т. е. вам нужно установить url, а не Source. Вы можете увидеть существующие ключи, взглянув на /api/action/resource_show?id=xyz.

Обычный способ использования resource_update — сначала выполнить resource_show, отредактировать JSON с новыми значениями, а затем resource_update. Таким образом, вы не потеряете никаких других свойств ресурса, таких как формат.

person D Read    schedule 20.10.2015
comment
Согласно документу ckan, для обновления ресурса требуется только идентификатор, а не URL-адрес. Что такое URL? Когда вы делаете ipload вручную, у вас может быть исходное поле, которое работает просто отлично - person Skaros Ilias; 20.10.2015
comment
Обязательные поля для ресурса определяются схемой набора данных, поэтому изменяются, если вы ее настраиваете, поэтому она не упоминается в документе для resource_update. URL — это местонахождение данных — это самая важная часть ресурса. Насколько я могу судить, когда вы выполняете загрузку в веб-интерфейсе CKAN, поле по-прежнему называется URL. Вы пытаетесь загрузить файл? Если это так, вы не можете использовать для этого resource_update. - person D Read; 21.10.2015