package SOAP::WSDL::Factory::Generator; use strict; use warnings; our $VERSION='2.00_24'; 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 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 Emartin.kutter fen-net.deE =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