# Gui erstellen für Amazon Webservice Client



## BlazZ (12. Dezember 2009)

Hallo zusammen,

eins vorweg, ich habe weder Erfahrung mit der Erstellung von Guis noch mit dem Nutzen von Webservices. Nichts desto trotz habe ich die Aufgabe bekommen den Webservices von Amazon zu nutzen und einen Client zu erstellen der in der Produktdatenbank von Amazon nach Produkten (in meinem Fall hatte ich an Bücher gedacht) sucht. 

Ich habe bisher mit wsimport den passenden Stub für diese WSDL erzeugt:

http://ecs.amazonaws.com/AWSECommerceService/AWSECommerceService.wsdl

Nun versuche ich den passenden Client zu realisieren um auf den Client zuzugreifen:

Ich bin mir aber erhlichgesagt noch nicht sicher ob dies auch so klappt. aber nun gut.


```
import java.rmi.RemoteException;
import org.apache.axis2.AxisFault;
import com.amazon.webservices.awsecommerceservice._2009_11_01.*;


public class AmazonSearch {
	public static void search(){
		String keyword = "Verteilte Anwendungen";

			try{
				
				AWSECommerceServiceStub stub= new AWSECommerceServiceStub();
			
				AWSECommerceServiceStub.ItemSearch iss = new AWSECommerceServiceStub.ItemSearch();
							
				AWSECommerceServiceStub.ItemSearch_type0 is = new AWSECommerceServiceStub.ItemSearch_type0();
				
				String awsAccessKeyID = "AKIAJYZSMOJOBACNCVRQ";
				is.setAWSAccessKeyId(awsAccessKeyID);
								
				
				AWSECommerceServiceStub.ItemSearchRequest req = new AWSECommerceServiceStub.ItemSearchRequest();		
				req.setKeywords(keyword);
				req.setSearchIndex("Books");
				//req.setAuthor("Abts");		
				
												
				is.setShared(req);
				iss.setItemSearch(is);
				
				AWSECommerceServiceStub.ItemSearchResponse resp = stub.ItemSearch(iss);
				
							
		}catch (AxisFault e){
				System.out.println(e);
				}
		catch (RemoteException e){
				System.out.print(e);
		}
	}
}
```


Mit Hilfe des Eclipse Plugins Jigloo habe ich die folgende Oberfläsche erstellt:



