Dienst bereitstellen - Anfänger

bbklol

Mitglied
Hi,

ich bin für den Anfang etwas überfordert
und suche ein Tutorial,
wo mir genau erklärt wird wie man,
nachdem man einen Dienst programmiert hat,
ihn mittels wsdd bereitstellt.

http://www.wi.uni-muenster.de/pi/lehre/ws0405/seminar/02JavaWebServices.pdf
Ab Seite 6 komme ich nicht mehr ganz mit.

Ich versuche in der Kommandozeile die Befehle einzugeben
aber es kommen die typischen Fehlermeldungen,
die mir zeigen, dass java die entsprechenden Methoden
und Klasse nicht findet.

ich hoffe mir kann jemand helfen.

mfg,
bbklol
 
S

SlaterB

Gast
welche Befehle genau tippst du ein mit welchen Fehlermeldungen?
kannst du vorher normale Programme in der Konsole kompilieren, starten usw?
auch mit mehreren Klassen in verschiedenen packages, die interagieren?
kommt eine IDE wie Eclipse in Frage?

grob gesucht und überflogen für als Alternative denkbar gehalten:
WebService in Java
 

bbklol

Mitglied
Hi,

danke für die Hilfe.
Ich habe das WebService in Java ausprobiert.

Als ich jedoch auf Run klicke, in Eclipse,
liefert er mir folgender Fehlermeldung

(Ich habe anstatt Calculator und CalculatorServer, die Klassen
Test und TestServer genannt)

Code:
Exception in thread "main" java.lang.IllegalArgumentException: class de.test.TestServer has neither @WebSerivce nor @WebServiceProvider annotation
	at com.sun.xml.internal.ws.server.EndpointFactory.verifyImplementorClass(EndpointFactory.java:277)
	at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.getPrimaryWsdl(EndpointImpl.java:273)
	at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.createEndpoint(EndpointImpl.java:213)
	at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.publish(EndpointImpl.java:143)
	at com.sun.xml.internal.ws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:102)
	at javax.xml.ws.Endpoint.publish(Endpoint.java:170)
	at de.test.TestServer.main(TestServer.java:8)


mfg,
bbklol
 
M

Marcinek

Gast
Ich glaube, dass die Fehlermeldung eindeutig ist?

Hast du sie mal ins deutsche übersetzt?
 

bbklol

Mitglied
Ja :)

Ich habe sie ins deutsche Übersetzt.

Es fehlen entsprechende Notationen,
aber wenn ich sie setze läuft es trotzdem nicht.
 

bbklol

Mitglied
Hi,

ich habe logischerweise die WebServiceProvider Annotation für
TestServer.java gesetzt und erhalte folgende Fehlermeldung:

Code:
Exception in thread "main" java.lang.IllegalArgumentException: class de.test.TestServer doesn't implement Provider or AsyncProvider interface
	at com.sun.xml.internal.ws.server.EndpointFactory.verifyImplementorClass(EndpointFactory.java:286)
	at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.getPrimaryWsdl(EndpointImpl.java:273)
	at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.createEndpoint(EndpointImpl.java:213)
	at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.publish(EndpointImpl.java:143)
	at com.sun.xml.internal.ws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:102)
	at javax.xml.ws.Endpoint.publish(Endpoint.java:170)
	at de.test.TestServer.main(TestServer.java:13)

Ich will auch keine Lösung vorgekaut kriegen.
Aber der richtige Wink ohne von Pontius zu Pilatus zu kommen wäre super hilfreich :/

mfg,
bbklol
 
S

SlaterB

Gast
dann hast du anscheinend die falsche Annotation gewählt,
hier habe ich den zugehörigen Quelltext gefunden, falls aktuelle Version:
Java:
262       /**
  263        * Verifies if the endpoint implementor class has @WebService or @WebServiceProvider
  264        * annotation
  265        *
  266        * @return
  267        *       true if it is a Provider or AsyncProvider endpoint
  268        *       false otherwise
  269        * @throws java.lang.IllegalArgumentException
  270        *      If it doesn't have any one of @WebService or @WebServiceProvider
  271        *      If it has both @WebService and @WebServiceProvider annotations
  272        */
  273       public static boolean verifyImplementorClass(Class<?> clz) {
  274           WebServiceProvider wsProvider = clz.getAnnotation(WebServiceProvider.class);
  275           WebService ws = clz.getAnnotation(WebService.class);
  276           if (wsProvider == null && ws == null) {
  277               throw new IllegalArgumentException(clz +" has neither @WebSerivce nor @WebServiceProvider annotation");
  278           }
  279           if (wsProvider != null && ws != null) {
  280               throw new IllegalArgumentException(clz +" has both @WebSerivce and @WebServiceProvider annotations");
  281           }
  282           if (wsProvider != null) {
  283               if (Provider.class.isAssignableFrom(clz) || AsyncProvider.class.isAssignableFrom(clz)) {
  284                   return true;
  285               }
  286               throw new IllegalArgumentException(clz +" doesn't implement Provider or AsyncProvider interface");
  287           }
  288           return false;
  289       }
com.sun.xml.internal.ws.server: EndpointFactory.java

für die WebService-Annotation wird kein Interface geprüft ;)

-----

bei solch komplizierten Klassen rechne ich durchaus mit allerlei Schwierigkeiten für dich, aber bisher baust du sie doch nur selber ein oder?
in meinem Link hat die Calculator-Klasse genau die @WebService-Annotation,
WEDER keine Annotation (dein erster Versuch) NOCH @WebServiceProvider (dein zweiter Versuch)

wie soll man solche unerwarteten Sackgassen von dir im Voraus erkennen? ;)
schon dass du TestServer schreibst ist eine Abweichung, versuche doch erstmal allein die Klassen so wie sie sind zu kopieren,
auch die angegebenen packages genau einzuhalten
 

bbklol

Mitglied
Hi,

du hast Recht, erstmal sollte man alles kopieren,
wenn man von der Materie nicht viel versteht.

Ich habe das Problem gelöst, das Tutorial ist doch korrekt.

War mir eine Lehre. Vielen Dank für deine Hilfe.

mfg,
bbklol
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben