WSDL erzeugen

29/01/2008 - 09:00 von Jens Puruckherr | Report spam
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
 

Lesen sie die antworten

#1 Christian Winter
30/01/2008 - 21:54 | Warnen spam
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

Ähnliche fragen