Loading ...
Sorry, an error occurred while loading the content.
 

WSDL::Generator

Expand Messages
  • Pierre DENIS
    Hi, I ve published a module some times ago: WSDL::Generator which (you ve probably guessed) generate automatically WSDL code by recording the calls made by a
    Message 1 of 4 , May 7, 2002
      Hi,

      I've published a module some times ago: WSDL::Generator which (you've
      probably guessed) generate automatically WSDL code by recording the calls
      made by a client to a module.

      The underlying goal of this module is: SIMPLICITY for the developer.
      The other solutions I've seen imply a lot of administrative work such as
      declaring all the methods and variable types. That defeats the purpose of
      perl to be a non-typed not declarative language for lazy programmers like
      me.
      WSDL::Generator simply catches all calls to a module that will be published
      as a web service and generate a WSDL file based on these infos. Even methods
      created through AUTOLOAD will be described in the wsdl file.

      Now, here are the issues:
      I need to extend it to have a better coding of arrays and binary data. The
      data types it manages need to be expanded.
      Help and advices are welcome, especially since I'm not a specialist of the
      WSDL specs.

      The wsdl file generation works locally, not through SOAP: The client script
      invokes methods on an unknown module, WSDL::Generator intercept these
      (through UNIVERSAL::AUTOLOAD) and dispatch the calls to the module, locally,
      and store all the information passed through. When calls are finished, the
      wsdl file is generated.
      It works very well, however, the ideal case would be to use WSDL::Generator
      through SOAP, probably by subclassing SOAP::Lite and use +autodispatch.
      Any thought about this scenario?


      Regards

      Pierre Denis
    • NinoSavatte
      I m playing around with SOAP::Lite and WSDL::Generator and I must admit I m in over my head. Still, I managed to create a server and client that lookup our
      Message 2 of 4 , May 29, 2002
        I'm playing around with SOAP::Lite and WSDL::Generator and I must
        admit I'm in over my head. Still, I managed to create a server and
        client that lookup our Primary and Secondary on-call analysts names
        and numbers. I'd like to generate the WSDL for the service but I'm
        not quite understanding the usage of the module as explained in the
        POD.

        Assuming a client that looks like this...

        my $result = SOAP::Lite
        -> uri('http://dsmqsupport-test/OnCall')
        -> proxy('http://dsmqsupport-test/cgi-bin/oncall-lookup.pl')
        -> Lookup();

        print $result->valueof
        ('//Envelope/Body/LookupResponse/OnCall/Primary/First'), "\n";
        print $result->valueof
        ('//Envelope/Body/LookupResponse/OnCall/Secondary/First'), "\n";
        print "\n";

        ...what would the code to execute WSDL::Generator look like?

        Thanks -- T.Rob
      • Pierre Denis
        Here is a mini-How to done by Joe Breeden [jbreeden@ena.com]: How To Produce a WSDL schema from a SOAP::Lite/Apache/mod_perl web service. In this example a web
        Message 3 of 4 , May 29, 2002
          Here is a mini-How to done by Joe Breeden [jbreeden@...]:


          How To
          Produce a WSDL schema from a SOAP::Lite/Apache/mod_perl web service.

          In this example a web service that exposes two methods - Hello and
          GoodBye (Could you respect example that did include Hello World as the
          basis?). One method, Hello, accepts a string as an argument (presumably
          the first name of the person to greet) and returns a string with "Hello,
          " prepended to the argument and "\n" added to the end. The other,
          GoodBye, accepts a string as an argument (presumably the first name of
          the person to greet) and returns a string with "Goodbye, " prepended to
          the argument and "\n" added to the end.

          Because these examples are so short and so you will know exactly what is
          going on, the complete setup including source code is included here
          before WSDL::Generator is used to build a WSDL schema.

          Configuration

          In your perl.conf file you should see the following directive:

          <Location /world> SetHandler perl-script PerlHandler CLASS::World
          </Location>

          Which will point the appropriate CLASS::World.pm file on you system. You
          could include this module in one of the standard directories searchable
          by @INC or you could add a "use lib" statement to your startup.pl script
          to add the directory containing the module to @INC.

          CLASS::World.pm

          package CLASS::World;

          use SOAP::Transport::HTTP;

          my $server = SOAP::Transport::HTTP::Apache ->
          dispatch_to('WorldFunctions');

          sub handler { $server->handler(@_); }

          package WorldFunctions;

          sub new { bless {}, shift; }

          sub Hello { my ($s, $name) = @_;

          return 'Hello, ' . $name . "\n";
          }

          sub GoodBye { my ($s, $name) = @_;

          return 'Goodbye, ' . $name . "\n";
          }

          1;

          As you can see this is a really generic and straightforward service. If
          everything is configured correctly and you get no errors when you start
          Apache, you should be able to access the methods in this service with
          the following client script. Replace *host.your.domain* with the
          hostname of your SOAP server.

          world_client.pl

          #!/usr/bin/perl

          use SOAP::Lite +autodispatch => uri=>"WorldFunctions",
          proxy=>'http://host.your.domain/world';

          print Hello('Joe');

          print GoodBye('Joe');

          Generating the WSDL schema.

          Using WSDL::Generator, one can quickly generate the WSDL schema for a
          particular SOAP service. You will need to copy the Perl module for the
          service to a directory and modify it as follows.

          SOAP Service Perl module

          # package CLASS::World;

          # use SOAP::Transport::HTTP;

          # my $server = SOAP::Transport::HTTP::Apache

          # -> dispatch_to('WorldFunctions');

          # sub handler {

          # $server->handler(@_);

          # }

          package WorldFunctions;

          sub new { bless {}, shift; }

          sub Hello { my ($s, $name) = @_;

          return 'Hello, ' . $name . "\n";
          }

          sub GoodBye { my ($s, $name) = @_;

          return 'Goodbye, ' . $name . "\n";
          }

          1;

          Save this file as WorldFunctions.pm. The following script will call
          WSDL::Generator, build the WSDL schema and output it to the screen.

          #!/usr/bin/perl

          use WSDL::Generator;

          my $init = {

          'schema_namesp' =>
          'http://host.your.domain/world/WorldFunctions.xsd',

          'services' => 'WorldFunctions',

          'service_name' => 'WorldFunctions',

          'target_namesp' => 'http://host.your.domain/world/',

          'documentation' => 'Simple Hello World SOAP Service.',

          'location' => 'http://host.your.domain/world'

          };

          my $w = WSDL::Generator->new($init);

          WorldFunctions->Hello('Joe');

          WorldFunctions->GoodBye('Joe');

          print $w->get(WorldFunctions);

          You should save this script in the same directory as the
          WorldFunctions.pm Perl module file. The $init hash reference above looks
          a little confusing for those used to SOAP::Lite. That is because
          SOAP::Lite save the programmer from having to know these types of things
          in order to build a working SOAP service and/or client. Where to plug
          the components of the SOAP::Lite constructor into the keys of the $init
          hashref are explained below:

          * 'schema_namesp' => This is URL of where the WSDL schema will
          eventually live.
          * 'services' => This is the uri portion of the SOAP::Lite constructor.
          * 'service_name' => This is the uri portion of the SOAP::Lite
          constructor.
          * 'target_namesp' => This is the proxy portion of the SOAP::Lite
          constructor.
          * 'documentation' => A scalar or literal that contains the documentation
          for your exposed services.
          * 'location' => This is the proxy portion of the SOAP::Lite constructor.
          Conclusion

          With a little work, it is possible to build web services with
          SOAP::Lite/Apache/mod_perl that can be utilized by programming languages
          other than Perl.

          Regards

          -----Original Message-----
          From: NinoSavatte [mailto:ninosavatte@...]
          Sent: 29 May 2002 18:04
          To: soaplite@yahoogroups.com
          Subject: [soaplite] WSDL::Generator


          I'm playing around with SOAP::Lite and WSDL::Generator and I must
          admit I'm in over my head. Still, I managed to create a server and
          client that lookup our Primary and Secondary on-call analysts names
          and numbers. I'd like to generate the WSDL for the service but I'm
          not quite understanding the usage of the module as explained in the
          POD.

          Assuming a client that looks like this...

          my $result = SOAP::Lite
          -> uri('http://dsmqsupport-test/OnCall')
          -> proxy('http://dsmqsupport-test/cgi-bin/oncall-lookup.pl')
          -> Lookup();

          print $result->valueof
          ('//Envelope/Body/LookupResponse/OnCall/Primary/First'), "\n";
          print $result->valueof
          ('//Envelope/Body/LookupResponse/OnCall/Secondary/First'), "\n";
          print "\n";

          ...what would the code to execute WSDL::Generator look like?

          Thanks -- T.Rob



          To unsubscribe from this group, send an email to:
          soaplite-unsubscribe@yahoogroups.com



          Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
        • ritun2000
          Hello Pierre & others, I just tried implementing the below for generating a wsdl for a service that has been implemented using SOAP::Lite without Apache mod
          Message 4 of 4 , Jun 4, 2002
            Hello Pierre & others,

            I just tried implementing the below for generating a wsdl for a
            service that has been implemented using SOAP::Lite without Apache mod
            perl support.
            I feel the wsdl generated is a little buggy. This is one of such areas:
            <port
            name="http://dd.netcore.co.in/OutlinerServicehttp://dd.netcore.co.in/Outli
            nerServicePort"
            binding="tns:http://dd.netcore.co.in/OutlinerServicehttp://dd.netcore.co.in/Outl
            inerServiceBinding">

            Here is the info provided to WSDL::Generator:

            my $init = {

            'schema_namesp' => 'http://dd.netcore.co.in/OutlinerService.xsd',

            'services' => 'http://dd.netcore.co.in/OutlinerService',

            'service_name' => 'http://dd.netcore.co.in/OutlinerService',

            'target_namesp' =>
            'http://dd.netcore.co.in/outlinerbin/webservices/outliner.cgi',

            'documentation' => 'Simple SOAP Service to render an outline to html.',

            'location' =>
            'http://dd.netcore.co.in/outlinerbin/webservices/outliner.cgi'

            };

            Any pointers on what is going wrong. Any changes required apart from
            the ones listed in the below HOW-TO??

            Regards,
            Ritu
            --- In soaplite@y..., "Pierre Denis" <pdenis@f...> wrote:
            > Here is a mini-How to done by Joe Breeden [jbreeden@e...]:
            >
            >
            > How To
            > Produce a WSDL schema from a SOAP::Lite/Apache/mod_perl web service.
            >
            > In this example a web service that exposes two methods - Hello and
            > GoodBye (Could you respect example that did include Hello World
            as the
            > basis?). One method, Hello, accepts a string as an argument
            (presumably
            > the first name of the person to greet) and returns a string with
            "Hello,
            > " prepended to the argument and "\n" added to the end. The other,
            > GoodBye, accepts a string as an argument (presumably the first
            name of
            > the person to greet) and returns a string with "Goodbye, "
            prepended to
            > the argument and "\n" added to the end.
            >
            > Because these examples are so short and so you will know exactly
            what is
            > going on, the complete setup including source code is included here
            > before WSDL::Generator is used to build a WSDL schema.
            >
            > Configuration
            >
            > In your perl.conf file you should see the following directive:
            >
            > <Location /world> SetHandler perl-script PerlHandler CLASS::World
            > </Location>
            >
            > Which will point the appropriate CLASS::World.pm file on you
            system. You
            > could include this module in one of the standard directories
            searchable
            > by @INC or you could add a "use lib" statement to your
            startup.pl script
            > to add the directory containing the module to @INC.
            >
            > CLASS::World.pm
            >
            > package CLASS::World;
            >
            > use SOAP::Transport::HTTP;
            >
            > my $server = SOAP::Transport::HTTP::Apache ->
            > dispatch_to('WorldFunctions');
            >
            > sub handler { $server->handler(@_); }
            >
            > package WorldFunctions;
            >
            > sub new { bless {}, shift; }
            >
            > sub Hello { my ($s, $name) = @_;
            >
            > return 'Hello, ' . $name . "\n";
            > }
            >
            > sub GoodBye { my ($s, $name) = @_;
            >
            > return 'Goodbye, ' . $name . "\n";
            > }
            >
            > 1;
            >
            > As you can see this is a really generic and straightforward
            service. If
            > everything is configured correctly and you get no errors when
            you start
            > Apache, you should be able to access the methods in this service
            with
            > the following client script. Replace *host.your.domain* with the
            > hostname of your SOAP server.
            >
            > world_client.pl
            >
            > #!/usr/bin/perl
            >
            > use SOAP::Lite +autodispatch => uri=>"WorldFunctions",
            > proxy=>'http://host.your.domain/world';
            >
            > print Hello('Joe');
            >
            > print GoodBye('Joe');
            >
            > Generating the WSDL schema.
            >
            > Using WSDL::Generator, one can quickly generate the WSDL schema
            for a
            > particular SOAP service. You will need to copy the Perl module
            for the
            > service to a directory and modify it as follows.
            >
            > SOAP Service Perl module
            >
            > # package CLASS::World;
            >
            > # use SOAP::Transport::HTTP;
            >
            > # my $server = SOAP::Transport::HTTP::Apache
            >
            > # -> dispatch_to('WorldFunctions');
            >
            > # sub handler {
            >
            > # $server->handler(@_);
            >
            > # }
            >
            > package WorldFunctions;
            >
            > sub new { bless {}, shift; }
            >
            > sub Hello { my ($s, $name) = @_;
            >
            > return 'Hello, ' . $name . "\n";
            > }
            >
            > sub GoodBye { my ($s, $name) = @_;
            >
            > return 'Goodbye, ' . $name . "\n";
            > }
            >
            > 1;
            >
            > Save this file as WorldFunctions.pm. The following script will call
            > WSDL::Generator, build the WSDL schema and output it to the screen.
            >
            > #!/usr/bin/perl
            >
            > use WSDL::Generator;
            >
            > my $init = {
            >
            > 'schema_namesp' =>
            > 'http://host.your.domain/world/WorldFunctions.xsd',
            >
            > 'services' => 'WorldFunctions',
            >
            > 'service_name' => 'WorldFunctions',
            >
            > 'target_namesp' => 'http://host.your.domain/world/',
            >
            > 'documentation' => 'Simple Hello World SOAP Service.',
            >
            > 'location' => 'http://host.your.domain/world'
            >
            > };
            >
            > my $w = WSDL::Generator->new($init);
            >
            > WorldFunctions->Hello('Joe');
            >
            > WorldFunctions->GoodBye('Joe');
            >
            > print $w->get(WorldFunctions);
            >
            > You should save this script in the same directory as the
            > WorldFunctions.pm Perl module file. The $init hash reference
            above looks
            > a little confusing for those used to SOAP::Lite. That is because
            > SOAP::Lite save the programmer from having to know these types
            of things
            > in order to build a working SOAP service and/or client. Where to
            plug
            > the components of the SOAP::Lite constructor into the keys of
            the $init
            > hashref are explained below:
            >
            > * 'schema_namesp' => This is URL of where the WSDL schema will
            > eventually live.
            > * 'services' => This is the uri portion of the SOAP::Lite
            constructor.
            > * 'service_name' => This is the uri portion of the SOAP::Lite
            > constructor.
            > * 'target_namesp' => This is the proxy portion of the SOAP::Lite
            > constructor.
            > * 'documentation' => A scalar or literal that contains the
            documentation
            > for your exposed services.
            > * 'location' => This is the proxy portion of the SOAP::Lite
            constructor.
            > Conclusion
            >
            > With a little work, it is possible to build web services with
            > SOAP::Lite/Apache/mod_perl that can be utilized by programming
            languages
            > other than Perl.
            >
            > Regards
            >
            > -----Original Message-----
            > From: NinoSavatte [mailto:ninosavatte@y...]
            > Sent: 29 May 2002 18:04
            > To: soaplite@y...
            > Subject: [soaplite] WSDL::Generator
            >
            >
            > I'm playing around with SOAP::Lite and WSDL::Generator and I must
            > admit I'm in over my head. Still, I managed to create a server and
            > client that lookup our Primary and Secondary on-call analysts names
            > and numbers. I'd like to generate the WSDL for the service but I'm
            > not quite understanding the usage of the module as explained in the
            > POD.
            >
            > Assuming a client that looks like this...
            >
            > my $result = SOAP::Lite
            > -> uri('http://dsmqsupport-test/OnCall')
            > -> proxy('http://dsmqsupport-test/cgi-bin/oncall-lookup.pl')
            > -> Lookup();
            >
            > print $result->valueof
            > ('//Envelope/Body/LookupResponse/OnCall/Primary/First'), "\n";
            > print $result->valueof
            > ('//Envelope/Body/LookupResponse/OnCall/Secondary/First'), "\n";
            > print "\n";
            >
            > ...what would the code to execute WSDL::Generator look like?
            >
            > Thanks -- T.Rob
            >
            >
            >
            > To unsubscribe from this group, send an email to:
            > soaplite-unsubscribe@y...
            >
            >
            >
            > Your use of Yahoo! Groups is subject to
            http://docs.yahoo.com/info/terms/
          Your message has been successfully submitted and would be delivered to recipients shortly.