после многих часов возни и чтения всего интернета несколько раз, я просто не могу понять, как подписывать запросы на использование с API рекламы продукта.
Пока мне удалось сгенерировать клиента из предоставленного файла WSDL. Я использовал учебник Amazon для этого. Вы можете найти его здесь:
Учебник по созданию клиента веб-службы
Пока проблем нет. Для тестирования клиента я написал небольшой кусочек кода. Код предназначен просто для получения информации о продукте. Продукт указан по номеру ASIN.
код:
package client;
import com.ECS.client.jax.AWSECommerceService;
import com.ECS.client.jax.AWSECommerceServicePortType;
import com.ECS.client.jax.ItemLookup;
import com.ECS.client.jax.ItemLookupResponse;
import com.ECS.client.jax.ItemLookupRequest;
public class Client {
public static void main(String[] args) {
System.out.println("API Test startet");
AWSECommerceService service = new AWSECommerceService();
AWSECommerceServicePortType port = service.getAWSECommerceServicePort();
ItemLookupRequest itemLookup = new ItemLookupRequest();
itemLookup.setIdType("ASIN");
itemLookup.getItemId().add("B000RE216U");
ItemLookup lookup = new ItemLookup();
lookup.setAWSAccessKeyId("<mykeyishere>");
lookup.getRequest().add(itemLookup);
ItemLookupResponse response = port.itemLookup(lookup);
String r = response.toString();
System.out.println("response: " + r);
System.out.println("API Test stopped");
}
}
Как видите, нет части, где я подписываю запрос. Я прошел через многие используемые классы и не нашел методов для подписания запроса.
Итак, как подписать запрос?
Я действительно что-то нашел в документации: запрос аутентификации
Но они не используют свой собственный API. Предлагаемые решения более или менее предназначены только для ручного использования. Поэтому я посмотрел в клиентских классах, чтобы разобраться, смогу ли я получить URL запроса и поместить все части, необходимые для подписания запроса, в себя. Но таких методов нет.
Я надеюсь, что кто-то может указать, что я делаю неправильно.
Это то, что я сделал, чтобы решить проблему. Вся заслуга принадлежит Джону и парням с форумов Амазонки.
Прежде чем я обрисую в общих чертах, что я сделал, вот ссылка на пост, который помог мне решить проблему: Пост форума на форумах Amazon .
Я скачал файл awshandlerresolver.java, ссылка на который есть в посте. Затем я изменил свой собственный код, чтобы он выглядел так:
package client;
import com.ECS.client.jax.AWSECommerceService;
import com.ECS.client.jax.AWSECommerceServicePortType;
import com.ECS.client.jax.ItemLookup;
import com.ECS.client.jax.ItemLookupResponse;
import com.ECS.client.jax.ItemLookupRequest;
public class Client {
public static void main(String[] args) {
System.out.println("API Test startet");
AWSECommerceService service = new AWSECommerceService();
service.setHandlerResolver(new AwsHandlerResolver("<Secret Key>")); // important
AWSECommerceServicePortType port = service.getAWSECommerceServicePort();
ItemLookupRequest itemLookup = new ItemLookupRequest();
itemLookup.setIdType("ASIN");
itemLookup.getItemId().add("B000RE216U");
ItemLookup lookup = new ItemLookup();
lookup.setAWSAccessKeyId("<Access Key>"); // important
lookup.getRequest().add(itemLookup);
ItemLookupResponse response = port.itemLookup(lookup);
String r = response.toString();
System.out.println("response: " + r);
System.out.println("API Test stopped");
}
}
Печать на конце более или менее бесполезна. Но это работает. Я также использовал связанный с WSDL Jon для создания нового клиента веб-сервиса. Я только что изменил URL в учебнике, который разместил в своем вопросе.