Fehler beim Veröffentlichen eines Webservice

mainfred

Mitglied
Hallo Leute!

Ich scheitere an einem Mini-Projekt das sich eigentlich gar nicht kompliziert anhört: Ein simpler Webshop soll programmiert werden, der Produkte beinhaltet und Kunden sollen Waren anzeigen bzw. in den Warenkorb legen können. Realisiert soll der Shop als WebService werden, mittels Client greifen "Kunden" darauf zu

Kein Problem denk ich mir zuerst und code los:

Java:
package org;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.xml.ws.RequestWrapper;
import javax.xml.ws.ResponseWrapper;


class Product {
	String name;
	int price;
	int id;
	String eigenschaften;

	public Product(String name, int price, int id, String eigenschaften) {
		this.name = name;
		this.price = price;
		this.id = id;
		this.eigenschaften = eigenschaften;
	}
}


@WebService(targetNamespace = "http://org/", portName = "WebshopPort", serviceName = "WebshopService")
public class Webshop {

	protected static Product[] produktarray = new Product[5];
	
	@WebMethod(operationName = "erzeuge", action = "urn:Erzeuge")
	@RequestWrapper(className = "org.jaxws.Erzeuge", localName = "erzeuge", targetNamespace = "http://org/")
	@ResponseWrapper(className = "org.jaxws.ErzeugeResponse", localName = "erzeugeResponse", targetNamespace = "http://org/")
	public void erzeuge() {

	produktarray[0] = new Product("DVD", 20, 1, "Brachialkomödie");
	produktarray[1] = new Product("Buch", 20, 2, "Quine - Grundzüge der Logik");
	produktarray[2] = new Product("Spielzeug", 50, 3, "LEGO");
	produktarray[3] = new Product("Schmuck", 100, 4, "Swarovski");
	produktarray[4] = new Product("TV", 999, 5, "Philips 3D");

	}
	
	@WebMethod(operationName = "showPrice", action = "urn:ShowPrice")
	@RequestWrapper(className = "org.jaxws.ShowPrice", localName = "showPrice", targetNamespace = "http://org/")
	@ResponseWrapper(className = "org.jaxws.ShowPriceResponse", localName = "showPriceResponse", targetNamespace = "http://org/")
	public int showPrice(@WebParam(name = "arg0") String name) {
		int i=0;
		for(;i<produktarray.length;i++) {
			if((produktarray[i].name).equals(name)) {
				break;
			}
		}
		Product obj = produktarray[i];
		return obj.price;
	}
	
	@WebMethod(operationName = "showEigenschaften", action = "urn:ShowEigenschaften")
	@RequestWrapper(className = "org.jaxws.ShowEigenschaften", localName = "showEigenschaften", targetNamespace = "http://org/")
	@ResponseWrapper(className = "org.jaxws.ShowEigenschaftenResponse", localName = "showEigenschaftenResponse", targetNamespace = "http://org/")
	public String showEigenschaften(@WebParam(name = "arg0") String name) {
		int i=0;
		for(;i<produktarray.length;i++) {
			if((produktarray[i].name).equals(name)) {
				break;
			}
		}
		Product obj = produktarray[i];
		return obj.eigenschaften;
	}
	
	@WebMethod(operationName = "listAll", action = "urn:ListAll")
	@RequestWrapper(className = "org.jaxws.ListAll", localName = "listAll", targetNamespace = "http://org/")
	@ResponseWrapper(className = "org.jaxws.ListAllResponse", localName = "listAllResponse", targetNamespace = "http://org/")
	public Product[] listAll() {
		return produktarray;
	}
	
	@WebMethod(operationName = "getProduct", action = "urn:GetProduct")
	@RequestWrapper(className = "org.jaxws.GetProduct", localName = "getProduct", targetNamespace = "http://org/")
	@ResponseWrapper(className = "org.jaxws.GetProductResponse", localName = "getProductResponse", targetNamespace = "http://org/")
	public Product getProduct(@WebParam(name = "arg0") String name) {
		int i=0;
		for(;i<produktarray.length;i++) {
			if((produktarray[i].name).equals(name)) {
				break;
			}
		}
		Product obj = produktarray[i];
		return obj;
	}


}

Das ganze wollte ich in meiner Eclipse-Umgebung als "Web Service" veröffentlichen, klick also mit rechter Maustaste auf die Datei und es öffnet sich der Web Service Wizard. Klick auf "Next" um das Webservice zu erstellen und ... FEHLER

The value type "org.Product" used via the service class "org.Webshop" does not have a public default constructor. Chapter 5.4 of the JAX-RPC 1.1 specification requires a value type to have a public default constructor, otherwise a JAX-RPC 1.1 compliant Web service engine may be unable to construct an instance of the value type during deserialization.

Warum? Wieso? Ich versteh es nicht... Product hat doch einen public Constructor. Ich steh auf der Leitung ???:L Kann mir jemand weiterhelfen?

Danke im Vorraus!
 
G

gman

Gast
public default constructor

== einen Konstruktor ohne Parameter.

Java kann selber einen Default-Konstruktor hinzufügen, aber nur wenn es sonst keinen
Konstruktor gibt. Da du aber einen eigenen Konstruktor hast, kann Java auch keine
Default-Konstruktor automatisch hinzufügen.
 
Zuletzt bearbeitet von einem Moderator:

mainfred

Mitglied
Okay, ich verstehe.
Dann ergibt sich aber ein neues Problem: Ohne eigenen Konstruktor kann ich keine Objekte wie

Java:
produktarray[4] = new Product("TV", 999, 5, "Philips 3D");

instanzieren. Gibt es überhaupt eine Möglichkeit, eigene Klassen im Webservice anzulegen (und Objekte davon zu erzeugen), ich sitze schon stundenlang davor und es funktioniert einfach nichts :(

Alle Tutorials die ich dazu finde beschäftigen sich immer nur mit einer Klasse, die als Webservice angeboten wird, aber es kann doch nicht so schwer sein so ein Webshop-Webservice zum Laufen zu bringen. ;(
 

andiv

Bekanntes Mitglied
Gib deiner Klasse doch einfach zwei Konstruktoren, einen mit Parametern und einen ohne. Oder hab ich das Problem missverstanden?
 

mainfred

Mitglied
So, habe den Kram jetzt zum Laufen gebracht, aber, wie könnte es anders sein, jetzt hängt's beim Client. Starte ich, den kommt

Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: java.lang.InstantiationException: org.Webshop
at com.sun.xml.internal.ws.fault.SOAP11Fault.getProtocolException(Unknown Source)
at com.sun.xml.internal.ws.fault.SOAPFaultBuilder.createException(Unknown Source)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(Unknown Source)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(Unknown Source)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(Unknown Source)
at $Proxy22.erzeuge(Unknown Source)
at org.WebShopClient.main(WebShopClient.java:18)

Die Fehlermeldung gab's schon im Forum bloß hat da auch keiner weiter gewusst.

Was bitte sagen mit SOAPFaultExceptions??

Lg
 

Ähnliche Java Themen

Neue Themen


Oben