WSDL erzeugen

WSDL erzeugen

am 29.01.2008 09:00:07 von Jens Puruckherr

Hallo,

gibt es mittlerweile etwas Sinnvolles, was mir in Perl WSDL-Files
korrekt generiert? WSDL::Generator wird wohl nicht mehr weiterentwickelt
und kommt nur mit Perl5.6 klar - ansonsten finde ich nix weiter.
Muss ich wirklich meine WSDLs per Hand schreiben? Nicht wirklich ... oder?

Jens

Re: WSDL erzeugen

am 30.01.2008 21:54:59 von Christian Winter

Jens Puruckherr schrieb:
> gibt es mittlerweile etwas Sinnvolles, was mir in Perl WSDL-Files
> korrekt generiert? WSDL::Generator wird wohl nicht mehr weiterentwickelt
> und kommt nur mit Perl5.6 klar - ansonsten finde ich nix weiter.
> Muss ich wirklich meine WSDLs per Hand schreiben? Nicht wirklich ... oder?

Pod::WSDL wäre einen Blick wert. Ich ärgere mich allerdings auch
laufend darüber, dass das Thema so schlecht unterstützt ist.
Ich möchte auch SOAP::Lite nicht schlechtreden, aber die
Serverseite davon bereitet mir noch mal graue Haare, vor
allem im Hinblick auf Interoperabilität - wenn man als Clients
C#/VS.NET, PHP und Java hat und mit minimalem Aufwand _ein_
funktionierendes WSDL für alle bereitstellen möchte, läuft
man regelmäßig gegen die Wand, und haben dann alle die Description
gefressen, hat SOAP ganz eigenwillige Vorstellungen davon, wie
es SOAPAction und relative URIs interpretiert.

Ich bastel zwar immer mal wieder an einer Attribute::Handlers
basierten Erweiterung, mangels Zeit steht aber noch in den
Sternen, ob daraus mal etwas funktionierendes wird.

Von der Idee her würde das so aussehen:
1. Webservice-Klasse erbt von WSDL-Easy und definiert
"webmethods" über in- und out-Attribute:

package MyWebService;

use base 'WSDL::Easy';

sub mywebmethod : in('param1' => 'string', 'param2' => 'integer')
: out('result' => 'string')
{
# Methodencode, der einen Skalar zurückliefert
}


2. Webservice-Klasse wird über Handler instantiiert:
use MyWebService;

my $webservice : WebService(
"MyWebService",
"baseurl" => "http://tempuri.org",
"scriptpath" => "/cgi-bin/myservice.pl"
);

$webservice->dispatch;

3. "dispatch()" kümmert sich auch gleich darum, dass beim Aufruf
via GET mit dem Parameter "wsdl" ein ordnungsgemäßes WSDL
zurückgegeben wird, wie es auch .NET-Webservices können.

Die interne Konstruktor- und Attributlogik steht mittlerweile
für die Basistypen, das ist aber der einfachere Teil. Das schwierige
ist, aus den bekannten Infos auch ein WSDL zu machen, das von der
Gegenseite verstanden wird.

Die existierenden Module sind dafür scheinbar zu clever und
spucken entweder unverdauliches aus, oder aber zumindest Sachen,
die zu nicht-SOAP-kompatiblen Aufrufen führen. Momentan rätsel
ich noch rum, wie viel ich wirklich per Hand coden muss, oder
ob ich nicht doch zumindest einen Teil der Arbeit irgendwelchen
Modulen überlassen kann.

Für alle Anregungen und Erfahrungswerte wäre ich deshalb zutiefst
dankbar :)

Viele Grüße
-Christian

Re: WSDL erzeugen

am 31.01.2008 11:14:46 von Jens Puruckherr

Christian Winter schrieb:

> Pod::WSDL wäre einen Blick wert. Ich ärgere mich allerdings auch
> laufend darüber, dass das Thema so schlecht unterstützt ist.


Ahh - ein Leidensgenosse :-)


> Von der Idee her würde das so aussehen:

*Das* wär doch mal was.

Alles schreit nach Erweiterung des vorhandenene Connetors um div.
SOAP-Dienste. Wenn ich aber dann nicht einfach ein WSDL präsentiere
werde ich verstört angeguckt. Die Schmach will ich mir sparen. Und WSDL
per Hand setzen ... vergiss es ...
Ich überlege mittlerweile sogar, meine Webservices in PHP zu machen -
dort geht es nämlich ähnlich simple.

In Hoffnung auf bessere Zeiten


Jens