Продукт Amazon Рекламный API подписанный запрос с Java

после многих часов лужения и чтения целого Интернета несколько раз я просто не могу выяснить, как подписать запросы на использование с продуктом Рекламный 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("");
    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(""));  // important
    AWSECommerceServicePortType port = service.getAWSECommerceServicePort();

    ItemLookupRequest itemLookup = new ItemLookupRequest();
    itemLookup.setIdType("ASIN");
    itemLookup.getItemId().add("B000RE216U");

    ItemLookup lookup = new ItemLookup();
    lookup.setAWSAccessKeyId(""); // 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, связанный для генерации нового клиента веб-сервиса. Я просто изменил URL в учебном руководстве, которое я отправил в своем вопросе.

16
задан Community 23 May 2017 в 12:16
поделиться

1 ответ

Попробуйте это после создания сервиса

service.setHandlerResolver(new AwsHandlerResolver(my_AWS_SECRET_KEY));

Вам понадобится этот класс и этот jar-файл, чтобы добавить его в качестве ссылки в ваш проект, поскольку AwsHandlerResolver использует кодировку Base64.

Вам нужно будет переименовать файл AwsHandlerResolver в имя класса, поскольку имя файла написано в нижнем регистре.

Я думаю, что остальной код у вас в порядке.

WSDL - http://webservices.amazon.com/AWSECommerceService/AWSECommerceService.wsdl

6
ответ дан 30 November 2019 в 23:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: