nach vielen Stunden Basteln und Lesen des gesamten Internets mehrmals Ich kann einfach nicht herausfinden, wie Sie Anfragen für die Verwendung mit der Product Advertising API zu unterzeichnen.Amazon Product Advertising API signierte Anfrage mit Java
Bisher konnte ich aus der bereitgestellten WSDL-Datei einen Client generieren. Ich habe dafür ein Tutorial von Amazon benutzt. Sie können es hier finden:
Tutorial for generating the web service client
Bisher keine Probleme. Um den Client zu testen, habe ich einen kleinen Code geschrieben. Der Code soll nur einige Informationen über ein Produkt erhalten. Das Produkt wird von seinem ASIN angegeben.
Der Code:
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");
}
}
Wie man dort sehen kann kein Teil ist, wo ich den Antrag unterschreiben. Ich habe mich durch viele der verwendeten Klassen durchgearbeitet und keine Methoden gefunden, um die Anfrage zu signieren.
Also, wie man eine Anfrage unterschreiben?
Ich fand tatsächlich etwas in der Dokumentation: request authentication
Aber sie haben keine eigene API verwenden. Die vorgeschlagenen Lösungen sind mehr oder weniger nur für den manuellen Gebrauch. Also habe ich in den Client-Klassen nachsortiert, um herauszufinden, ob ich die Anfrage-URL bekommen konnte und alle Teile, die für die Anfrage erforderlich sind, selbst einrichtete. Aber solche Methoden gibt es nicht.
Ich hoffe jemand kann darauf hinweisen, was ich falsch mache.
Dies ist, was ich getan habe, um das Problem zu lösen. Der ganze Kredit geht an Jon und die Jungs der Amazonas-Foren.
Bevor ich skizziere, was ich getan habe, hier ist ein Link zum Beitrag, der mir geholfen hat, das Problem zu lösen: Forum Post on Amazon forums.
Ich habe den awshandlerresolver.java heruntergeladen, der in der Post verlinkt ist. Als ich meinen eigenen Code modifiziert, so sieht es wie folgt aus:
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");
}
}
Die println am Ende mehr oder weniger nutzlos. Aber es funktioniert. Ich habe auch die WSDL Jon verknüpft, um einen neuen Webservice-Client zu generieren. Ich habe gerade die URLs in dem Tutorial geändert, das ich in meiner Frage gepostet habe.
danke für das Posten dieser Zusammenfassung, rettete mich gerade über einen Tagesaufwand! –
eine andere Sache: die [clientseitigen API-Generierungshinweise] (http://docs.amazonwebservices.com/AWSECommerceService/latest/GSG/YourDevelopmentEnvironment.html) machen es nicht explizit, dass der Entwickler ** den ** eingeben muss jaxws-custom.xml-Datei zu wsimport, oder Beispiele wie Jens 'werden nicht mit dem erzeugten Code kompiliert. –