Я не использую SOAP API, но ваши требования к Баунти не указывали, что он должен использовать SOAP только для того, чтобы вы вызывали Amazon и получали результаты. Итак, я опубликую этот рабочий пример с использованием REST API, который по крайней мере будет соответствовать вашим заявленным требованиям:
Я хотел бы получить пример рабочего кода, который попадает на сервер amazon и возвращает результаты
Для выполнения требований подписи вам потребуется загрузить следующее:
http://associates -amazon.s3.amazonaws.com / Подписанные-запросы / образцы / amazon-product-advt-api-sample-java-query.zip
Разархивируйте его, возьмите файл com.amazon.advertising.api.sample.SignedRequestsHelper.java
и поместите его прямо в ваш проект. Этот код используется для подписи запроса.
Вам также понадобится скачать Apache Commons Codec 1.3 из следующего и добавить его в свой путь к классу, т.е. добавить его в библиотеку вашего проекта. Обратите внимание, что это единственная версия кодека, которая будет работать с вышеуказанным классом (SignedRequestsHelper
)
http://archive.apache.org/dist/commons/codec/binaries/commons-codec-1.3.zip
Теперь вы можете скопировать и вставить следующее, заменив your.pkg.here
на правильное имя пакета и заменив свойства SECRET
и KEY
:
package your.pkg.here;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
public class Main {
private static final String SECRET_KEY = "<YOUR_SECRET_KEY>";
private static final String AWS_KEY = "<YOUR_KEY>";
public static void main(String[] args) {
SignedRequestsHelper helper = SignedRequestsHelper.getInstance("ecs.amazonaws.com", AWS_KEY, SECRET_KEY);
Map<String, String> params = new HashMap<String, String>();
params.put("Service", "AWSECommerceService");
params.put("Version", "2009-03-31");
params.put("Operation", "ItemLookup");
params.put("ItemId", "1451648537");
params.put("ResponseGroup", "Large");
String url = helper.sign(params);
try {
Document response = getResponse(url);
printResponse(response);
} catch (Exception ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
private static Document getResponse(String url) throws ParserConfigurationException, IOException, SAXException {
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.parse(url);
return doc;
}
private static void printResponse(Document doc) throws TransformerException, FileNotFoundException {
Transformer trans = TransformerFactory.newInstance().newTransformer();
Properties props = new Properties();
props.put(OutputKeys.INDENT, "yes");
trans.setOutputProperties(props);
StreamResult res = new StreamResult(new StringWriter());
DOMSource src = new DOMSource(doc);
trans.transform(src, res);
String toString = res.getWriter().toString();
System.out.println(toString);
}
}
Как вы можете видеть, это намного проще в настройке и использовании, чем SOAP API. Если у вас нет особых требований для использования SOAP API, я настоятельно рекомендую вместо этого использовать REST API.
Одним из недостатков использования REST API является то, что результаты не разбиваются на объекты для вас. Это можно исправить, создав необходимые классы на основе wsdl.