```
package console;

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

import com.cloudgarden.resource.SWTResourceManager;


public class newConsole extends org.eclipse.swt.widgets.Composite {

	private Menu menu1;
	private MenuItem aboutMenuItem;
	private Menu helpMenu;
	private MenuItem helpMenuItem;
	private List output;
	private Combo combo1;
	private Text SearchField;
	private Label searchbg;
	private Label logo;
	private Button Search;
	private MenuItem exitMenuItem;
	private Menu fileMenu;
	private MenuItem fileMenuItem;

	{
		//Register as a resource user - SWTResourceManager will
		//handle the obtaining and disposing of resources
		SWTResourceManager.registerResourceUser(this);
	}

	public newConsole(Composite parent, int style) {
		super(parent, style);
		initGUI();
	}
	

	private void initGUI() {
		FormData outputLData = new FormData();
		outputLData.left =  new FormAttachment(0, 1000, 27);
		outputLData.top =  new FormAttachment(0, 1000, 184);
		outputLData.width = 756;
		outputLData.height = 393;
		output.setLayoutData(outputLData);
		FormData combo1LData = new FormData();
		combo1LData.left =  new FormAttachment(0, 1000, 109);
		combo1LData.top =  new FormAttachment(0, 1000, 103);
		combo1LData.width = 149;
		combo1LData.height = 21;
		combo1.setLayoutData(combo1LData);
		FormData SearchFieldLData = new FormData();
		SearchFieldLData.left =  new FormAttachment(0, 1000, 310);
		SearchFieldLData.top =  new FormAttachment(0, 1000, 103);
		SearchFieldLData.width = 444;
		SearchFieldLData.height = 20;
		SearchField.setLayoutData(SearchFieldLData);
		FormData searchbgLData = new FormData();
		searchbgLData.left =  new FormAttachment(0, 1000, 27);
		searchbgLData.top =  new FormAttachment(0, 1000, 93);
		searchbgLData.width = 757;
		searchbgLData.height = 39;
		searchbg.setLayoutData(searchbgLData);
		FormData logoLData = new FormData();
		logoLData.left =  new FormAttachment(0, 1000, 592);
		logoLData.top =  new FormAttachment(0, 1000, 12);
		logoLData.width = 194;
		logoLData.height = 81;
		logo.setLayoutData(logoLData);
		FormData SearchLData = new FormData();
		SearchLData.left =  new FormAttachment(0, 1000, 704);
		SearchLData.top =  new FormAttachment(0, 1000, 144);
		SearchLData.width = 56;
		SearchLData.height = 22;
		Search.setLayoutData(SearchLData);
		try {
			this.setBackground(SWTResourceManager.getColor(255, 255, 255));
			FormLayout thisLayout = new FormLayout();
			this.setLayout(thisLayout);
			this.setFont(SWTResourceManager.getFont("Arial", 8, 0, false, false));
			{
				output = new List(this, SWT.MULTI);
				output.setBackground(SWTResourceManager.getColor(192, 192, 192));
			}
			{
				combo1 = new Combo(this, SWT.NONE);
			}
			{
				SearchField = new Text(this, SWT.NONE);
			}
			{
				searchbg = new Label(this, SWT.NONE);
				searchbg.setImage(SWTResourceManager.getImage("amazon_suche.JPG"));
			}
			{
				logo = new Label(this, SWT.NONE);
				logo.setText("logo");
				logo.setImage(SWTResourceManager.getImage("webservices.JPG"));
			}
			{
				Search = new Button(this, SWT.PUSH | SWT.CENTER);
				Search.setText("Search");
			}
			{
				menu1 = new Menu(getShell(), SWT.BAR);
				getShell().setMenuBar(menu1);
				{
					fileMenuItem = new MenuItem(menu1, SWT.CASCADE);
					fileMenuItem.setText("File");
					{
						fileMenu = new Menu(fileMenuItem);
						{
							exitMenuItem = new MenuItem(fileMenu, SWT.CASCADE);
							exitMenuItem.setText("Exit");
						}
						fileMenuItem.setMenu(fileMenu);
					}
				}
				{
					helpMenuItem = new MenuItem(menu1, SWT.CASCADE);
					helpMenuItem.setText("Help");
					{
						helpMenu = new Menu(helpMenuItem);
						{
							aboutMenuItem = new MenuItem(helpMenu, SWT.CASCADE);
							aboutMenuItem.setText("About");
						}
						helpMenuItem.setMenu(helpMenu);
					}
				}
			}
			this.layout();
			pack();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	

	public static void main(String[] args) {
		Display display = Display.getDefault();
		Shell shell = new Shell(display);
		newConsole inst = new newConsole(shell, SWT.NULL);
		Point size = inst.getSize();
		shell.setLayout(new FillLayout());
		shell.layout();
		if(size.x == 0 && size.y == 0) {
			inst.pack();
			shell.pack();
		} else {
			Rectangle shellBounds = shell.computeTrim(0, 0, size.x, size.y);
			shell.setSize(shellBounds.width, shellBounds.height);
		}
		shell.open();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch())
				display.sleep();
		}
	}

}
```


Ich habe leider von der Gui Entwicklung null Ahnung und könnte etwas hilfe gebrauchen um die Funktionalitäten mit der Gui zu verbinden.

Also beispielsweise habe ich das TextField das als mein Eingabefeld für den Such-String genutzt werden soll. Nur wie verbinde ich dies mit den Funktionen ?

Der Search-Button soll nachtürlich die Anfrage an den Webservices stellen.

Als Ausgabe habe ich bisher eine Textarea festgelegt. Ich bin mir bei der Ausgabe noch nicht wirklich sicher ob ich das richtige Format für die Ausgabe gewählt habe. Vielleicht wäre eine Liste auch besser. 

Ausgegeben werden sollten unter anderem der Autor, die ISBN, Preis, Verlag. Also einige Grundfunktionen und wenn ich etwas irgendwie schaffe auch das passende Vorschaubild. 

Ich hoffe das ihr mir ein wenig dabei Helfen könnt. Ich bin für jeden Tipp dankbar !

Vielen Dank im Voraus. 

Mit freundlichen Grüßen 

BlazZ


----------



## cow (14. Dezember 2009)

Wen ich das richtig Verstanden hast willst du in deine Gui Funktionalität rein bringen 

Da du in die Richtung ja wie du selber sagst keinerlei Erfahrungen mitbringst will ich dir mal diesen Link andiehand geben. 
 Es wäre ja nicht schlecht wen man wüsste was man macht bzw, was die da andere Posten. 

Gruß The Cow


----------



## BlazZ (3. Januar 2010)

Danke für die Hilfe, leider funktioniert noch nicht mal der Inhalt des ganzen. Deswegen versuche cih das ganze jetzt erst einmal ohne swt ..

Also ich habe ein grundlegendes Problem und bin ein wenig verzeifelt.

Um die ItemSearchResponse umzusetzen muss ich die unter ItemSearch angegeben Klassen einbinden. 
Eine davon ist request. Ich vermute ich bekomme die Fehlermeldung:

