после многих часов возиться и читать весь интернет несколько раз, я просто не могу понять, как подписывать запросы на использование с 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-адрес запроса и поместить все части, необходимые для подписи запроса в себе. Но таких методов нет.
Я надеюсь, что кто-то может указать, что я делаю неправильно.
Это то, что я сделал для решения проблемы. Весь кредит идет Jon и ребята из форумов Amazon.
Прежде чем я опишу, что я сделал, вот ссылка на сообщение, которое помогло мне решить проблему: Сообщение форума на форумах 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");
}
}
println на конце более или менее бесполезен. Но это работает. Я также использовал WSDL Jon, связанный с созданием нового клиента webservice. Я просто изменил URL-адреса в учебнике, опубликованном в моем вопросе.