git-cpan-module: SOAP-WSDL git-cpan-version: 2.00.08 git-cpan-authorid: MKUTTER git-cpan-file: authors/id/M/MK/MKUTTER/SOAP-WSDL-2.00.08.tar.gz
173 lines
3.7 KiB
Perl
173 lines
3.7 KiB
Perl
package SOAP::WSDL::Factory::Generator;
|
|
use strict;
|
|
use warnings;
|
|
|
|
use version; our $VERSION = qv('2.00.08');
|
|
|
|
my %GENERATOR = (
|
|
'XSD' => 'SOAP::WSDL::Generator::Template::XSD',
|
|
);
|
|
|
|
# class method
|
|
sub register {
|
|
my ($class, $ref_type, $package) = @_;
|
|
$GENERATOR{ $ref_type } = $package;
|
|
}
|
|
|
|
sub get_generator {
|
|
my ($self, $args_of_ref) = @_;
|
|
|
|
# sanity check
|
|
# die "no generator registered for generation method $args_of_ref->{ type }"
|
|
#
|
|
my $generator_class = (exists ($GENERATOR{ $args_of_ref->{ type } }))
|
|
? $GENERATOR{ $args_of_ref->{ type } }
|
|
: $args_of_ref->{ type };
|
|
|
|
# load module
|
|
eval "require $generator_class"
|
|
or die "Cannot load generator $generator_class", $@;
|
|
|
|
return $generator_class->new();
|
|
}
|
|
|
|
1;
|
|
|
|
=pod
|
|
|
|
=head1 NAME
|
|
|
|
SOAP::WSDL::Factory:Generator - Factory for retrieving generator objects
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
# from SOAP::WSDL::Client:
|
|
$generator = SOAP::WSDL::Factory::Generator->get_generator({
|
|
soap_version => $soap_version,
|
|
});
|
|
|
|
# in generator class:
|
|
package MyWickedGenerator;
|
|
use SOAP::WSDL::Factory::Generator;
|
|
|
|
# register as generator for SOAP1.2 messages
|
|
SOAP::WSDL::Factory::Generator->register( '1.2' , __PACKAGE__ );
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
SOAP::WSDL::Factory::Generator serves as factory for retrieving
|
|
generator objects for SOAP::WSDL.
|
|
|
|
The actual work is done by specific generator classes.
|
|
|
|
SOAP::WSDL::Generator tries to load one of the following classes:
|
|
|
|
=over
|
|
|
|
=item * the class registered for the scheme via register()
|
|
|
|
=back
|
|
|
|
=head1 METHODS
|
|
|
|
=head2 register
|
|
|
|
SOAP::WSDL::Generator->register('Lite', 'MyWickedGenerator');
|
|
|
|
Globally registers a class for use as generator class.
|
|
|
|
=head2 get_generator
|
|
|
|
Returns an object of the generator class for this endpoint.
|
|
|
|
=head1 WRITING YOUR OWN GENERATOR CLASS
|
|
|
|
=head2 Registering a generator
|
|
|
|
Generator classes may register with SOAP::WSDL::Factory::Generator.
|
|
|
|
Registering a generator class with SOAP::WSDL::Factory::Generator is done
|
|
by executing the following code where $version is the SOAP version the
|
|
class should be used for, and $class is the class name.
|
|
|
|
SOAP::WSDL::Factory::Generator->register( $version, $class);
|
|
|
|
To auto-register your transport class on loading, execute register() in
|
|
your generator class (see L<SYNOPSIS|SYNOPSIS> above).
|
|
|
|
=head2 Generator package layout
|
|
|
|
Generator modules must be named equal to the generator class they contain.
|
|
There can only be one generator class per generator module.
|
|
|
|
=head2 Methods to implement
|
|
|
|
Generator classes must implement the following methods:
|
|
|
|
=over
|
|
|
|
=item * new
|
|
|
|
Constructor.
|
|
|
|
=item * generate
|
|
|
|
Generate SOAP interface
|
|
|
|
=back
|
|
|
|
Generators may implements one or more of the following configuration
|
|
methods. All of them are tried via can() by wsdl2perl.
|
|
|
|
=over
|
|
|
|
=item * set_wsdl
|
|
|
|
Set the raw WSDL XML. Implement if you have your own WSDL parser.
|
|
|
|
=item * set_definitions
|
|
|
|
Sets the (parsed) SOAP::WSDL::Definitions object.
|
|
|
|
=item * set_type_prefix
|
|
|
|
Sets the prefix for XML Schema type classes
|
|
|
|
=item * set_element_prefix
|
|
|
|
Sets the prefix for XML Schema element classes
|
|
|
|
=item * set_typemap_prefix
|
|
|
|
Sets the prefix for typemap classes (class resolvers).
|
|
|
|
=item * set_interface_prefix
|
|
|
|
Sets the prefix for interface classes
|
|
|
|
=item * set_typemap
|
|
|
|
Set user-defined typemap snippet
|
|
|
|
=back
|
|
|
|
=head1 LICENSE AND COPYRIGHT
|
|
|
|
Copyright 2007 Martin Kutter. All rights reserved.
|
|
|
|
This file is part of SOAP-WSDL. You may distribute/modify it under
|
|
the same terms as perl itself
|
|
|
|
=head1 AUTHOR
|
|
|
|
Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
|
|
|
=head1 REPOSITORY INFORMATION
|
|
|
|
$Rev: 176 $
|
|
$LastChangedBy: kutterma $
|
|
$Id: Serializer.pm 176 2007-08-31 15:28:29Z kutterma $
|
|
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Factory/Serializer.pm $
|
|
|
|
=cut
|