import SOAP-WSDL 2.00_25 from CPAN
git-cpan-module: SOAP-WSDL git-cpan-version: 2.00_25 git-cpan-authorid: MKUTTER git-cpan-file: authors/id/M/MK/MKUTTER/SOAP-WSDL-2.00_25.tar.gz
This commit is contained in:
committed by
Michael G. Schwern
parent
84b53d9261
commit
a9033164e6
@@ -0,0 +1,73 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
use Test::More tests => 12;
|
||||
use File::Spec;
|
||||
use File::Basename;
|
||||
use_ok qw(SOAP::WSDL);
|
||||
|
||||
my $path = File::Spec->rel2abs(dirname( __FILE__ ) );
|
||||
|
||||
my $soap = SOAP::WSDL->new();
|
||||
$soap->wsdl("file://$path/WSDL_NOT_FOUND.wsdl");
|
||||
|
||||
eval { $soap->wsdlinit() };
|
||||
like $@, qr{ does \s not \s exist }x, 'does not exist';
|
||||
|
||||
eval { $soap = SOAP::WSDL->new(
|
||||
wsdl => "file://$path/WSDL_NOT_FOUND.wsdl");
|
||||
};
|
||||
like $@, qr{ does \s not \s exist }x, 'does not exist (constructor)';
|
||||
|
||||
$soap = SOAP::WSDL->new();
|
||||
$soap->wsdl( "file://$path/WSDL_EMPTY_DEFINITIONS.wsdl");
|
||||
eval { $soap->wsdlinit() };
|
||||
like $@, qr{ unable \s to \s extract \s schema \s from \s WSDL }x, 'empty definition';
|
||||
|
||||
# Try out all call() variants
|
||||
eval { $soap->call('NewOperation', 'value'); };
|
||||
like $@, qr{ unable \s to \s extract \s schema \s from \s WSDL }x, 'empty definition';
|
||||
|
||||
$soap = SOAP::WSDL->new();
|
||||
$soap->wsdl( "file://$path/WSDL_NO_MESSAGE.wsdl");
|
||||
eval { $soap->wsdlinit() };
|
||||
eval { $soap->call('NewOperation', 'value'); };
|
||||
like $@, qr{ Message \s \{http://www.example.org/WSDL_1/\}NewOperationRequest \s not \s found }x, 'empty definition';
|
||||
|
||||
$soap = SOAP::WSDL->new();
|
||||
$soap->wsdl( "file://$path/WSDL_1.wsdl");
|
||||
$soap->wsdlinit();
|
||||
$soap->no_dispatch(1);
|
||||
|
||||
like $soap->call('NewOperation', NewOperation => { in => 'test' }), qr{ <in>test</in> }x;
|
||||
like $soap->call('NewOperation', { NewOperation => { in => 'test' } }), qr{ <in>test</in> }x;
|
||||
|
||||
$soap = SOAP::WSDL->new( wsdl => "file://$path/WSDL_1.wsdl",
|
||||
servicename => 'NewService',
|
||||
portname => 'NewPort',
|
||||
no_dispatch => 1,
|
||||
keep_alive => 1,
|
||||
);
|
||||
$soap->proxy('http://example.org');
|
||||
like $soap->call('NewOperation', NewOperation => { in => 'test' }), qr{ <in>test</in> }x;
|
||||
like $soap->call('NewOperation', { NewOperation => { in => 'test' } }), qr{ <in>test</in> }x;
|
||||
|
||||
|
||||
$soap = SOAP::WSDL->new( wsdl => "file://$path/WSDL_NO_BINDING.wsdl",
|
||||
servicename => 'NewService',
|
||||
portname => 'NewPort',
|
||||
no_dispatch => 1,
|
||||
);
|
||||
eval {
|
||||
$soap->call('NewOperation', { NewOperation => { in => 'test' } });
|
||||
};
|
||||
like $@, qr{ no \s binding }x, 'No binding error';
|
||||
|
||||
$soap = SOAP::WSDL->new( wsdl => "file://$path/WSDL_NO_PORTTYPE.wsdl",
|
||||
servicename => 'NewService',
|
||||
portname => 'NewPort',
|
||||
no_dispatch => 1,
|
||||
);
|
||||
eval {
|
||||
$soap->call('NewOperation', { NewOperation => { in => 'test' } });
|
||||
};
|
||||
like $@, qr{ cannot \s find \s portType }x, 'No porttype error';
|
||||
@@ -0,0 +1,65 @@
|
||||
package MyPart;
|
||||
use Class::Std::Fast;
|
||||
|
||||
package main;
|
||||
use strict;
|
||||
use warnings;
|
||||
use Test::More qw(no_plan);
|
||||
use_ok qw(SOAP::WSDL::Client::Base);
|
||||
|
||||
my $client = SOAP::WSDL::Client::Base->new();
|
||||
|
||||
{
|
||||
no warnings qw(redefine once);
|
||||
*SOAP::WSDL::Client::call = sub { is $_[1]->{ operation }, 'sayHello', 'Called method';
|
||||
return $_[2], $_[3];
|
||||
};
|
||||
}
|
||||
|
||||
my @result = $client->call({
|
||||
operation => 'sayHello',
|
||||
soap_action => 'urn:HelloWorld#sayHello',
|
||||
style => 'document',
|
||||
body => {
|
||||
|
||||
'use' => 'literal',
|
||||
namespace => '',
|
||||
encodingStyle => '',
|
||||
parts => [qw( SOAP::WSDL::XSD::Typelib::Builtin::string )],
|
||||
},
|
||||
header => {
|
||||
parts => [qw( SOAP::WSDL::XSD::Typelib::Builtin::string )],
|
||||
},
|
||||
headerfault => {
|
||||
|
||||
}
|
||||
}, { value => 'Body' }, { value => 'Header' });
|
||||
|
||||
is $result[0], 'Body';
|
||||
is $result[1], 'Header';
|
||||
isa_ok $result[0], 'SOAP::WSDL::XSD::Typelib::Builtin::string';
|
||||
|
||||
@result = $client->call({
|
||||
operation => 'sayHello',
|
||||
soap_action => 'urn:HelloWorld#sayHello',
|
||||
style => 'document',
|
||||
body => {
|
||||
|
||||
'use' => 'literal',
|
||||
namespace => '',
|
||||
encodingStyle => '',
|
||||
parts => [qw( SOAP::WSDL::XSD::Typelib::Builtin::string )],
|
||||
},
|
||||
header => {
|
||||
parts => [qw( SOAP::WSDL::XSD::Typelib::Builtin::string )],
|
||||
},
|
||||
headerfault => {
|
||||
|
||||
}
|
||||
}, SOAP::WSDL::XSD::Typelib::Builtin::string->new({ value => 'Body2' }),
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::string->new({ value => 'Header2' })
|
||||
);
|
||||
|
||||
is $result[0], 'Body2';
|
||||
is $result[1], 'Header2';
|
||||
isa_ok $result[1], 'SOAP::WSDL::XSD::Typelib::Builtin::string';
|
||||
@@ -1,5 +1,9 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
package TestResolver;
|
||||
sub get_typemap { {} };
|
||||
|
||||
package main;
|
||||
use Test::More tests => 8;
|
||||
|
||||
use SOAP::WSDL::Deserializer::XSD;
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
use Test::More tests => 3;
|
||||
use_ok qw(SOAP::WSDL::Expat::Base);
|
||||
|
||||
my $parser = SOAP::WSDL::Expat::Base->new();
|
||||
|
||||
eval { $parser->parse('Foobar')};
|
||||
ok $@;
|
||||
|
||||
eval { $parser->parsefile('Foobar')};
|
||||
ok $@;
|
||||
@@ -1,6 +1,6 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
use Test::More tests => 4;
|
||||
use Test::More tests => 5;
|
||||
use Scalar::Util qw(blessed);
|
||||
use SOAP::WSDL::Factory::Transport;
|
||||
|
||||
@@ -14,3 +14,7 @@ SOAP::WSDL::Factory::Transport->register('zumsl', 'Hope_You_Have_No_Such_Package
|
||||
|
||||
eval { SOAP::WSDL::Factory::Transport->get_transport('zumsl') };
|
||||
like $@, qr{^Cannot load};
|
||||
|
||||
eval { SOAP::WSDL::Factory::Transport->register( \'zumsl', 'Foo') };
|
||||
like $@, qr{^Cannot use reference};
|
||||
|
||||
|
||||
@@ -26,14 +26,10 @@ my $definitions = $parser->get_data();
|
||||
|
||||
$definitions->_accept( $visitor );
|
||||
|
||||
#use Data::Dumper;
|
||||
#print Dumper $visitor->get_typemap();
|
||||
|
||||
my $typemap = $visitor->get_typemap();
|
||||
is $typemap->{'EnqueueMessage/MMessage/MKeepalive'}, 'MyTypes::TKeepalive', 'content';
|
||||
is $typemap->{'EnqueueMessageResponse'}, 'MyTypes::TMessageID', 'content';
|
||||
is $typemap->{'KeepaliveMessageResponse'}, 'MyTypes::TMessageID', 'content';
|
||||
|
||||
is $typemap->{'EnqueueMessageResponse'}, 'MyElements::EnqueueMessageResponse', 'content';
|
||||
is $typemap->{'KeepaliveMessageResponse'}, 'MyElements::KeepaliveMessageResponse', 'content';
|
||||
|
||||
sub wsdl {
|
||||
q{<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
@@ -43,7 +43,9 @@ $generator->set_output(undef);
|
||||
$generator->generate();
|
||||
#$generator->generate_typelib();
|
||||
#$generator->generate_typemap();
|
||||
#$generator->generate_interface();
|
||||
$generator->generate_interface();
|
||||
|
||||
$generator->generate_server();
|
||||
|
||||
eval "use lib '$path/testlib'";
|
||||
use_ok qw( MyInterfaces::testService::testPort );
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
package MyDeserializer;
|
||||
use Class::Std::Fast;
|
||||
require Test::More;
|
||||
my %class_resolver_of :ATTR(:name<class_resolver> :default<()>);
|
||||
sub generate_fault {
|
||||
Test::More::pass("generate fault on $_[1]->{ message }");
|
||||
return $_[1]->{ message };
|
||||
}
|
||||
sub deserialize {
|
||||
return ('Body', 'Header');
|
||||
}
|
||||
|
||||
package MyDeserializer2;
|
||||
use Class::Std::Fast;
|
||||
|
||||
sub deserialize {
|
||||
die "Deserialize";
|
||||
}
|
||||
sub generate_fault {
|
||||
Test::More::like($_[1]->{ message }, qr{\A Error \s deserializing }x, 'Generate fault on deserialize error' );
|
||||
return $_[1]->{ message };
|
||||
}
|
||||
|
||||
package MyHandler;
|
||||
|
||||
sub test {
|
||||
return 'Test';
|
||||
}
|
||||
|
||||
package main;
|
||||
use strict;
|
||||
use warnings;
|
||||
use HTTP::Request;
|
||||
use Test::More qw(no_plan);
|
||||
use_ok qw(SOAP::WSDL::Server);
|
||||
|
||||
my $server = SOAP::WSDL::Server->new();
|
||||
|
||||
$server->set_deserializer('MyDeserializer');
|
||||
eval { $server->handle(HTTP::Request->new()) };
|
||||
like $@, qr{\A No \s handler}x, 'No handler fault caught';
|
||||
|
||||
$server->set_dispatch_to('MyHandler');
|
||||
eval { $server->handle(HTTP::Request->new()) };
|
||||
like $@, qr{\A Not \s found: \sNo \s SOAPAction \s given}x, 'No SOAPAction fault caught';
|
||||
|
||||
my $request = HTTP::Request->new();
|
||||
$request->header('SOAPAction', 'Test');
|
||||
$server->set_dispatch_to('MyHandler');
|
||||
eval { $server->handle($request) };
|
||||
like $@, qr{\A Not \s found: \sNo \s method \s found \s for \s the \s SOAPAction \s 'Test'}x, 'No SOAPAction fault caught';
|
||||
|
||||
$server->set_action_map_ref({ Test => 'test2'});
|
||||
eval { $server->handle($request) };
|
||||
like $@, qr{\A Not \s implemented:}x, 'Not implemented fault caught';
|
||||
|
||||
|
||||
|
||||
$server->set_deserializer('MyDeserializer2');
|
||||
eval { $server->handle(HTTP::Request->new()) };
|
||||
like $@, qr{\A Error \s deserializing}x, 'Error deserializing caught';
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
package MyTypemap;
|
||||
sub get_typemap { return {} };
|
||||
|
||||
package HandlerClass;
|
||||
|
||||
sub bar {
|
||||
return "Verdammte Axt";
|
||||
}
|
||||
package main;
|
||||
use Test::More tests => 4;
|
||||
|
||||
use_ok(SOAP::WSDL::Server);
|
||||
use_ok(SOAP::WSDL::Server::CGI);
|
||||
|
||||
my $server = SOAP::WSDL::Server::CGI->new({
|
||||
class_resolver => 'MyTypemap',
|
||||
});
|
||||
$server->set_action_map_ref({
|
||||
'testaction' => 'testmethod',
|
||||
});
|
||||
|
||||
eval "require IO::Scalar"
|
||||
or exit 0;
|
||||
{
|
||||
no warnings qw(once);
|
||||
*IO::Scalar::BINMODE = sub {};
|
||||
}
|
||||
my $output = q{};
|
||||
my $fh = IO::Scalar->new(\$output);
|
||||
my $stdout = *STDOUT;
|
||||
|
||||
*STDOUT = $fh;
|
||||
|
||||
$server->handle();
|
||||
|
||||
like $output, qr{ \A Status: \s 411 \s Length \s Required}x;
|
||||
$output = q{};
|
||||
|
||||
$ENV{'CONTENT_LENGTH'} = '0e0';
|
||||
$server->handle();
|
||||
|
||||
like $output, qr{ Error \s deserializing }xsm;
|
||||
$output = q{};
|
||||
|
||||
$server->set_action_map_ref({
|
||||
'foo' => 'bar',
|
||||
});
|
||||
$server->set_dispatch_to( 'HandlerClass' );
|
||||
|
||||
$server->handle();
|
||||
|
||||
print "\n";
|
||||
|
||||
$ENV{HTTP_SOAPAction} = 'test';
|
||||
$server->handle();
|
||||
|
||||
print "\n";
|
||||
|
||||
$ENV{HTTP_SOAPAction} = 'foo';
|
||||
$server->handle();
|
||||
|
||||
*STDOUT = $stdout;
|
||||
|
||||
# print $output;
|
||||
@@ -11,7 +11,8 @@ use_ok(qw/SOAP::WSDL::Transport::Test/);
|
||||
$soap = SOAP::WSDL::Client->new();
|
||||
$soap->set_proxy('http://somewhere.over.the.rainbow');
|
||||
|
||||
ok( $soap->get_transport->set_base_dir( join '/', $base_dir, 'acceptance' ) );
|
||||
$soap->get_transport->set_base_dir( join '/', $base_dir, 'acceptance' );
|
||||
ok $soap->get_transport->get_base_dir();
|
||||
|
||||
{
|
||||
local $SIG{__WARN__} = sub {};
|
||||
|
||||
@@ -11,10 +11,10 @@ ok $transport->code(200);
|
||||
ok $transport->status('200 OK');
|
||||
ok $transport->message('OK');
|
||||
|
||||
$transport->send_receive(envelope => 'Test', action => 'foo');
|
||||
my $result = $transport->send_receive(envelope => 'Test', action => 'foo');
|
||||
|
||||
ok ! $transport->is_success();
|
||||
|
||||
$transport->send_receive(encoding => 'utf8', envelope => 'ÄÖÜ',
|
||||
$result = $transport->send_receive(encoding => 'utf8', envelope => 'ÄÖÜ',
|
||||
action => 'foo');
|
||||
ok ! $transport->is_success();
|
||||
|
||||
@@ -1,12 +1,19 @@
|
||||
use Test::More tests => 5;
|
||||
use Test::More tests => 9;
|
||||
use strict;
|
||||
use warnings;
|
||||
use SOAP::WSDL::XSD::Typelib::Builtin::ENTITY;
|
||||
my $ENTITY = SOAP::WSDL::XSD::Typelib::Builtin::ENTITY->new();
|
||||
|
||||
is $ENTITY->get_value(), undef;
|
||||
$ENTITY->set_value(127);
|
||||
is "$ENTITY", "127", 'stringification';
|
||||
ok $ENTITY = SOAP::WSDL::XSD::Typelib::Builtin::ENTITY->new({ value => 127 });
|
||||
is "$ENTITY", "127", 'stringification';
|
||||
undef $ENTITY;
|
||||
|
||||
$ENTITY = SOAP::WSDL::XSD::Typelib::Builtin::ENTITY->new({});
|
||||
is $ENTITY->get_value(), undef;
|
||||
ok $ENTITY = SOAP::WSDL::XSD::Typelib::Builtin::ENTITY->new({ value => 127 });
|
||||
is "$ENTITY", "127", 'stringification';
|
||||
|
||||
ok $ENTITY->isa('SOAP::WSDL::XSD::Typelib::Builtin::NCName'), 'inheritance';
|
||||
is $ENTITY->get_value(), "127", 'stringification';
|
||||
ok $ENTITY->isa('SOAP::WSDL::XSD::Typelib::Builtin::NCName'), 'inheritance';
|
||||
|
||||
@@ -7,7 +7,7 @@ is $IDREFS->get_value(), undef;
|
||||
$IDREFS = SOAP::WSDL::XSD::Typelib::Builtin::IDREFS->new({});
|
||||
is $IDREFS->get_value(), undef;
|
||||
ok $IDREFS = SOAP::WSDL::XSD::Typelib::Builtin::IDREFS->new({ value => [ 127 , 'Test' ] });
|
||||
is "$IDREFS", "127 Test", 'stringification';
|
||||
is $IDREFS->serialize(), "127 Test", 'stringification';
|
||||
|
||||
ok $IDREFS = SOAP::WSDL::XSD::Typelib::Builtin::IDREFS->new({ value => 'Test' });
|
||||
is "$IDREFS", "Test", 'stringification';
|
||||
|
||||
@@ -8,13 +8,13 @@ $NMTOKENS = SOAP::WSDL::XSD::Typelib::Builtin::NMTOKENS->new({});
|
||||
is $NMTOKENS->get_value(), undef;
|
||||
ok $NMTOKENS = SOAP::WSDL::XSD::Typelib::Builtin::NMTOKENS->new({ value => [ 127 , 'Test' ] });
|
||||
|
||||
is "$NMTOKENS", '127 Test', 'stringification';
|
||||
is $NMTOKENS->serialize, '127 Test', 'stringification';
|
||||
|
||||
ok $NMTOKENS = SOAP::WSDL::XSD::Typelib::Builtin::NMTOKENS->new({ value => 'Test' });
|
||||
is "$NMTOKENS", "Test", 'stringification';
|
||||
|
||||
$NMTOKENS = SOAP::WSDL::XSD::Typelib::Builtin::NMTOKENS->new({ value => undef });
|
||||
is "$NMTOKENS", q{}, 'stringification';
|
||||
is $NMTOKENS, undef, 'stringification';
|
||||
|
||||
|
||||
ok $NMTOKENS->isa('SOAP::WSDL::XSD::Typelib::Builtin::NMTOKEN'), 'inheritance';
|
||||
|
||||
@@ -1,12 +1,19 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
use Test::More tests => 20;
|
||||
use Test::More tests => 23;
|
||||
use Scalar::Util qw(blessed);
|
||||
use lib '../../../../../../lib';
|
||||
use_ok qw(SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType);
|
||||
|
||||
my $obj = SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType->new();
|
||||
|
||||
my $id = ${ $obj };
|
||||
undef $obj;
|
||||
|
||||
$obj = SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType->new();
|
||||
|
||||
is ${ $obj }, $id;
|
||||
|
||||
ok blessed $obj, 'constructor returned blessed reference';
|
||||
|
||||
$obj = SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType->new({ value => 'test1' });
|
||||
@@ -23,7 +30,8 @@ is $obj->end_tag({ name => 'test' }), '</test >', 'end_tag';
|
||||
ok $obj->set_value('test'), 'set_value';
|
||||
is $obj->get_value(), 'test', 'get_value';
|
||||
|
||||
is "$obj", q{test}, 'serialize overloading';
|
||||
is "$obj", q{test}, 'stringification overloading';
|
||||
is $obj->serialize, q{test}, 'stringification overloading';
|
||||
|
||||
ok ($obj)
|
||||
? pass 'boolean overloading'
|
||||
@@ -32,7 +40,11 @@ ok ($obj)
|
||||
ok ! $obj->set_value(undef), 'set_value with explicit undef';
|
||||
is $obj->get_value(), undef, 'get_value';
|
||||
|
||||
is "$obj", q{}, 'stringification overloading';
|
||||
{
|
||||
no warnings qw(uninitialized);
|
||||
is "$obj", q{}, 'stringification overloading';
|
||||
}
|
||||
is $obj->serialize, q{}, 'stringification overloading';
|
||||
|
||||
ok $obj = SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType->new({
|
||||
value => 'test2',
|
||||
@@ -47,4 +59,4 @@ is $obj->serialize({ name => 'foo' }), '<foo ></foo >'
|
||||
is $obj->serialize(), q{}, 'serialize undef value without name';
|
||||
|
||||
|
||||
ok $obj->isa('SOAP::WSDL::XSD::Typelib::Builtin::anyType'), 'inheritance';
|
||||
ok $obj->isa('SOAP::WSDL::XSD::Typelib::Builtin::anyType'), 'inheritance';
|
||||
|
||||
@@ -1,10 +1,19 @@
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use Test::More tests => 7;
|
||||
use Test::More tests => 3;
|
||||
use Scalar::Util qw(blessed);
|
||||
use lib '../../../../../../lib';
|
||||
use_ok qw(SOAP::WSDL::XSD::Typelib::Builtin::anyType);
|
||||
|
||||
is SOAP::WSDL::XSD::Typelib::Builtin::anyType->get_xmlns(), 'http://www.w3.org/2001/XMLSchema', 'get_xmlns';
|
||||
is SOAP::WSDL::XSD::Typelib::Builtin::anyType->serialize(), q{}, 'serialize to empty';
|
||||
|
||||
exit 0;
|
||||
|
||||
__END__
|
||||
|
||||
# cannot instantiate abstract type...
|
||||
|
||||
my $obj = SOAP::WSDL::XSD::Typelib::Builtin::anyType->new();
|
||||
|
||||
ok blessed $obj, 'constructor returned blessed reference';
|
||||
|
||||
@@ -3,7 +3,10 @@ use strict;
|
||||
use warnings;
|
||||
use SOAP::WSDL::XSD::Typelib::Builtin::base64Binary;
|
||||
my $obj = SOAP::WSDL::XSD::Typelib::Builtin::base64Binary->new();
|
||||
is "$obj", '', 'stringification';
|
||||
{
|
||||
no warnings qw(uninitialized);
|
||||
is "$obj", '', 'stringification';
|
||||
}
|
||||
ok defined $obj;
|
||||
ok $obj->set_value('AAAA==');
|
||||
ok $obj = SOAP::WSDL::XSD::Typelib::Builtin::base64Binary->new({ value => 'AAAA==' });
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use Test::More tests => 19;
|
||||
use Test::More tests => 29;
|
||||
use strict;
|
||||
use warnings;
|
||||
use SOAP::WSDL::XSD::Typelib::Builtin::boolean;
|
||||
@@ -17,18 +17,19 @@ ok $bool = SOAP::WSDL::XSD::Typelib::Builtin::boolean->new({ value => 'true' });
|
||||
is $bool * 1 , 1, 'numerification';
|
||||
ok $bool, 'boolification';
|
||||
|
||||
is "$bool", 'true', 'stringification';
|
||||
is $bool->serialize(), 'true', 'serialization';
|
||||
|
||||
$bool->set_value('1');
|
||||
is $bool, 'true';
|
||||
is $bool->serialize(), 'true';
|
||||
is "$bool", 1, 'stringification';
|
||||
$bool ? pass 'boolification' : fail 'boolification';
|
||||
|
||||
$bool->set_value('0');
|
||||
is $bool, 'false';
|
||||
is $bool->serialize(), 'false';
|
||||
! $bool ? pass 'boolification' : fail 'boolification';
|
||||
|
||||
$bool->set_value(undef);
|
||||
is $bool, 'false';
|
||||
is $bool->serialize(), 'false';
|
||||
! $bool ? pass 'boolification' : fail 'boolification';
|
||||
|
||||
|
||||
@@ -41,7 +42,7 @@ else {
|
||||
pass 'boolification';
|
||||
}
|
||||
|
||||
is "$bool", 'false', 'stringification';
|
||||
is "$bool", '0', 'stringification';
|
||||
|
||||
ok $bool->isa('SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType'), 'inheritance';
|
||||
|
||||
@@ -49,4 +50,19 @@ is $bool->serialize({ name => 'test'}), '<test >false</test >';
|
||||
is $bool->serialize(), 'false';
|
||||
|
||||
$bool->delete_value();
|
||||
is "$bool", '', 'serialized undef to empty string';
|
||||
is $bool->serialize, '', 'serialized undef to empty string';
|
||||
is "$bool", '', 'stringified undef to empty string';
|
||||
$bool->set_value('');
|
||||
|
||||
is $bool->serialize, 'false', 'serialized empty string to false';
|
||||
is "$bool", 0, 'stringified empty string to 0';
|
||||
|
||||
$SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType::___value->{ ${ $bool } } = 'true';
|
||||
is $bool->serialize(), 'true', 'serialization';
|
||||
is "$bool", 1, 'stringification';
|
||||
is 3 * $bool, 3, 'numerification';
|
||||
|
||||
$SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType::___value->{ ${ $bool } } = 'false';
|
||||
is $bool->serialize(), 'false', 'serialization';
|
||||
is "$bool", 0, 'numerification';
|
||||
is 3 * $bool, 0, 'stringification';
|
||||
@@ -1,4 +1,4 @@
|
||||
use Test::More tests => 4;
|
||||
use Test::More tests => 7;
|
||||
use strict;
|
||||
use warnings;
|
||||
use lib '../lib';
|
||||
@@ -34,3 +34,9 @@ while (my ($date, $converted) = each %dates ) {
|
||||
is $obj->get_value() , $converted . timezone($date), 'conversion with timezone';
|
||||
}
|
||||
$obj->set_value('2007-12-31T00:00:00.0000000+01:00');
|
||||
is $obj->get_value(), '2007-12-31T00:00:00.0000000+01:00';
|
||||
|
||||
$obj->set_value(undef);
|
||||
is $obj->get_value(), undef;
|
||||
eval { $obj->set_value(1) };
|
||||
ok $@, 'Die on illegal datetime';
|
||||
@@ -0,0 +1,28 @@
|
||||
package ListTest;
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::Builtin::list
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::string);
|
||||
|
||||
package main;
|
||||
use Test::More tests => 11;
|
||||
use strict;
|
||||
use warnings;
|
||||
my $obj = ListTest->new();
|
||||
is $obj->get_value(), undef;
|
||||
$obj = ListTest->new({});
|
||||
is $obj->get_value(), undef;
|
||||
ok $obj = ListTest->new({ value => 'Test' });
|
||||
is "$obj", 'Test', 'stringification';
|
||||
|
||||
ok $obj->isa('SOAP::WSDL::XSD::Typelib::Builtin::string'), 'inheritance';
|
||||
|
||||
$obj->set_value(undef);
|
||||
is $obj->get_value, undef;
|
||||
is $obj->serialize(), '', 'serialize undef to empty string';
|
||||
is $obj->serialize({ empty => 1 }), '', 'serialize undef to empty string';
|
||||
|
||||
$obj->set_value(42);
|
||||
is $obj->get_value, 42;
|
||||
is $obj->serialize(), '42', 'serialize undef to empty string';
|
||||
|
||||
$obj->set_value([1,2,3]);
|
||||
is $obj->serialize(), '1 2 3', 'list serialization';
|
||||
@@ -1,4 +1,4 @@
|
||||
use Test::More tests => 8;
|
||||
use Test::More tests => 9;
|
||||
use strict;
|
||||
use warnings;
|
||||
use SOAP::WSDL::XSD::Typelib::Builtin::normalizedString;
|
||||
@@ -11,12 +11,14 @@ is "$obj", 'Test', 'stringification';
|
||||
|
||||
ok $obj->isa('SOAP::WSDL::XSD::Typelib::Builtin::string'), 'inheritance';
|
||||
|
||||
$obj->set_value(undef);
|
||||
is $obj->get_value, undef;
|
||||
$obj->set_value( "&\t\"Aber\"\n\r<test>");
|
||||
is $obj->get_value() , '& "Aber" <test>';
|
||||
is $obj->get_value() , '& "Aber" <test>';
|
||||
|
||||
is $obj, '& &qout;Aber&qout; <test>'
|
||||
is $obj->serialize, '& "Aber" <test>'
|
||||
, 'escape text on serialization';
|
||||
|
||||
is $obj->serialize({ name => 'test'})
|
||||
, '<test >& &qout;Aber&qout; <test></test >'
|
||||
, '<test >& "Aber" <test></test >'
|
||||
, 'Serialization with name';
|
||||
@@ -1,4 +1,4 @@
|
||||
use Test::More tests => 5;
|
||||
use Test::More tests => 6;
|
||||
use strict;
|
||||
use warnings;
|
||||
use lib '../lib';
|
||||
@@ -7,17 +7,17 @@ use_ok('SOAP::WSDL::XSD::Typelib::Builtin::string');
|
||||
my $obj;
|
||||
$obj = SOAP::WSDL::XSD::Typelib::Builtin::string->new({ value => '& "Aber" <test>'});
|
||||
|
||||
is $obj, '& &qout;Aber&qout; <test>'
|
||||
is $obj->serialize, '& "Aber" <test>'
|
||||
, 'escape text on serialization';
|
||||
|
||||
$obj = SOAP::WSDL::XSD::Typelib::Builtin::string->new();
|
||||
$obj = SOAP::WSDL::XSD::Typelib::Builtin::string->new({});
|
||||
$obj->set_value( '& "Aber" <test>');
|
||||
is $obj->get_value() , '& "Aber" <test>';
|
||||
|
||||
is $obj, '& &qout;Aber&qout; <test>'
|
||||
is $obj, '& "Aber" <test>';
|
||||
is $obj->serialize(), '& "Aber" <test>'
|
||||
, 'escape text on serialization';
|
||||
|
||||
is $obj->serialize({ name => 'test'})
|
||||
, '<test >& &qout;Aber&qout; <test></test >'
|
||||
, '<test >& "Aber" <test></test >'
|
||||
, 'Serialization with name';
|
||||
@@ -34,7 +34,7 @@ __PACKAGE__->_factory(
|
||||
);
|
||||
|
||||
package main;
|
||||
use Test::More tests => 90;
|
||||
use Test::More tests => 89;
|
||||
use Data::Dumper;
|
||||
use Storable;
|
||||
my $obj;
|
||||
@@ -77,14 +77,14 @@ $obj = MyType->new({
|
||||
});
|
||||
isa_ok $obj, 'MyType';
|
||||
isa_ok $obj->get_test, 'ARRAY';
|
||||
is $obj->get_test()->[0], 'Test', 'element content';
|
||||
is $obj->get_test()->[1], 'Test2', 'element content';
|
||||
is $obj->get_test()->[0], 'Test', 'element content (list content [0])';
|
||||
is $obj->get_test()->[1], 'Test2', 'element content (list content [1])';
|
||||
|
||||
my $nested = MyType2->new({
|
||||
test => $obj,
|
||||
});
|
||||
|
||||
is $nested->get_test, $obj;
|
||||
is $nested->get_test, $obj, 'getter';
|
||||
$nested = MyType2->new({
|
||||
test => [$obj, $obj],
|
||||
});
|
||||
@@ -105,7 +105,8 @@ $nested = MyType2->new({
|
||||
},
|
||||
});
|
||||
|
||||
is $nested->get_test->[0], $obj;
|
||||
|
||||
# isnt $nested->get_test->[0], $obj, 'element identity';
|
||||
|
||||
$obj = MyType->new();
|
||||
isa_ok $obj, 'MyType';
|
||||
@@ -114,7 +115,6 @@ is $obj->get_test, undef, 'undefined element content';
|
||||
$obj->add_test(
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::string->new({ value => 'TestString0'})
|
||||
);
|
||||
|
||||
is $obj->get_test, 'TestString0', 'added element content';
|
||||
|
||||
for my $count (1..5) {
|
||||
@@ -137,13 +137,23 @@ $obj = MyType->new();
|
||||
isa_ok $obj, 'MyType';
|
||||
is $obj->get_test, undef;
|
||||
|
||||
eval { my $foo = @{ $obj->get_test() } };
|
||||
like $@ , qr{Can't \s use \s an \s undefined}x, 'get_ELEMENT still undef on ARRAYIFY';
|
||||
|
||||
$obj->test(
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::string->new({ value => 'TestString0'})
|
||||
);
|
||||
{
|
||||
no warnings;
|
||||
my $foo;
|
||||
eval { $foo = @{ $obj->get_test() } };
|
||||
if (! $@) {
|
||||
is $foo, undef;
|
||||
# like $warnings, qr{ uninitialized \s value \s in array \s dereference }x, 'undef warning';
|
||||
}
|
||||
else {
|
||||
like $@ , qr{Can't \s use \s an \s undefined}x, 'get_ELEMENT still undef on ARRAYIFY';
|
||||
# pass 'failed array dereference';
|
||||
}
|
||||
|
||||
$obj->test(
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::string->new({ value => 'TestString0'})
|
||||
);
|
||||
}
|
||||
is $obj->get_test, 'TestString0';
|
||||
eval { is @{ $obj->get_test() }, 1, 'ARRAYIFY get_ELEMENT' };
|
||||
fail 'cannot ARRAYIFY get_ELEMENT' if ($@);
|
||||
@@ -171,6 +181,7 @@ for my $count (1..5) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
eval {
|
||||
$obj = MyType->new({
|
||||
test => [
|
||||
|
||||
@@ -25,7 +25,7 @@ isa_ok $obj, 'MyElement';
|
||||
is $obj->get_value(), 'Test';
|
||||
|
||||
$obj->set_value(undef);
|
||||
is $obj, '<MyElement xsi:nil="true" xmlns="http://www.w3.org/2001/XMLSchema" />';
|
||||
is $obj->serialize_qualified, '<MyElement xsi:nil="true" xmlns="http://www.w3.org/2001/XMLSchema" />';
|
||||
|
||||
$obj->__set_nillable(0);
|
||||
is $obj->__get_nillable(), 0;
|
||||
@@ -41,4 +41,4 @@ $obj->set_value('Test');
|
||||
|
||||
|
||||
eval { is @{ $obj }, 1, 'ARRAYIFY' };
|
||||
fail 'ARRAYIFY' if ($@);
|
||||
fail 'ARRAYIFY' if ($@);
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<wsdl:definitions name="WSDL_1"
|
||||
targetNamespace="http://www.example.org/WSDL_1/"
|
||||
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
|
||||
xmlns:tns="http://www.example.org/WSDL_1/"
|
||||
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
|
||||
<wsdl:types>
|
||||
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
targetNamespace="http://www.example.org/WSDL_1/">
|
||||
<xsd:element name="NewOperation">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="in" type="xsd:string"></xsd:element>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="NewOperationResponse">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="out" type="xsd:string"></xsd:element>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
</wsdl:types>
|
||||
<wsdl:message name="NewOperationRequest">
|
||||
<wsdl:part name="parameters" element="tns:NewOperation"></wsdl:part>
|
||||
</wsdl:message>
|
||||
<wsdl:message name="NewOperationResponse">
|
||||
<wsdl:part name="parameters"
|
||||
element="tns:NewOperationResponse">
|
||||
</wsdl:part>
|
||||
</wsdl:message>
|
||||
<wsdl:portType name="NewPortType">
|
||||
<wsdl:operation name="NewOperation">
|
||||
<wsdl:input message="tns:NewOperationRequest"></wsdl:input>
|
||||
<wsdl:output message="tns:NewOperationResponse"></wsdl:output>
|
||||
</wsdl:operation>
|
||||
</wsdl:portType>
|
||||
<wsdl:binding name="NewBinding" type="tns:NewPortType">
|
||||
<soap:binding style="document"
|
||||
transport="http://schemas.xmlsoap.org/soap/http" />
|
||||
<wsdl:operation name="NewOperation">
|
||||
<soap:operation
|
||||
soapAction="http://www.example.org/WSDL_1/NewOperation" />
|
||||
<wsdl:input>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
</wsdl:binding>
|
||||
<wsdl:service name="NewService">
|
||||
<wsdl:port name="NewPort" binding="tns:NewBinding">
|
||||
<soap:address location="http://www.example.org/"></soap:address>
|
||||
</wsdl:port>
|
||||
</wsdl:service>
|
||||
</wsdl:definitions>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><wsdl:definitions name="WSDL_1" targetNamespace="http://www.example.org/WSDL_1/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://www.example.org/WSDL_1/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
|
||||
</wsdl:definitions>
|
||||
@@ -0,0 +1,60 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<wsdl:definitions name="WSDL_1"
|
||||
targetNamespace="http://www.example.org/WSDL_1/"
|
||||
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
|
||||
xmlns:tns="http://www.example.org/WSDL_1/"
|
||||
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
|
||||
<wsdl:types>
|
||||
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
targetNamespace="http://www.example.org/WSDL_1/">
|
||||
<xsd:element name="NewOperation">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="in" type="xsd:string"></xsd:element>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="NewOperationResponse">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="out" type="xsd:string"></xsd:element>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
</wsdl:types>
|
||||
<wsdl:message name="NewOperationRequest">
|
||||
<wsdl:part name="parameters" element="tns:NewOperation"></wsdl:part>
|
||||
</wsdl:message>
|
||||
<wsdl:message name="NewOperationResponse">
|
||||
<wsdl:part name="parameters"
|
||||
element="tns:NewOperationResponse">
|
||||
</wsdl:part>
|
||||
</wsdl:message>
|
||||
<wsdl:portType name="NewPortType">
|
||||
<wsdl:operation name="NewOperation">
|
||||
<wsdl:input message="tns:NewOperationRequest"></wsdl:input>
|
||||
<wsdl:output message="tns:NewOperationResponse"></wsdl:output>
|
||||
</wsdl:operation>
|
||||
</wsdl:portType>
|
||||
<wsdl:binding name="NewBinding" type="tns:NewPortType">
|
||||
<soap:binding style="document"
|
||||
transport="http://schemas.xmlsoap.org/soap/http" />
|
||||
<wsdl:operation name="NewOperation">
|
||||
<soap:operation
|
||||
soapAction="http://www.example.org/WSDL_1/NewOperation" />
|
||||
<wsdl:input>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
</wsdl:binding>
|
||||
<wsdl:service name="NewService">
|
||||
<wsdl:port name="NewPort" binding="tns:BadBinding">
|
||||
<soap:address location="http://www.example.org/"></soap:address>
|
||||
</wsdl:port>
|
||||
</wsdl:service>
|
||||
</wsdl:definitions>
|
||||
@@ -0,0 +1,60 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<wsdl:definitions name="WSDL_1"
|
||||
targetNamespace="http://www.example.org/WSDL_1/"
|
||||
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
|
||||
xmlns:tns="http://www.example.org/WSDL_1/"
|
||||
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
|
||||
<wsdl:types>
|
||||
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
targetNamespace="http://www.example.org/WSDL_1/">
|
||||
<xsd:element name="NewOperation">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="in" type="xsd:string"></xsd:element>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="NewOperationResponse">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="out" type="xsd:string"></xsd:element>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
</wsdl:types>
|
||||
<wsdl:message name="BadOperationRequest">
|
||||
<wsdl:part name="parameters" element="tns:NewOperation"></wsdl:part>
|
||||
</wsdl:message>
|
||||
<wsdl:message name="NewOperationResponse">
|
||||
<wsdl:part name="parameters"
|
||||
element="tns:NewOperationResponse">
|
||||
</wsdl:part>
|
||||
</wsdl:message>
|
||||
<wsdl:portType name="NewPortType">
|
||||
<wsdl:operation name="NewOperation">
|
||||
<wsdl:input message="tns:NewOperationRequest"></wsdl:input>
|
||||
<wsdl:output message="tns:NewOperationResponse"></wsdl:output>
|
||||
</wsdl:operation>
|
||||
</wsdl:portType>
|
||||
<wsdl:binding name="NewBinding" type="tns:NewPortType">
|
||||
<soap:binding style="document"
|
||||
transport="http://schemas.xmlsoap.org/soap/http" />
|
||||
<wsdl:operation name="NewOperation">
|
||||
<soap:operation
|
||||
soapAction="http://www.example.org/WSDL_1/NewOperation" />
|
||||
<wsdl:input>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
</wsdl:binding>
|
||||
<wsdl:service name="NewService">
|
||||
<wsdl:port name="NewPort" binding="tns:NewBinding">
|
||||
<soap:address location="http://www.example.org/"></soap:address>
|
||||
</wsdl:port>
|
||||
</wsdl:service>
|
||||
</wsdl:definitions>
|
||||
@@ -0,0 +1,60 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<wsdl:definitions name="WSDL_1"
|
||||
targetNamespace="http://www.example.org/WSDL_1/"
|
||||
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
|
||||
xmlns:tns="http://www.example.org/WSDL_1/"
|
||||
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
|
||||
<wsdl:types>
|
||||
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
targetNamespace="http://www.example.org/WSDL_1/">
|
||||
<xsd:element name="NewOperation">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="in" type="xsd:string"></xsd:element>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="NewOperationResponse">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="out" type="xsd:string"></xsd:element>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
</wsdl:types>
|
||||
<wsdl:message name="NewOperationRequest">
|
||||
<wsdl:part name="parameters" element="tns:NewOperation"></wsdl:part>
|
||||
</wsdl:message>
|
||||
<wsdl:message name="NewOperationResponse">
|
||||
<wsdl:part name="parameters"
|
||||
element="tns:NewOperationResponse">
|
||||
</wsdl:part>
|
||||
</wsdl:message>
|
||||
<wsdl:portType name="NewPortType">
|
||||
<wsdl:operation name="NewOperation">
|
||||
<wsdl:input message="tns:NewOperationRequest"></wsdl:input>
|
||||
<wsdl:output message="tns:NewOperationResponse"></wsdl:output>
|
||||
</wsdl:operation>
|
||||
</wsdl:portType>
|
||||
<wsdl:binding name="NewBinding" type="tns:BadPortType">
|
||||
<soap:binding style="document"
|
||||
transport="http://schemas.xmlsoap.org/soap/http" />
|
||||
<wsdl:operation name="NewOperation">
|
||||
<soap:operation
|
||||
soapAction="http://www.example.org/WSDL_1/NewOperation" />
|
||||
<wsdl:input>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
</wsdl:binding>
|
||||
<wsdl:service name="NewService">
|
||||
<wsdl:port name="NewPort" binding="tns:NewBinding">
|
||||
<soap:address location="http://www.example.org/"></soap:address>
|
||||
</wsdl:port>
|
||||
</wsdl:service>
|
||||
</wsdl:definitions>
|
||||
Reference in New Issue
Block a user