package SOAP::WSDL::Factory::Generator;
use strict;
use warnings;
our $VERSION = 3.003;
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