T*ype mismatch: cannot convert from void to AWSECommerceServiceStub.ItemSearchResponse*

wegen dem Request. Request ist ein Array denn ich in der im Stub generierten Klasse gibt es ItemSearchRequest[] request.

Hier der gesamte Code für ItemSearchResponse.

ItemSearchResponse itemSearchResponse = stub.ItemSearch(marketplaceDomain, awsAccessKeyID, subscriptionId, associateTag, xmlEscaping, validate, itemSearchRequest, request);	



Mein gesamter Code sieht so aus:


```
import com.amazon.webservices.awsecommerceservice._2009_11_01.AWSECommerceServiceStub.ItemSearchRequest;
import com.amazon.webservices.awsecommerceservice._2009_11_01.AWSECommerceServiceStub.ItemSearchResponse;
import com.amazon.webservices.awsecommerceservice._2009_11_01.AWSECommerceServiceStub.ItemSearch;
import com.amazon.webservices.awsecommerceservice._2009_11_01.AWSECommerceServiceStub.Item;
import com.amazon.webservices.awsecommerceservice._2009_11_01.AWSECommerceServiceStub.ItemSearch_type0;
import com.amazon.webservices.awsecommerceservice._2009_11_01.AWSECommerceServiceStub.ItemSearchResponse_type0;
import com.amazon.webservices.awsecommerceservice._2009_11_01.AWSECommerceServiceStub;
import com.amazon.webservices.awsecommerceservice._2009_11_01.AWSECommerceServiceStub.Items;
import java.rmi.RemoteException;

import javax.xml.ws.Response;

import org.apache.axis2.AxisFault;

public class AWSClient {


	public static void main(String[] args) {
			new AWSClient();
	}

	public AWSClient(){
		
		String keyword = "Harry Potter";	
		String awsAccessKeyID = "AKIAJYZSMOJOBACNCVRQ";
		String marketplaceDomain = null;
		String subscriptionId = "pH9mSTMCB0yfVEY3lAIFmesn7tREmBz1MN304zZR";
		String xmlEscaping = null;
		String associateTag = null;
		String validate = null;
		
		AWSECommerceServiceStub stub = new AWSECommerceServiceStub();
		ItemSearchRequest itemSearchRequest = new ItemSearchRequest();

	//	com.amazon.webservices.awsecommerceservice._2009_11_01.AWSECommerceServiceStub.ItemSearchRequest[] request = new ItemSearchRequest[]{};
		ItemSearchRequest[] request = new ItemSearchRequest[]{itemSearchRequest};
		
				
		ItemSearch itemSearch = new ItemSearch();
		
			
		ItemSearch_type0 itemSearch_type0 = new ItemSearch_type0();
		
		itemSearch.setItemSearch(itemSearch_type0);
		itemSearch.getItemSearch().addRequest(itemSearchRequest);
		
/*
		itemSearch_type0.setAWSAccessKeyId(awsAccessKeyID);
		itemSearch_type0.setRequest(request);
		itemSearch_type0.setAssociateTag(associateTag);
		itemSearch_type0.setMarketplaceDomain(marketplaceDomain);
		itemSearch_type0.setShared(itemSearchRequest);
		itemSearch_type0.setSubscriptionId(subscriptionId);
		itemSearch_type0.setValidate(validate);
		itemSearch_type0.setXMLEscaping(xmlEscaping);
*/		
		
		itemSearchRequest.setSearchIndex("books");
		itemSearchRequest.setKeywords(keyword);
		
		
		try {
			ItemSearchResponse itemSearchResponse = stub.ItemSearch(marketplaceDomain, awsAccessKeyID, subscriptionId, associateTag, xmlEscaping, validate, itemSearchRequest, request);		
		}
		catch(AxisFault e){
			System.out.println(e);
		}
		catch(RemoteException e){
			System.out.println(e);
		}
		
		if(itemSearchResponse == null){
			System.out.println("Es wurde kein Ergebnis gefunden");
		}
		else{
		System.out.println("Ergebnis:");
		System.out.println("Title: " + itemSearchRequest.getTitle());
		System.out.println("Autor:" + itemSearchRequest.getAuthor());
		System.out.println("Hersteller:" + itemSearchRequest.getManufacturer());
		System.out.println("Maximum Preis:" + itemSearchRequest.getMaximumPrice());
		System.out.println("Minimum Preis:" + itemSearchRequest.getMinimumPrice());	
		}
	}
}
```

Ich muss in 3 Tagen eine Hausarbeit über den Webservices abgeben und ich komme einfach nicht weiter. ich hoffe ihr könnt mir helfen. Danke!


----------

