[Dresden-pm] Hilfe zu Packages und SOAP gesucht

Jens Puruckherr jpuruckherr at cyberport.de
Mit Aug 13 01:58:33 CDT 2003


Hallo,

1. Problem:
ich habe einen Satz Klassen geschrieben und in einer entsprechenden 
Struktur im Filesystem abgelegt:

Shop
	Artikel
		Artikel.pm
		Attribut.pm
		Hersteller.pm
		Bild.pm
	Kunde
		Kunde.pm
		Kundenklasse.pm
		....
Shop.pm
Interface.pm
DBWrapper.pm
XMLHelper.pm


Der Pfad wird überhall mit use lib "/...../Shop/" eingebunden. Die
Packages heissen:

Shop::Shop
Shop::Interface
Shop::DBWarapper
...
Shop::Artikel::Artikel
Shop::Artikel::Attribut
....
Shop::Kunde::Kunde
Shop::Kunde::Kundenklasse
....

und so weiter. Das erscheint mir irgendwie zu aufwendig, immer den
ganzen Pfad mit anzugeben. Auch im Code muss ich alles komplett
aussschreiben.
Anderenfalls wird das entsprechende Package nicht gefunden: Es wird
nicht rekursiv in der Struktur gesucht. Ist das so richtig?
Lasse ich allles weg und  nenne nur den Modulnamen, wird nix gefunden.

2. Problem:
Das Package Shop::Interface.pm stellt ein Stück Logik dar, welches
via SOAP exportiert wird:
----------------------------------------------
#!/usr/bin/perl
package Shop::Interface;

use strict;
use warnings;
use XML::Xerces;
use MIME::Base64; # Bilder codieren

use lib "/home/pummel/data/scripts/bidi/Shop";
use Shop;
use Shop::Artikel::Artikel;
use Shop::Artikel::Attribut;
use Shop::Artikel::Bild;
use Shop::Artikel::Hersteller;
use Shop::DBWrapper;
use Shop::Kunde::Kunde;
use Shop::XMLHelper;

sub getArtikel{...}
sub setArtikel{...}
sub setKunde{...}
sub getKunde{...}
....


Diese werden via SOAP exportiert:
---------------------------------------------
#!/usr/bin/perl 
use strict;
use warnings;
use lib "/home/pummel/data/scripts/bidi/Shop";

use SOAP::Transport::HTTP +trace => qw(all);
use Interface;   ## hier findet er Interface.pm!!!!

my $daemon =  SOAP::Transport::HTTP::Daemon
      -> new( LocalAddr => 'localhost',LocalPort => 8081)
      -> 
dispatch_to('Interface::(?:setArtikel|getArtikel|setKunde|getKunde)')
      ->on_action(sub {..}
	...
$deamon->handle;
-----------------------------------------------

Ein  Aufruf einer Methode des Servers gint immer nur ein:

Failed to locate method (getKunde) in class (Interface) at
/usr/local/lib/perl5/site_perl/5.8.0/SOAP/Lite.pm line 2195.

Die Komplette Soap-Nachricht spare ich mir. Der SOAP- Server erkennt 
aber ordentlich die aufgerufenen Methode:
"urn:Interface#getKunde" via on_action. An der Stelle bin ich ratlos
... warum findet er nix?



Mit freundlichen Grüßen

Jens Puruckherr