import SOAP-WSDL 2.00.01 from CPAN
git-cpan-module: SOAP-WSDL git-cpan-version: 2.00.01 git-cpan-authorid: MKUTTER git-cpan-file: authors/id/M/MK/MKUTTER/SOAP-WSDL-2.00.01.tar.gz
This commit is contained in:
1 parent
0cbf981665
commit
745ce925c1
111 files changed
+1106
-673
No files matched your search
@@ -4,6 +4,8 @@ use warnings;
|
||||
use Carp qw(confess);
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
|
||||
use version; our $VERSION = qv('2.00.01');
|
||||
|
||||
my %namespace_prefix_map_of :ATTR(:name<namespace_prefix_map> :default<{}>);
|
||||
my %namespace_map_of :ATTR(:name<namespace_map> :default<{}>);
|
||||
my %prefix_of :ATTR(:name<prefix> :default<()>);
|
||||
@@ -14,9 +16,6 @@ sub load { # called as MyPlugin->load($context)
|
||||
my ($class, $context, @arg_from) = @_;
|
||||
my $stash = $context->stash();
|
||||
my $self = bless \do { my $o = Class::Std::Fast::ID() }, $class;
|
||||
# $self->set_namespace_map( $stash->{ context }->{ namespace_map });
|
||||
# $self->set_namespace_prefix_map( $stash->{ context }->{ namespace_prefix_map });
|
||||
# $self->set_prefix( $stash->{ context }->{ prefix });
|
||||
$self->set_prefix_resolver( $stash->{ context }->{ prefix_resolver });
|
||||
return $self; # returns 'MyPlugin'
|
||||
}
|
||||
@@ -27,9 +26,6 @@ sub new {
|
||||
my ($class, $arg_ref) = @_;
|
||||
|
||||
my $self = bless \do { my $o = Class::Std::Fast::ID() }, $class;
|
||||
# $self->set_namespace_map( $arg_ref->{ namespace_map });
|
||||
# $self->set_namespace_prefix_map( $arg_ref->{ namespace_prefix_map });
|
||||
# $self->set_prefix( $arg_ref->{ prefix });
|
||||
$self->set_prefix_resolver( $arg_ref->{ prefix_resolver });
|
||||
return $self; # returns 'MyPlugin'
|
||||
}
|
||||
@@ -38,10 +34,10 @@ sub _get_prefix {
|
||||
my ($self, $type, $node) = @_;
|
||||
my $namespace = defined ($node)
|
||||
? ref($node)
|
||||
? $node->get_targetNamespace
|
||||
? $node->get_targetNamespace()
|
||||
: $node
|
||||
: undef;
|
||||
return $self->get_prefix_resolver->resolve_prefix(
|
||||
return $self->get_prefix_resolver()->resolve_prefix(
|
||||
$type,
|
||||
$namespace,
|
||||
ref($node)
|
||||
@@ -50,27 +46,16 @@ sub _get_prefix {
|
||||
);
|
||||
}
|
||||
|
||||
#sub _get_prefix {
|
||||
# my ($self, $type, $namespace) = @_;
|
||||
# return $prefix_of{ $$self }->{ $type }
|
||||
# if not defined($namespace);
|
||||
# return $namespace_prefix_map_of{ $$self }->{ $namespace }
|
||||
# || ( ($namespace_map_of{ $$self }->{ $namespace })
|
||||
# ? join ('::', $prefix_of{ $$self }->{ $type }, $namespace_map_of{ $$self }->{ $namespace })
|
||||
# : $prefix_of{ $$self }->{ $type }
|
||||
# );
|
||||
#}
|
||||
|
||||
sub create_xsd_name {
|
||||
my ($self,$element) = @_;
|
||||
my $name = $self->_resolve_prefix($element) . '::'
|
||||
. $element->get_name();
|
||||
my ($self,$node) = @_;
|
||||
my $name = $self->_resolve_prefix($node) #. '::'
|
||||
. $node->get_name();
|
||||
return $self->perl_name( $name );
|
||||
}
|
||||
|
||||
sub create_typemap_name {
|
||||
my ($self, $node) = @_;
|
||||
my $name = $self->_get_prefix('typemap') . '::'
|
||||
my $name = $self->_get_prefix('typemap') #. '::'
|
||||
. $node->get_name();
|
||||
return $self->perl_name( $name );
|
||||
}
|
||||
@@ -79,10 +64,9 @@ sub create_server_name {
|
||||
my ($self, $server, $port) = @_;
|
||||
my $port_name = $port->get_name();
|
||||
$port_name =~s{\A (?:.+)\. ([^\.]+) \z}{$1}x;
|
||||
my $name = join('::',
|
||||
my $name = join( q{},
|
||||
$self->_get_prefix('server', $server),
|
||||
$server->get_name(),
|
||||
$port_name
|
||||
join( '::', $server->get_name(), $port_name)
|
||||
);
|
||||
return $self->perl_name( $name );
|
||||
}
|
||||
@@ -91,10 +75,9 @@ sub create_interface_name {
|
||||
my ($self, $server, $port) = @_;
|
||||
my $port_name = $port->get_name();
|
||||
$port_name =~s{\A (?:.+)\. ([^\.]+) \z}{$1}x;
|
||||
my $name = join('::',
|
||||
my $name = join( q{},
|
||||
$self->_get_prefix('interface', $server),
|
||||
$server->get_name(),
|
||||
$port_name
|
||||
join( '::', $server->get_name(), $port_name )
|
||||
);
|
||||
return $self->perl_name( $name );
|
||||
}
|
||||
@@ -121,8 +104,8 @@ sub _resolve_prefix {
|
||||
sub perl_name {
|
||||
my $self = shift;
|
||||
my $name = shift;
|
||||
$name =~s{[\-]}{_}xmsg;
|
||||
$name =~s{[\.]}{::}xmsg;
|
||||
$name =~s{\-}{_}xmsg;
|
||||
$name =~s{\.}{::}xmsg;
|
||||
return $name;
|
||||
}
|
||||
|
||||
|
||||
@@ -5,15 +5,15 @@ use Class::Std::Fast::Storable;
|
||||
use File::Basename;
|
||||
use File::Spec;
|
||||
|
||||
our $VERSION = q{2.00_27};
|
||||
use version; our $VERSION = qv('2.00.01');
|
||||
|
||||
use SOAP::WSDL::Generator::Visitor::Typemap;
|
||||
use SOAP::WSDL::Generator::Visitor::Typelib;
|
||||
use SOAP::WSDL::Generator::Template::Plugin::XSD;
|
||||
use base qw(SOAP::WSDL::Generator::Template);
|
||||
|
||||
my %output_of :ATTR(:name<output> :default<()>);
|
||||
my %typemap_of :ATTR(:name<typemap> :default<({})>);
|
||||
my %output_of :ATTR(:name<output> :default<()>);
|
||||
my %typemap_of :ATTR(:name<typemap> :default<({})>);
|
||||
|
||||
sub BUILD {
|
||||
my ($self, $ident, $arg_ref) = @_;
|
||||
@@ -47,6 +47,29 @@ sub BUILD {
|
||||
);
|
||||
}
|
||||
|
||||
# construct object on call to allow late binding of prefix_resolver class
|
||||
# and namespace maps (not used yet)
|
||||
sub get_name_resolver {
|
||||
my $self = shift;
|
||||
return SOAP::WSDL::Generator::Template::Plugin::XSD->new({
|
||||
prefix_resolver => $self->get_prefix_resolver_class()->new({
|
||||
namespace_prefix_map => {
|
||||
'http://www.w3.org/2001/XMLSchema' => 'SOAP::WSDL::XSD::Typelib::Builtin',
|
||||
},
|
||||
namespace_map => {
|
||||
},
|
||||
prefix => {
|
||||
attribute => $self->get_attribute_prefix,
|
||||
interface => $self->get_interface_prefix,
|
||||
element => $self->get_element_prefix,
|
||||
server => $self->get_server_prefix,
|
||||
type => $self->get_type_prefix,
|
||||
typemap => $self->get_typemap_prefix,
|
||||
}
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
sub generate {
|
||||
my $self = shift;
|
||||
my $opt = shift;
|
||||
@@ -73,7 +96,7 @@ sub _generate_interface {
|
||||
my $self = shift;
|
||||
my $arg_ref = shift;
|
||||
my $template_name = delete $arg_ref->{ template_name };
|
||||
my $prefix_method = delete $arg_ref->{ prefix_method };
|
||||
my $name_method = delete $arg_ref->{ name_method };
|
||||
for my $service (@{ $self->get_definitions->get_service }) {
|
||||
for my $port (@{ $service->get_port() }) {
|
||||
# Skip ports without (known) address
|
||||
@@ -85,10 +108,11 @@ sub _generate_interface {
|
||||
my $output = $arg_ref->{ output }
|
||||
? $arg_ref->{ output }
|
||||
: $self->_generate_filename(
|
||||
$self->can($prefix_method)->($self),
|
||||
$service->get_name(),
|
||||
$port_name,
|
||||
);
|
||||
$self->get_name_resolver()->can($name_method)->(
|
||||
$self->get_name_resolver(),
|
||||
$service,
|
||||
$port,
|
||||
));
|
||||
print "Creating interface class $output\n";
|
||||
|
||||
$self->_process($template_name,
|
||||
@@ -105,14 +129,14 @@ sub _generate_interface {
|
||||
sub generate_server {
|
||||
my ($self, $arg_ref) = @_;
|
||||
$arg_ref->{ template_name } = 'Server.tt';
|
||||
$arg_ref->{ prefix_method } = 'get_server_prefix';
|
||||
$arg_ref->{ name_method } = 'create_server_name';
|
||||
$self->_generate_interface($arg_ref);
|
||||
}
|
||||
|
||||
sub generate_client {
|
||||
my ($self, $arg_ref) = @_;
|
||||
$arg_ref->{ template_name } = 'Interface.tt';
|
||||
$arg_ref->{ prefix_method } = 'get_interface_prefix';
|
||||
$arg_ref->{ name_method } = 'create_interface_name';
|
||||
$self->_generate_interface($arg_ref);
|
||||
}
|
||||
sub generate_interface;
|
||||
@@ -133,22 +157,7 @@ sub generate_typemap {
|
||||
'Fault/detail' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
%{ $typemap_of{ident $self }},
|
||||
},
|
||||
resolver => SOAP::WSDL::Generator::Template::Plugin::XSD->new({
|
||||
prefix_resolver => $self->get_prefix_resolver_class()->new({
|
||||
namespace_prefix_map => {
|
||||
'http://www.w3.org/2001/XMLSchema' => 'SOAP::WSDL::XSD::Typelib::Builtin',
|
||||
},
|
||||
namespace_map => {
|
||||
},
|
||||
prefix => {
|
||||
interface => $self->get_interface_prefix,
|
||||
element => $self->get_element_prefix,
|
||||
server => $self->get_server_prefix,
|
||||
type => $self->get_type_prefix,
|
||||
typemap => $self->get_typemap_prefix,
|
||||
}
|
||||
})
|
||||
}),
|
||||
resolver => $self->get_name_resolver(),
|
||||
});
|
||||
|
||||
use SOAP::WSDL::Generator::Iterator::WSDL11;
|
||||
@@ -163,7 +172,7 @@ sub generate_typemap {
|
||||
|
||||
my $output = $arg_ref->{ output }
|
||||
? $arg_ref->{ output }
|
||||
: $self->_generate_filename( $self->get_typemap_prefix(), $service->get_name() );
|
||||
: $self->_generate_filename( $self->get_name_resolver()->create_typemap_name($service) );
|
||||
print "Creating typemap class $output\n";
|
||||
$self->_process('Typemap.tt',
|
||||
{
|
||||
@@ -176,8 +185,7 @@ sub generate_typemap {
|
||||
}
|
||||
|
||||
sub _generate_filename :PRIVATE {
|
||||
my ($self, @parts) = @_;
|
||||
my $name = join '::', @parts;
|
||||
my ($self, $name) = @_;
|
||||
$name =~s{ \. }{::}xmsg;
|
||||
$name =~s{ \- }{_}xmsg;
|
||||
$name =~s{ :: }{/}xmsg;
|
||||
@@ -188,7 +196,7 @@ sub visit_XSD_Attribute {
|
||||
my ($self, $attribute) = @_;
|
||||
my $output = defined $output_of{ ident $self }
|
||||
? $output_of{ ident $self }
|
||||
: $self->_generate_filename( $self->get_attribute_prefix(), $attribute->get_name() );
|
||||
: $self->_generate_filename( $self->get_name_resolver()->create_xsd_name($attribute) );
|
||||
$self->_process('attribute.tt', { attribute => $attribute } , $output);
|
||||
}
|
||||
|
||||
@@ -196,7 +204,7 @@ sub visit_XSD_Element {
|
||||
my ($self, $element) = @_;
|
||||
my $output = defined $output_of{ ident $self }
|
||||
? $output_of{ ident $self }
|
||||
: $self->_generate_filename( $self->get_element_prefix(), $element->get_name() );
|
||||
: $self->_generate_filename( $self->get_name_resolver()->create_xsd_name($element) );
|
||||
$self->_process('element.tt', { element => $element } , $output);
|
||||
}
|
||||
|
||||
@@ -204,7 +212,7 @@ sub visit_XSD_SimpleType {
|
||||
my ($self, $type) = @_;
|
||||
my $output = defined $output_of{ ident $self }
|
||||
? $output_of{ ident $self }
|
||||
: $self->_generate_filename( $self->get_type_prefix(), $type->get_name() );
|
||||
: $self->_generate_filename( $self->get_name_resolver()->create_xsd_name($type) );
|
||||
$self->_process('simpleType.tt', { simpleType => $type } , $output);
|
||||
}
|
||||
|
||||
@@ -212,8 +220,8 @@ sub visit_XSD_ComplexType {
|
||||
my ($self, $type) = @_;
|
||||
my $output = defined $output_of{ ident $self }
|
||||
? $output_of{ ident $self }
|
||||
: $self->_generate_filename( $self->get_type_prefix(), $type->get_name() );
|
||||
: $self->_generate_filename( $self->get_name_resolver()->create_xsd_name($type) );
|
||||
$self->_process('complexType.tt', { complexType => $type } , $output);
|
||||
}
|
||||
|
||||
1;
|
||||
1;
|
||||
@@ -15,8 +15,8 @@
|
||||
@parts = map {
|
||||
my $part = $_;
|
||||
(grep {
|
||||
my ($ns, $lname) = $def->expand( $_ );
|
||||
($lname eq $part->get_name)
|
||||
# my ($ns, $lname) = $def->expand( $_ );
|
||||
($_ eq $part->get_name)
|
||||
} @body_part_from
|
||||
)
|
||||
? do {
|
||||
|
||||
@@ -11,10 +11,11 @@
|
||||
my $def = $stash->{ definitions };
|
||||
my $type_prefix = $stash->{ type_prefix };
|
||||
my $element_prefix = $stash->{ element_prefix };
|
||||
my ($ns, $lname) = $def->expand( $item->get_part() );
|
||||
#my ($ns, $lname) = $def->expand( $item->get_part() );
|
||||
my $part_name = $item->get_part();
|
||||
my ($part) = grep {
|
||||
$_->get_name eq $lname
|
||||
&& $_->get_targetNamespace eq $ns } @{ $message->get_part( ) };
|
||||
$_->get_name eq $part_name
|
||||
} @{ $message->get_part( ) };
|
||||
my $part_class = do {
|
||||
my $name;
|
||||
($name = $part->get_element)
|
||||
|
||||
@@ -7,4 +7,3 @@
|
||||
port_op.get_documentation %]
|
||||
|
||||
$interface->[% operation.get_name %]([% INCLUDE Interface/POD/Message.tt %] );
|
||||
|
||||
@@ -36,7 +36,7 @@ sub START {
|
||||
}
|
||||
|
||||
sub handle {
|
||||
$transport_of{ ${ shift @_ } }->handle(@_);
|
||||
$transport_of{ ${ $_[0] } }->handle(@_[1..$#_]);
|
||||
}
|
||||
|
||||
1;
|
||||
@@ -102,4 +102,4 @@ implementing the SOAP Service methods listed below.
|
||||
|
||||
Generated by SOAP::WSDL on [% PERL %]print scalar localtime() [% END %]
|
||||
|
||||
=pod
|
||||
=cut
|
||||
@@ -3,15 +3,48 @@
|
||||
|
||||
[% head3 %] [% operation.get_name %]
|
||||
|
||||
[% type = definitions.find_portType( binding.expand( binding.get_type ) );
|
||||
port_op = type.find_operation( definitions.get_targetNamespace, operation.get_name );
|
||||
port_op.get_documentation %]
|
||||
[% type = definitions.find_portType( binding.expand( binding.get_type ) );
|
||||
port_op = '';
|
||||
FOREACH port_op = type.get_operation();
|
||||
IF (port_op.get_name == operation.get_name);
|
||||
LAST;
|
||||
END;
|
||||
END;
|
||||
|
||||
input_message_name = port_op.first_input.get_message();
|
||||
output_message_name = port_op.first_output.get_message();
|
||||
|
||||
input_message = definitions.find_message(port_op.first_input.expand(input_message_name));
|
||||
output_message = definitions.find_message(port_op.first_output.expand(output_message_name));
|
||||
|
||||
input_parts = input_message.get_part();
|
||||
output_parts = output_message.get_part();
|
||||
|
||||
# port_op.get_documentation
|
||||
%]
|
||||
|
||||
sub [% operation.get_name %] {
|
||||
my ($self, $body, $header) = @_;
|
||||
# body is a ??? object - sorry, POD not implemented yet
|
||||
# header is a ??? object - sorry, POD not implemented yet
|
||||
|
||||
[%
|
||||
IF (input_parts.size() > 1); -%]
|
||||
# body is a list ref of the following objects:
|
||||
# [
|
||||
# sorry - POD support not implemented yet
|
||||
# ]
|
||||
[% ELSE;
|
||||
input_element = definitions.first_types.find_element(input_parts.0.expand(input_parts.0.get_element));
|
||||
IF (input_element);
|
||||
class = XSD.create_xsd_name( input_element );
|
||||
ELSE;
|
||||
input_type = definitions.first_types.find_type(input_parts.0.expand(input_parts.0.get_type));
|
||||
class = XSD.create_xsd_name( input_type );
|
||||
END;
|
||||
-%]
|
||||
# body is a [% class %] object
|
||||
[%-
|
||||
END;
|
||||
%]
|
||||
# header is a ??? object - sorry, POD support not implemented yet
|
||||
# do something with body and header...
|
||||
|
||||
return [% INCLUDE Server/POD/Message.tt %]
|
||||
|
||||
@@ -15,7 +15,10 @@ get_/set_ methods:
|
||||
|
||||
=over
|
||||
|
||||
[% FOREACH element = complexType.get_attribute -%]
|
||||
[% FOREACH element = complexType.get_attribute;
|
||||
WHILE element.get_ref;
|
||||
element = definitions.first_types.find_attribute(element.expand( element.get_ref ));
|
||||
END; -%]
|
||||
=item * [% element.get_name %]
|
||||
|
||||
[%- IF (element.get_annotation && element.get_annotation.0.get_documentation) %]
|
||||
|
||||
@@ -3,18 +3,27 @@ package [% XSD.create_xmlattr_name(complexType) %];
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::AttributeSet);
|
||||
|
||||
{ # BLOCK to scope variables
|
||||
[% FOREACH element = complexType.get_attribute %]
|
||||
[% FOREACH element = complexType.get_attribute;
|
||||
WHILE element.get_ref;
|
||||
element = definitions.first_types.find_attribute(element.expand( element.get_ref ));
|
||||
END; %]
|
||||
my %[% element.get_name %]_of :ATTR(:get<[% element.get_name %]>);
|
||||
[%- END %]
|
||||
|
||||
__PACKAGE__->_factory(
|
||||
[ qw(
|
||||
[%- FOREACH element = complexType.get_attribute %]
|
||||
[%- FOREACH element = complexType.get_attribute;
|
||||
WHILE element.get_ref;
|
||||
element = definitions.first_types.find_attribute(element.expand( element.get_ref ));
|
||||
END; %]
|
||||
[% element.get_name -%]
|
||||
[% END %]
|
||||
) ],
|
||||
{
|
||||
[% FOREACH element = complexType.get_attribute -%]
|
||||
[% FOREACH element = complexType.get_attribute;
|
||||
WHILE element.get_ref;
|
||||
element = definitions.first_types.find_attribute(element.expand( element.get_ref ));
|
||||
END; %]
|
||||
[% element.get_name %] => \%[% element.get_name %]_of,
|
||||
[% END -%]
|
||||
},
|
||||
@@ -26,10 +35,11 @@ __PACKAGE__->_factory(
|
||||
[% element.get_name %] => '[% XSD.create_xsd_name(element_type) %]',
|
||||
[%
|
||||
ELSIF (ref = element.get_ref);
|
||||
attribute = definitions.first_types.find_attribute( complexType.expand(ref) );
|
||||
# element_type = definitions.get_types.0.find_type(complexType.expand( attribute.get_type ));
|
||||
WHILE element.get_ref;
|
||||
element = definitions.first_types.find_attribute(element.expand( element.get_ref ));
|
||||
END;
|
||||
%]
|
||||
[% attribute.get_name %] => '[% XSD.create_xsd_name(attribute) %]',
|
||||
[% element.get_name %] => '[% XSD.create_xsd_name(element) %]',
|
||||
[% ELSIF (element.first_simpleType);
|
||||
THROW NOT_IMPLEMENTED , "Attributes with atomic simpleType definition are not implemented yet";
|
||||
atomic_types.${ element.get_name } = element.first_simpleType;
|
||||
|
||||
@@ -8,7 +8,10 @@ use warnings;
|
||||
sub get_xmlns { '[% element.get_targetNamespace %]' }
|
||||
|
||||
__PACKAGE__->__set_name('[% element.get_name %]');
|
||||
__PACKAGE__->__set_nillable([% element.get_nillable %]);
|
||||
__PACKAGE__->__set_nillable([% IF (element.get_nillable);
|
||||
IF (element.get_nillable != 'false'); %]1[% ELSE %]0[% END;
|
||||
END;
|
||||
%]);
|
||||
__PACKAGE__->__set_minOccurs([% element.get_minOccurs %]);
|
||||
__PACKAGE__->__set_maxOccurs([% element.get_maxOccurs %]);
|
||||
__PACKAGE__->__set_ref([% IF element.get_ref; %]'[% element.get_ref %]'[% END %]);
|
||||
|
||||
Reference in new issue
Block a user