| 

.NET C# Java Javascript Exception

Probleme mit Amazon Webservice bzw. Axis

Dies ist das Archiv des ehemaligen Forums zum Thema Groovy, Grails, Griffon und Bean Scripting Framework, welches unter groovy-forum.de existierte. Die neue Adresse des Groovy-Forums ist: http://codekicker.de/fragen/themen/groovy.


Probleme mit Amazon Webservice bzw. Axis

dawie - 19.11.2009 09:59
Hallo zusammen,

ich versuche gerade einen Amazon-Webservice zu konsumieren, leider ohne Erfolg. Vielleicht hat ja jemand von euch schon Erfahrungen damit gemacht.

Ich habe zunächst eine einfache Groovy-Klasse im Ordner src/groovy/ angelegt. Diese sieht wie folgt aus:

import java.net.URL;
import javax.xml.namespace.QName;

import java.net.MalformedURLException;
import java.rmi.RemoteException;

import com.amazon.advertising.api.AWSECommerceService;
import com.amazon.advertising.api.AWSECommerceServiceLocator;
import com.amazon.advertising.api.AWSECommerceServicePortType;
import com.amazon.advertising.api.ItemSearchRequest;
import com.amazon.advertising.api.ItemSearch;
import com.amazon.advertising.api.ItemSearchResponse;

import org.apache.axis.ConfigurationException;
import org.apache.axis.EngineConfiguration;
import org.apache.axis.configuration.FileProvider;

public class AmazonCover extends AbstractPlugin {

    private static final String END_POINT = "soap.amazon.de";
    
    // Authentication: WS-Security X.509
    private static final String WSDD = "x509.wsdd";
    
    // Amazon Access Key ID
    private static final String AWS_ACCESS_KEY_ID = "xxxxxxxxxxxxxxxxxxxx";
                                                     
    private static URL PORT_ADDRESS;
    static {
        try {
            PORT_ADDRESS = new URL("[&quot]; + END_POINT + "/onca/soap?Service=AWSECommerceService");
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }
    
    // daten von amazon laden
    public boolean retrieveData(String artist, String album) {
		try {
			// Load the deployment descriptor and use that to obtain an instance of the port.
			// The deployment descriptor tells Axis how to authenticate outgoing request.
			EngineConfiguration serviceConfig   = new FileProvider("resources", WSDD);
			AWSECommerceService locator         = new AWSECommerceServiceLocator(serviceConfig);
			AWSECommerceServicePortType service = locator.getAWSECommerceServicePort(PORT_ADDRESS);
			
			// itemRequest
			ItemSearchRequest itemRequest = new ItemSearchRequest();
			
			println("suche daten von " + artist + ", album: " + album);
			
			// Fill in the request object:
	        itemRequest.setSearchIndex("Music");
	        itemRequest.setArtist(artist);
	        itemRequest.setTitle(album);
			
			// responseGroup
			java.lang.String[] responseGroup = new String[2];
			responseGroup[0] = "Small";
			responseGroup[1] = "Images";
			itemRequest.setResponseGroup(responseGroup);

	        ItemSearch itemSearch = new ItemSearch();
			itemSearch.setAWSAccessKeyId(AWS_ACCESS_KEY_ID);
			
			println("checkpoint 1");
			itemSearch.setRequest(itemRequest);
			
			// Call the Web service operation and store the response in the response object:
			ItemSearchResponse response = service.itemSearch(itemSearch);
			
		 } catch (Exception e){
			 println("fehler");
			 e.printStackTrace();
		 }
    	// hat funktioniert...
    	return true;
    }
}

Bis zur Ausgabe "checkpoint 1" funktioniert auch alles wie gewünscht. Allerdings wird mir dann der folgende Fehler ausgegeben:

<deployment xmlns="[xml.apache.org]; xmlns:java="[xml.apache.org];
	<transport name="http" pivot="java:org.apache.axis.transport.http.HTTPSender" />
	<globalConfiguration>
		<requestFlow>
			<handler type="java:org.apache.axis.message.addressing.handler.AddressingHandler" />
			<handler type="java:org.apache.ws.axis.security.WSDoAllSender">
				<parameter name="action" value="Timestamp Signature" />
				<parameter name="signaturePropFile" value="/Users/david/Documents/grails/myapp/resources/amazon_certificate.properties" />
				<parameter name="signatureKeyIdentifier" value="DirectReference" />
				<parameter name="user" value="my_amazon_cert" />
			</handler>
		</requestFlow>
		<parameter name="addressing.sendReplyTo" value="true" />
	</globalConfiguration>
</deployment>

Im Ordner der Anwendung "myapp" gibt es einen Ordner "resources". Darin liegen die Dateien "x509.wsdd", "amazon_certificate.properties" und "my_amazon_cert.p12". Die Datei "x509.wsdd" scheint ordnungsgemäß gefunden zu werden da der dort angegebene Pfad zur "amazon_certificate.properties" in der Fehlermeldung erscheint. Aber offensichtlich wird die Datei "amazon_certificate.properties" nicht gefunden. Ich habe schon alles erdenkliche damit versucht: Datei in das Hauptverzeichnis gelegt, den Pfad relativ angegeben usw. aber der Fehler bleibt der Selbe.

Der Inhalt der Datei "amazon_certificate.properties" lautet:
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
org.apache.ws.security.crypto.merlin.keystore.type=pkcs12
org.apache.ws.security.crypto.merlin.keystore.password=xxxxxxx
org.apache.ws.security.crypto.merlin.keystore.alias=my_amazon_cert
org.apache.ws.security.crypto.merlin.keystore.user=my_amazon_cert
org.apache.ws.security.crypto.merlin.file=my_amazon_cert.p12

Vielleicht hat ja einer von euch eine Idee...

Ratlose Grüße
David


Stelle deine Groovy-Frage jetzt!


Diese Seite zeigt den Thread "Probleme mit Amazon Webservice bzw. Axis" der ehemaligen Webseite groovy-forum.de, welche durch einen Serverunfall zerstört wurde. codekicker.de hat viele Konversationen über die beliebte Programmiersprache Groovy und zugehörige Frameworks wie das Grails-Framework retten können.

Hast Du eine Frage zum Thema Groovy, Grails oder allgemein Java? Viele ehemalige groovy-forum.de Mitglieder beantworten dir auf codekicker.de deine Frage! Stelle jetzt eine Frage!

Viele weitere Diskussionen zu Grails und Groovy befinden sich auf der Threadübersicht des alten groovy-forum.de.