Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b955c5ad79 |
@@ -4,7 +4,7 @@ $build = Module::Build->new(
|
|||||||
create_makefile_pl => 'passthrough',
|
create_makefile_pl => 'passthrough',
|
||||||
dist_abstract => 'SOAP with WSDL support',
|
dist_abstract => 'SOAP with WSDL support',
|
||||||
dist_name => 'SOAP-WSDL',
|
dist_name => 'SOAP-WSDL',
|
||||||
dist_version => '2.00_22',
|
dist_version => '2.00_23',
|
||||||
module_name => 'SOAP::WSDL',
|
module_name => 'SOAP::WSDL',
|
||||||
license => 'artistic',
|
license => 'artistic',
|
||||||
requires => {
|
requires => {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
Release notes for SOAP::WSDL 2.00_22
|
Release notes for SOAP::WSDL 2.00_23
|
||||||
-------
|
-------
|
||||||
|
|
||||||
I'm proud to present a new pre-release version of SOAP::WSDL.
|
I'm proud to present a new pre-release version of SOAP::WSDL.
|
||||||
@@ -33,6 +33,20 @@ Features:
|
|||||||
|
|
||||||
The following changes have been made:
|
The following changes have been made:
|
||||||
|
|
||||||
|
2.00_23
|
||||||
|
---
|
||||||
|
|
||||||
|
The following bugs have been fixed (the numbers in square brackets are the
|
||||||
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
||||||
|
|
||||||
|
* [ 1826382 ] nillable elements not serialized as xsi:nil
|
||||||
|
* [ 1826337 ] Second element in complexType gets eaten up
|
||||||
|
* [ 1792348 ] 006_client.t requires SOAP::Lite (again)
|
||||||
|
|
||||||
|
The following uncategorized improvements have been made:
|
||||||
|
|
||||||
|
* Test for complexType containing element with atomic simpleType added
|
||||||
|
|
||||||
2.00_22
|
2.00_22
|
||||||
----
|
----
|
||||||
|
|
||||||
@@ -201,7 +215,7 @@ tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
|||||||
* [ 1797678 ] Move Code generator from WSDL::Definitions to separate class
|
* [ 1797678 ] Move Code generator from WSDL::Definitions to separate class
|
||||||
|
|
||||||
* [ 1803330 ] Create one interface per port
|
* [ 1803330 ] Create one interface per port
|
||||||
SOAP::WSDL now creats one interface per port, not one per service.
|
SOAP::WSDL now creates one interface per port, not one per service.
|
||||||
|
|
||||||
The following bugs have been fixed (the numbers in square brackets are the
|
The following bugs have been fixed (the numbers in square brackets are the
|
||||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
||||||
|
|||||||
@@ -314,6 +314,3 @@ t/SOAP/WSDL/XSD/Typelib/Builtin/unsignedShort.t
|
|||||||
t/test.wsdl
|
t/test.wsdl
|
||||||
TEST_COVERAGE
|
TEST_COVERAGE
|
||||||
TODO
|
TODO
|
||||||
|
|
||||||
SOAP-WSDL-2.00_21.ppd
|
|
||||||
SOAP-WSDL-2.00_21.zip
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: SOAP-WSDL
|
name: SOAP-WSDL
|
||||||
version: 2.00_22
|
version: 2.00_23
|
||||||
author: []
|
author: []
|
||||||
abstract: SOAP with WSDL support
|
abstract: SOAP with WSDL support
|
||||||
license: artistic
|
license: artistic
|
||||||
@@ -236,9 +236,10 @@ provides:
|
|||||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/unsignedShort.pm
|
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/unsignedShort.pm
|
||||||
SOAP::WSDL::XSD::Typelib::ComplexType:
|
SOAP::WSDL::XSD::Typelib::ComplexType:
|
||||||
file: lib/SOAP/WSDL/XSD/Typelib/ComplexType.pm
|
file: lib/SOAP/WSDL/XSD/Typelib/ComplexType.pm
|
||||||
version: 2.00_22
|
version: 2.00_23
|
||||||
SOAP::WSDL::XSD::Typelib::Element:
|
SOAP::WSDL::XSD::Typelib::Element:
|
||||||
file: lib/SOAP/WSDL/XSD/Typelib/Element.pm
|
file: lib/SOAP/WSDL/XSD/Typelib/Element.pm
|
||||||
|
version: 2.00_23
|
||||||
SOAP::WSDL::XSD::Typelib::SimpleType:
|
SOAP::WSDL::XSD::Typelib::SimpleType:
|
||||||
file: lib/SOAP/WSDL/XSD/Typelib/SimpleType.pm
|
file: lib/SOAP/WSDL/XSD/Typelib/SimpleType.pm
|
||||||
SOAP::WSDL::XSD::Typelib::SimpleType::restriction:
|
SOAP::WSDL::XSD::Typelib::SimpleType::restriction:
|
||||||
|
|||||||
@@ -1,15 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<SOFTPKG NAME="SOAP-WSDL-2.00_21" VERSION="2,00_21,0,0">
|
|
||||||
<TITLE>SOAP-WSDL-2.00_21</TITLE>
|
|
||||||
<ABSTRACT>SOAP with WSDL support</ABSTRACT>
|
|
||||||
<AUTHOR>Martin Kutter <MKUTTER@cpan.org></AUTHOR>
|
|
||||||
<IMPLEMENTATION>
|
|
||||||
<DEPENDENCY NAME="Class-Std" VERSION="v0,0,8,0" />
|
|
||||||
<DEPENDENCY NAME="Class-Std-Storable" VERSION="0,0,0,0" />
|
|
||||||
<DEPENDENCY NAME="Template-Toolkit" VERSION="0,0,0,0" />
|
|
||||||
<DEPENDENCY NAME="TimeDate" VERSION="0,0,0,0" />
|
|
||||||
<OS NAME="MSWin32" />
|
|
||||||
<ARCHITECTURE NAME="MSWin32-x86-multi-thread-5.8" />
|
|
||||||
<CODEBASE HREF="SOAP-WSDL-2.00_21.zip" />
|
|
||||||
</IMPLEMENTATION>
|
|
||||||
</SOFTPKG>
|
|
||||||
Binary file not shown.
+59
-28
@@ -1,5 +1,6 @@
|
|||||||
#!/usr/bin/perl -w
|
#!/usr/bin/perl -w
|
||||||
%DB::packages=(SOAP::WSDL::Expat::MessageParser => 1);
|
%DB::packages=(SOAP::WSDL::Expat::MessageParser => 1);
|
||||||
|
%DB::packages=(SOAP::WSDL::Expat::MessageParser => 1);
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use lib '../lib';
|
use lib '../lib';
|
||||||
@@ -7,7 +8,7 @@ use lib 'lib';
|
|||||||
use lib '../t/lib';
|
use lib '../t/lib';
|
||||||
# use SOAP::WSDL::SAX::MessageHandler;
|
# use SOAP::WSDL::SAX::MessageHandler;
|
||||||
|
|
||||||
use Benchmark;
|
use Benchmark qw(cmpthese timethese);
|
||||||
use SOAP::WSDL::Expat::MessageParser;
|
use SOAP::WSDL::Expat::MessageParser;
|
||||||
use SOAP::WSDL::Expat::Message2Hash;
|
use SOAP::WSDL::Expat::Message2Hash;
|
||||||
use XML::Simple;
|
use XML::Simple;
|
||||||
@@ -18,8 +19,9 @@ use MySimpleType;
|
|||||||
|
|
||||||
my $xml = q{<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
my $xml = q{<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" >
|
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" >
|
||||||
<SOAP-ENV:Body><MyAtomicComplexTypeElement xmlns="urn:Test" >
|
<SOAP-ENV:Body>
|
||||||
<test>Test</test>
|
<MyAtomicComplexTypeElement xmlns="urn:Test" >
|
||||||
|
<test>
|
||||||
<test2 >Test2</test2>
|
<test2 >Test2</test2>
|
||||||
<test2 >Test2</test2>
|
<test2 >Test2</test2>
|
||||||
<test2 >Test2</test2>
|
<test2 >Test2</test2>
|
||||||
@@ -32,22 +34,13 @@ my $xml = q{<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-insta
|
|||||||
<test2 >Test2</test2>
|
<test2 >Test2</test2>
|
||||||
<test2 >Test2</test2>
|
<test2 >Test2</test2>
|
||||||
<test2 >Test2</test2>
|
<test2 >Test2</test2>
|
||||||
<test2 >Test2</test2>
|
<test2 >Test55</test2>
|
||||||
<test>Test</test>
|
</test>
|
||||||
<test>Test</test>
|
|
||||||
<test>Test</test>
|
|
||||||
<test>Test</test>
|
|
||||||
<test>Test</test>
|
|
||||||
<test>Test</test>
|
|
||||||
<test>Test</test>
|
|
||||||
<test>Test</test>
|
|
||||||
<test>Test</test>
|
|
||||||
<test>Test</test>
|
|
||||||
<test>Test</test>
|
|
||||||
</MyAtomicComplexTypeElement>
|
</MyAtomicComplexTypeElement>
|
||||||
</SOAP-ENV:Body></SOAP-ENV:Envelope>};
|
</SOAP-ENV:Body></SOAP-ENV:Envelope>};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
my $parser = SOAP::WSDL::Expat::MessageParser->new({
|
my $parser = SOAP::WSDL::Expat::MessageParser->new({
|
||||||
class_resolver => 'FakeResolver'
|
class_resolver => 'FakeResolver'
|
||||||
});
|
});
|
||||||
@@ -56,32 +49,70 @@ my $hash_parser = SOAP::WSDL::Expat::Message2Hash->new();
|
|||||||
|
|
||||||
$XML::Simple::PREFERRED_PARSER = 'XML::Parser';
|
$XML::Simple::PREFERRED_PARSER = 'XML::Parser';
|
||||||
|
|
||||||
|
print "xml length: ${ \length $xml } bytes\n";
|
||||||
|
|
||||||
my $libxml = XML::LibXML->new();
|
my $libxml = XML::LibXML->new();
|
||||||
|
$libxml->keep_blanks(0);
|
||||||
my @data;
|
my @data;
|
||||||
timethese 10000,
|
|
||||||
{
|
sub libxml_test {
|
||||||
'Hash (SOAP:WSDL)' => sub { push @data, $hash_parser->parse( $xml ) },
|
my $dom = $libxml->parse_string( $xml );
|
||||||
'XSD (SOAP::WSDL)' => sub { push @data, $parser->parse( $xml ) },
|
push @data, dom2hash( $dom->firstChild );
|
||||||
'XML::Simple (Hash)' => sub { push @data, XMLin $xml },
|
|
||||||
# 'XML::LibXML (DOM)' => sub { push @data, $libxml->parse_string( $xml ) },
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# use Test::More tests => 1;
|
sub dom2hash {
|
||||||
#is $parser->get_data(), q{<MyAtomicComplexTypeElement xmlns="urn:Test" >}
|
for ($_[0]->childNodes) {
|
||||||
# . q{<test >Test</test><test2 >Test2</test2></MyAtomicComplexTypeElement>}
|
if (exists $_[1]->{ $_->nodeName }) {
|
||||||
# , 'Content comparison';
|
if (ref $_[1]->{ $_->nodeName } eq 'ARRAY') {
|
||||||
|
if ($_->nodeName eq '#text') {
|
||||||
|
push @{ $_[1] } ,$_->textContent;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
push @{ $_[1]->{ $_->nodeName } }, dom2hash( $_, {} );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if ($_->nodeName eq '#text') {
|
||||||
|
$_[1] = [ $_[1], $_->textContent() ];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$_[1]->{ $_->nodeName } = [ $_[1]->{ $_->nodeName } ,
|
||||||
|
dom2hash( $_, {} ) ];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if ($_->nodeName eq '#text') {
|
||||||
|
$_[1] = $_->textContent();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$_[1]->{ $_->nodeName } = dom2hash( $_, {} );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $_[1];
|
||||||
|
}
|
||||||
|
|
||||||
#$parser->class_resolver( 'FakeResolver2' );
|
cmpthese 5000,
|
||||||
|
{
|
||||||
|
'SOAP::WSDL (Hash)' => sub { push @data, $hash_parser->parse( $xml ) },
|
||||||
|
'SOAP::WSDL (XSD)' => sub { push @data, $parser->parse( $xml ) },
|
||||||
|
'XML::Simple (Hash)' => sub { push @data, XMLin $xml },
|
||||||
|
'XML::LibXML (DOM)' => sub { push @data, $libxml->parse_string( $xml ) },
|
||||||
|
'XML::LibXML (Hash)' => \&libxml_test,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
# for (1..10000) { push @data, $parser->parse( $xml ) };
|
||||||
|
|
||||||
# data classes reside in t/lib/Typelib/
|
# data classes reside in t/lib/Typelib/
|
||||||
BEGIN {
|
BEGIN {
|
||||||
package FakeResolver;
|
package FakeResolver;
|
||||||
{
|
{
|
||||||
my %class_list = (
|
my %class_list = (
|
||||||
'MyAtomicComplexTypeElement' => 'MyAtomicComplexTypeElement',
|
'MyAtomicComplexTypeElement' => 'MyAtomicComplexTypeElement',
|
||||||
'MyAtomicComplexTypeElement/test' => 'MyTestElement',
|
'MyAtomicComplexTypeElement/test' => 'MyAtomicComplexTypeElement',
|
||||||
'MyAtomicComplexTypeElement/test2' => 'MyTestElement2',
|
'MyAtomicComplexTypeElement/test/test2' => 'MyTestElement2',
|
||||||
);
|
);
|
||||||
|
|
||||||
sub get_map { return \%class_list };
|
sub get_map { return \%class_list };
|
||||||
|
|||||||
@@ -8,14 +8,5 @@ my $obj = SOAP::WSDL::XSD::Typelib::Builtin::anyType->new();
|
|||||||
|
|
||||||
timethese 10000, {
|
timethese 10000, {
|
||||||
'new' => sub { SOAP::WSDL::XSD::Typelib::Builtin::anyType->new() },
|
'new' => sub { SOAP::WSDL::XSD::Typelib::Builtin::anyType->new() },
|
||||||
'new with params' => sub { SOAP::WSDL::XSD::Typelib::Builtin::anyType->new({
|
|
||||||
xmlns => 'urn:Test'
|
|
||||||
}) },
|
|
||||||
'set_FOO' => sub { $obj->set_xmlns('Test') },
|
|
||||||
};
|
};
|
||||||
|
|
||||||
my $data;
|
|
||||||
timethese 1000000, {
|
|
||||||
'set_FOO' => sub { $obj->set_xmlns('Test') },
|
|
||||||
'get_FOO' => sub { $data = $obj->get_xmlns() },
|
|
||||||
};
|
|
||||||
|
|||||||
@@ -9,14 +9,13 @@ my $obj = SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType->new();
|
|||||||
timethese 10000, {
|
timethese 10000, {
|
||||||
'new' => sub { SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType->new() },
|
'new' => sub { SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType->new() },
|
||||||
'new + params' => sub { SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType->new({
|
'new + params' => sub { SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType->new({
|
||||||
xmlns => 'urn:Test',
|
|
||||||
value => 'Teststring'
|
value => 'Teststring'
|
||||||
}) },
|
}) },
|
||||||
'set_FOO' => sub { $obj->set_xmlns('Test') },
|
'set_FOO' => sub { $obj->set_value('Test') },
|
||||||
};
|
};
|
||||||
|
|
||||||
my $data;
|
my $data;
|
||||||
timethese 1000000, {
|
timethese 1000000, {
|
||||||
'set_FOO' => sub { $obj->set_xmlns('Test') },
|
'set_FOO' => sub { $obj->set_value('Test') },
|
||||||
'get_FOO' => sub { $data = $obj->get_xmlns() },
|
'get_FOO' => sub { $data = $obj->get_value() },
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -6,17 +6,20 @@ use SOAP::WSDL::XSD::Typelib::Builtin::string;
|
|||||||
|
|
||||||
my $obj = SOAP::WSDL::XSD::Typelib::Builtin::string->new();
|
my $obj = SOAP::WSDL::XSD::Typelib::Builtin::string->new();
|
||||||
|
|
||||||
timethese 10000, {
|
timethese 20000, {
|
||||||
'new' => sub { SOAP::WSDL::XSD::Typelib::Builtin::string->new() },
|
'new' => sub { SOAP::WSDL::XSD::Typelib::Builtin::string->new() },
|
||||||
'new + params' => sub { SOAP::WSDL::XSD::Typelib::Builtin::string->new({
|
'new + params' => sub { SOAP::WSDL::XSD::Typelib::Builtin::string->new({
|
||||||
xmlns => 'urn:Test',
|
|
||||||
value => 'Teststring'
|
value => 'Teststring'
|
||||||
}) },
|
}) },
|
||||||
'set_FOO' => sub { $obj->set_xmlns('Test') },
|
};
|
||||||
|
|
||||||
|
$obj->set_value('Foobar');
|
||||||
|
timethese 20000, {
|
||||||
|
serialize => sub { $obj->serialize() }
|
||||||
};
|
};
|
||||||
|
|
||||||
my $data;
|
my $data;
|
||||||
timethese 1000000, {
|
timethese 1000000, {
|
||||||
'set_FOO' => sub { $obj->set_xmlns('Test') },
|
'set_FOO' => sub { $obj->set_value('Test') },
|
||||||
'get_FOO' => sub { $data = $obj->get_xmlns() },
|
'get_FOO' => sub { $data = $obj->get_value() },
|
||||||
};
|
};
|
||||||
|
|||||||
+2
-321
@@ -1,324 +1,5 @@
|
|||||||
================ SmallProf version 2.02 ================
|
================ SmallProf version 2.02 ================
|
||||||
Profile of ../lib/SOAP/WSDL/Expat/MessageParser.pm Page 1
|
Profile of -e Page 1
|
||||||
=================================================================
|
=================================================================
|
||||||
count wall tm cpu time line
|
count wall tm cpu time line
|
||||||
0 0.00000 0.00000 1:#!/usr/bin/perl
|
1 0.00004 0.00000 1:print 1
|
||||||
0 0.00000 0.00000 2:package SOAP::WSDL::Expat::MessageParser;
|
|
||||||
0 0.00000 0.00000 3:use strict;
|
|
||||||
0 0.00000 0.00000 4:use warnings;
|
|
||||||
0 0.00000 0.00000 5:use SOAP::WSDL::XSD::Typelib::Builtin;
|
|
||||||
0 0.00000 0.00000 6:use XML::Parser::Expat;
|
|
||||||
0 0.00000 0.00000 7:
|
|
||||||
0 0.00000 0.00000 8:sub new {
|
|
||||||
1 0.00000 0.00000 9: my ($class, $args) = @_;
|
|
||||||
0 0.00000 0.00000 10: my $self = {
|
|
||||||
0 0.00000 0.00000 11: class_resolver => $args->{
|
|
||||||
1 0.00001 0.00000 12: strict => exists $args->{ strict } ?
|
|
||||||
0 0.00000 0.00000 13: };
|
|
||||||
1 0.00001 0.00000 14: bless $self, $class;
|
|
||||||
1 0.02383 0.02000 15: return $self;
|
|
||||||
0 0.00000 0.00000 16:}
|
|
||||||
0 0.00000 0.00000 17:
|
|
||||||
0 0.00000 0.00000 18:sub class_resolver {
|
|
||||||
0 0.00000 0.00000 19: my $self = shift;
|
|
||||||
0 0.00000 0.00000 20: $self->{ class_resolver } = shift;
|
|
||||||
0 0.00000 0.00000 21: return;
|
|
||||||
0 0.00000 0.00000 22:}
|
|
||||||
0 0.00000 0.00000 23:
|
|
||||||
0 0.00000 0.00000 24:sub _initialize {
|
|
||||||
1000 0.00098 0.01000 25: my ($self, $parser) = @_;
|
|
||||||
1000 0.04304 0.02000 26: $self->{ parser } = $parser;
|
|
||||||
0 0.00000 0.00000 27:
|
|
||||||
1000 0.00140 0.01000 28: delete $self->{ data };
|
|
||||||
0 0.00000 0.00000 29:
|
|
||||||
1000 0.00042 0.03000 30: my $characters;
|
|
||||||
0 0.00000 0.00000 31: #my @characters_from = ();
|
|
||||||
1000 0.00059 0.00000 32: my $current = undef;
|
|
||||||
1000 0.00093 0.00000 33: my $list = []; #
|
|
||||||
1000 0.00065 0.02000 34: my $path = []; #
|
|
||||||
1000 0.00064 0.02000 35: my $skip = 0; #
|
|
||||||
1000 0.00049 0.01000 36: my $current_part = q{}; # are
|
|
||||||
0 0.00000 0.00000 37:
|
|
||||||
1000 0.00041 0.00000 38: my $depth = 0;
|
|
||||||
0 0.00000 0.00000 39:
|
|
||||||
0 0.00000 0.00000 40: my %content_check = $self->{strict}
|
|
||||||
0 0.00000 0.00000 41: ? (
|
|
||||||
0 0.00000 0.00000 42: 0 => sub {
|
|
||||||
1000 0.00115 0.00000 43: die "Bad top node $_[1]"
|
|
||||||
1000 0.01666 0.03000 44: die "Bad namespace for
|
|
||||||
0 0.00000 0.00000 45: if $_[0]-
|
|
||||||
1000 0.00051 0.02000 46: $depth++;
|
|
||||||
1000 0.00413 0.01000 47: return;
|
|
||||||
0 0.00000 0.00000 48: },
|
|
||||||
0 0.00000 0.00000 49: 1 => sub {
|
|
||||||
1000 0.00050 0.02000 50: $depth++;
|
|
||||||
1000 0.03690 0.04000 51: return;
|
|
||||||
0 0.00000 0.00000 52: }
|
|
||||||
0 0.00000 0.00000 53: )
|
|
||||||
1000 0.01120 0.03000 54: : ();
|
|
||||||
0 0.00000 0.00000 55:
|
|
||||||
0 0.00000 0.00000 56: my $char_handler = sub {
|
|
||||||
================ SmallProf version 2.02 ================
|
|
||||||
Profile of ../lib/SOAP/WSDL/Expat/MessageParser.pm Page 2
|
|
||||||
=================================================================
|
|
||||||
count wall tm cpu time line
|
|
||||||
0 0.00000 0.00000 57: # push @characters_from, $_[1] if
|
|
||||||
80000 0.19296 1.00000 58: $characters .= $_[1] if $_[1]
|
|
||||||
0 0.00000 0.00000 59:
|
|
||||||
80000 0.27660 0.97000 60: return;
|
|
||||||
1000 0.00449 0.00000 61: };
|
|
||||||
0 0.00000 0.00000 62:
|
|
||||||
0 0.00000 0.00000 63: # use "globals" for speed
|
|
||||||
1000 0.00162 0.01000 64: my ($_prefix, $_method,
|
|
||||||
0 0.00000 0.00000 65: $_class) = ();
|
|
||||||
0 0.00000 0.00000 66:
|
|
||||||
0 0.00000 0.00000 67: no strict qw(refs);
|
|
||||||
0 0.00000 0.00000 68: $parser->setHandlers(
|
|
||||||
0 0.00000 0.00000 69: Start => sub {
|
|
||||||
0 0.00000 0.00000 70: # my ($parser, $element, %_attrs)
|
|
||||||
0 0.00000 0.00000 71: # $depth = $parser->depth();
|
|
||||||
0 0.00000 0.00000 72:
|
|
||||||
0 0.00000 0.00000 73: # call methods without using
|
|
||||||
0 0.00000 0.00000 74: # That's slightly faster than
|
|
||||||
0 0.00000 0.00000 75: # and we don't have to pass $_[1]
|
|
||||||
0 0.00000 0.00000 76: # Yup, that's dirty.
|
|
||||||
28000 0.03037 0.32000 77: return &{$content_check{ $depth
|
|
||||||
0 0.00000 0.00000 78:
|
|
||||||
26000 0.02735 0.15000 79: push @{ $path }, $_[1]; #
|
|
||||||
26000 0.01366 0.29000 80: return if $skip; #
|
|
||||||
0 0.00000 0.00000 81:
|
|
||||||
0 0.00000 0.00000 82: # resolve class of this element
|
|
||||||
0 0.00000 0.00000 83: $_class = $self->{ class_resolver
|
|
||||||
0 0.00000 0.00000 84: or die "Cannot resolve class
|
|
||||||
26000 0.28196 0.56000 85: . join('/', @{ $path }) .
|
|
||||||
0 0.00000 0.00000 86:
|
|
||||||
26000 0.01695 0.35000 87: if ($_class eq '__SKIP__') {
|
|
||||||
0 0.00000 0.00000 88: $skip = join('/', @{ $path
|
|
||||||
0 0.00000 0.00000 89: $self->setHandlers( Char =>
|
|
||||||
0 0.00000 0.00000 90: return;
|
|
||||||
0 0.00000 0.00000 91: }
|
|
||||||
0 0.00000 0.00000 92:
|
|
||||||
26000 0.02064 0.35000 93: push @$list, $current; # step
|
|
||||||
0 0.00000 0.00000 94:
|
|
||||||
26000 0.02021 0.23000 95: $characters = q(); # empty
|
|
||||||
0 0.00000 0.00000 96: #@characters_from = ();
|
|
||||||
0 0.00000 0.00000 97:
|
|
||||||
0 0.00000 0.00000 98: # Check whether we have a builtin
|
|
||||||
0 0.00000 0.00000 99: # We could replace this with
|
|
||||||
0 0.00000 0.00000 100: # match is a bit faster if the
|
|
||||||
0 0.00000 0.00000 101: # if $class matches...
|
|
||||||
26000 0.01676 0.21000 102: if (index $_class,
|
|
||||||
0 0.00000 0.00000 103: # check wheter there is a
|
|
||||||
0 0.00000 0.00000 104: # or a "new" method
|
|
||||||
0 0.00000 0.00000 105: # If not, require it - all
|
|
||||||
0 0.00000 0.00000 106: # define new()
|
|
||||||
0 0.00000 0.00000 107: # This is not exactly the
|
|
||||||
0 0.00000 0.00000 108: defined *{ "$_class\::new" }{
|
|
||||||
26000 0.07804 0.33000 109: or scalar @{ *{
|
|
||||||
0 0.00000 0.00000 110: or eval "require $_class"
|
|
||||||
0 0.00000 0.00000 111: or die $@;
|
|
||||||
0 0.00000 0.00000 112: }
|
|
||||||
================ SmallProf version 2.02 ================
|
|
||||||
Profile of ../lib/SOAP/WSDL/Expat/MessageParser.pm Page 3
|
|
||||||
=================================================================
|
|
||||||
count wall tm cpu time line
|
|
||||||
0 0.00000 0.00000 113:
|
|
||||||
26000 0.45038 0.81000 114: $current = $_class->new({
|
|
||||||
0 0.00000 0.00000 115:
|
|
||||||
0 0.00000 0.00000 116: # remember top level element
|
|
||||||
0 0.00000 0.00000 117: exists $self->{ data }
|
|
||||||
26000 0.02113 0.22000 118: or ($self->{ data } =
|
|
||||||
26000 0.01267 0.25000 119: $depth++;
|
|
||||||
26000 0.07978 0.40000 120: return;
|
|
||||||
0 0.00000 0.00000 121: },
|
|
||||||
0 0.00000 0.00000 122:
|
|
||||||
0 0.00000 0.00000 123: Char => $char_handler,
|
|
||||||
0 0.00000 0.00000 124:
|
|
||||||
0 0.00000 0.00000 125: End => sub {
|
|
||||||
0 0.00000 0.00000 126:
|
|
||||||
28000 0.01974 0.26000 127: pop @{ $path };
|
|
||||||
0 0.00000 0.00000 128:
|
|
||||||
28000 0.01197 0.18000 129: if ($skip) {
|
|
||||||
0 0.00000 0.00000 130: return if $skip ne join '/',
|
|
||||||
0 0.00000 0.00000 131: $skip = 0;
|
|
||||||
0 0.00000 0.00000 132: $_[0]->setHandler( Char =>
|
|
||||||
0 0.00000 0.00000 133: return;
|
|
||||||
0 0.00000 0.00000 134: }
|
|
||||||
0 0.00000 0.00000 135:
|
|
||||||
28000 0.01687 0.25000 136: $depth--;
|
|
||||||
0 0.00000 0.00000 137:
|
|
||||||
0 0.00000 0.00000 138: # This one easily handles ignores
|
|
||||||
28000 0.10769 0.33000 139: return if not ref $list->[-1];
|
|
||||||
0 0.00000 0.00000 140:
|
|
||||||
0 0.00000 0.00000 141: # set characters in current if we
|
|
||||||
0 0.00000 0.00000 142: # we may have characters in
|
|
||||||
0 0.00000 0.00000 143: # too - maybe we should rely on
|
|
||||||
0 0.00000 0.00000 144: # may get a speedup by defining a
|
|
||||||
0 0.00000 0.00000 145: # and looking it up via exists
|
|
||||||
0 0.00000 0.00000 146:# if ( $current-
|
|
||||||
0 0.00000 0.00000 147:# $current->set_value(
|
|
||||||
0 0.00000 0.00000 148:# }
|
|
||||||
0 0.00000 0.00000 149: # currently doesn't work, as
|
|
||||||
0 0.00000 0.00000 150: # maybe change ?
|
|
||||||
25000 0.21156 0.56000 151: $current->set_value( $characters
|
|
||||||
0 0.00000 0.00000 152: #$current->set_value( join
|
|
||||||
25000 0.08260 0.32000 153: $characters = q{};
|
|
||||||
0 0.00000 0.00000 154:# undef @characters_from;
|
|
||||||
0 0.00000 0.00000 155: # set appropriate attribute in
|
|
||||||
0 0.00000 0.00000 156: # multiple values must be
|
|
||||||
0 0.00000 0.00000 157: #$_method = "add_$_localname";
|
|
||||||
25000 0.01494 0.21000 158: $_method = "add_$_[1]";
|
|
||||||
25000 0.55155 0.86000 159: $list->[-1]->$_method( $current
|
|
||||||
0 0.00000 0.00000 160:
|
|
||||||
25000 0.02121 0.14000 161: $current = pop @$list;
|
|
||||||
25000 0.07002 0.34000 162: return;
|
|
||||||
0 0.00000 0.00000 163: }
|
|
||||||
1000 0.12135 0.08000 164: );
|
|
||||||
1000 0.13602 0.11000 165: return $parser;
|
|
||||||
0 0.00000 0.00000 166:}
|
|
||||||
0 0.00000 0.00000 167:
|
|
||||||
0 0.00000 0.00000 168:sub parse {
|
|
||||||
================ SmallProf version 2.02 ================
|
|
||||||
Profile of ../lib/SOAP/WSDL/Expat/MessageParser.pm Page 4
|
|
||||||
=================================================================
|
|
||||||
count wall tm cpu time line
|
|
||||||
1000 0.00055 0.03000 169: eval {
|
|
||||||
1000 0.07420 0.07000 170: $_[0]->_initialize(
|
|
||||||
0 0.00000 0.00000 171: XML::Parser::Expat->new(
|
|
||||||
0 0.00000 0.00000 172: Namespaces => 1
|
|
||||||
0 0.00000 0.00000 173: )
|
|
||||||
0 0.00000 0.00000 174: )->parse( $_[1] );
|
|
||||||
1000 0.01030 0.02000 175: $_[0]->{ parser }->release();
|
|
||||||
0 0.00000 0.00000 176: };
|
|
||||||
1000 0.00034 0.00000 177: die $@ if $@;
|
|
||||||
1000 2.73620 2.67000 178: return $_[0]->{ data };
|
|
||||||
0 0.00000 0.00000 179:}
|
|
||||||
0 0.00000 0.00000 180:
|
|
||||||
0 0.00000 0.00000 181:sub parsefile {
|
|
||||||
0 0.00000 0.00000 182: eval {
|
|
||||||
0 0.00000 0.00000 183: $_[0]->_initialize(
|
|
||||||
0 0.00000 0.00000 184: $_[0]->{ parser }->release();
|
|
||||||
0 0.00000 0.00000 185: };
|
|
||||||
0 0.00000 0.00000 186: die $@, $_[1] if $@;
|
|
||||||
0 0.00000 0.00000 187: return $_[0]->{ data };
|
|
||||||
0 0.00000 0.00000 188:}
|
|
||||||
0 0.00000 0.00000 189:
|
|
||||||
0 0.00000 0.00000 190:# SAX-like aliases
|
|
||||||
0 0.00000 0.00000 191:sub parse_string;
|
|
||||||
0 0.00000 0.00000 192:*parse_string = \&parse;
|
|
||||||
0 0.00000 0.00000 193:
|
|
||||||
0 0.00000 0.00000 194:sub parse_file;
|
|
||||||
0 0.00000 0.00000 195:*parse_file = \&parsefile;
|
|
||||||
0 0.00000 0.00000 196:
|
|
||||||
0 0.00000 0.00000 197:sub get_data {
|
|
||||||
0 0.00000 0.00000 198: return $_[0]->{ data };
|
|
||||||
0 0.00000 0.00000 199:}
|
|
||||||
0 0.00000 0.00000 200:
|
|
||||||
0 0.00000 0.00000 201:1;
|
|
||||||
0 0.00000 0.00000 202:
|
|
||||||
0 0.00000 0.00000 203:=pod
|
|
||||||
================ SmallProf version 2.02 ================
|
|
||||||
Profile of 01_expat.t Page 5
|
|
||||||
=================================================================
|
|
||||||
count wall tm cpu time line
|
|
||||||
0 0.00000 0.00000 1:#!/usr/bin/perl -w
|
|
||||||
1 0.00003 0.00000 2:%DB::packages=(SOAP::WSDL::Expat::MessagePars
|
|
||||||
0 0.00000 0.00000 3:use strict;
|
|
||||||
0 0.00000 0.00000 4:use warnings;
|
|
||||||
0 0.00000 0.00000 5:use lib '../lib';
|
|
||||||
0 0.00000 0.00000 6:use lib 'lib';
|
|
||||||
0 0.00000 0.00000 7:use lib '../t/lib';
|
|
||||||
0 0.00000 0.00000 8:use SOAP::WSDL::SAX::MessageHandler;
|
|
||||||
0 0.00000 0.00000 9:
|
|
||||||
0 0.00000 0.00000 10:use Benchmark;
|
|
||||||
0 0.00000 0.00000 11:use SOAP::WSDL::Expat::MessageParser;
|
|
||||||
0 0.00000 0.00000 12:use SOAP::WSDL::Expat::Message2Hash;
|
|
||||||
0 0.00000 0.00000 13:use XML::Simple;
|
|
||||||
0 0.00000 0.00000 14:use XML::LibXML;
|
|
||||||
0 0.00000 0.00000 15:use MyComplexType;
|
|
||||||
0 0.00000 0.00000 16:use MyElement;
|
|
||||||
0 0.00000 0.00000 17:use MySimpleType;
|
|
||||||
0 0.00000 0.00000 18:
|
|
||||||
0 0.00000 0.00000 19:my $xml = q{<SOAP-ENV:Envelope
|
|
||||||
0 0.00000 0.00000 20: xmlns:SOAP-
|
|
||||||
0 0.00000 0.00000 21: <SOAP-
|
|
||||||
0 0.00000 0.00000 22: <test>Test</test>
|
|
||||||
0 0.00000 0.00000 23: <test2 >Test2</test2>
|
|
||||||
0 0.00000 0.00000 24: <test2 >Test2</test2>
|
|
||||||
0 0.00000 0.00000 25: <test2 >Test2</test2>
|
|
||||||
0 0.00000 0.00000 26: <test2 >Test2</test2>
|
|
||||||
0 0.00000 0.00000 27: <test2 >Test2</test2>
|
|
||||||
0 0.00000 0.00000 28: <test2 >Test2</test2>
|
|
||||||
0 0.00000 0.00000 29: <test2 >Test2</test2>
|
|
||||||
0 0.00000 0.00000 30: <test2 >Test2</test2>
|
|
||||||
0 0.00000 0.00000 31: <test2 >Test2</test2>
|
|
||||||
0 0.00000 0.00000 32: <test2 >Test2</test2>
|
|
||||||
0 0.00000 0.00000 33: <test2 >Test2</test2>
|
|
||||||
0 0.00000 0.00000 34: <test2 >Test2</test2>
|
|
||||||
0 0.00000 0.00000 35: <test2 >Test2</test2>
|
|
||||||
0 0.00000 0.00000 36: <test>Test</test>
|
|
||||||
0 0.00000 0.00000 37: <test>Test</test>
|
|
||||||
0 0.00000 0.00000 38: <test>Test</test>
|
|
||||||
0 0.00000 0.00000 39: <test>Test</test>
|
|
||||||
0 0.00000 0.00000 40: <test>Test</test>
|
|
||||||
0 0.00000 0.00000 41: <test>Test</test>
|
|
||||||
0 0.00000 0.00000 42: <test>Test</test>
|
|
||||||
0 0.00000 0.00000 43: <test>Test</test>
|
|
||||||
0 0.00000 0.00000 44: <test>Test</test>
|
|
||||||
0 0.00000 0.00000 45: <test>Test</test>
|
|
||||||
0 0.00000 0.00000 46: <test>Test</test>
|
|
||||||
0 0.00000 0.00000 47: </MyAtomicComplexTypeElement>
|
|
||||||
0 0.00000 0.00000 48:</SOAP-ENV:Body></SOAP-ENV:Envelope>};
|
|
||||||
0 0.00000 0.00000 49:
|
|
||||||
0 0.00000 0.00000 50:
|
|
||||||
0 0.00000 0.00000 51:my $parser =
|
|
||||||
0 0.00000 0.00000 52: class_resolver => 'FakeResolver'
|
|
||||||
0 0.00000 0.00000 53:});
|
|
||||||
0 0.00000 0.00000 54:
|
|
||||||
0 0.00000 0.00000 55:my $hash_parser =
|
|
||||||
0 0.00000 0.00000 56:
|
|
||||||
================ SmallProf version 2.02 ================
|
|
||||||
Profile of 01_expat.t Page 6
|
|
||||||
=================================================================
|
|
||||||
count wall tm cpu time line
|
|
||||||
0 0.00000 0.00000 57:$XML::Simple::PREFERRED_PARSER =
|
|
||||||
0 0.00000 0.00000 58:
|
|
||||||
0 0.00000 0.00000 59:my $libxml = XML::LibXML->new();
|
|
||||||
0 0.00000 0.00000 60:my @data;
|
|
||||||
0 0.00000 0.00000 61:timethese 1000,
|
|
||||||
0 0.00000 0.00000 62:{
|
|
||||||
0 0.00000 0.00000 63: # 'Hash (SOAP:WSDL)' => sub { push @data,
|
|
||||||
0 0.00000 0.00000 64: 'SOAP::WSDL' => sub { push @data, $parser-
|
|
||||||
0 0.00000 0.00000 65:# 'XML::Simple (Hash)' => sub { push @data,
|
|
||||||
0 0.00000 0.00000 66:# 'XML::LibXML (DOM)' => sub { push @data,
|
|
||||||
0 0.00000 0.00000 67:};
|
|
||||||
0 0.00000 0.00000 68:
|
|
||||||
0 0.00000 0.00000 69:# use Test::More tests => 1;
|
|
||||||
0 0.00000 0.00000 70:#is $parser->get_data(),
|
|
||||||
0 0.00000 0.00000 71:# . q{<test >Test</test><test2
|
|
||||||
0 0.00000 0.00000 72:# , 'Content comparison';
|
|
||||||
0 0.00000 0.00000 73:
|
|
||||||
0 0.00000 0.00000 74:#$parser->class_resolver( 'FakeResolver2' );
|
|
||||||
0 0.00000 0.00000 75:
|
|
||||||
0 0.00000 0.00000 76:
|
|
||||||
0 0.00000 0.00000 77:# data classes reside in t/lib/Typelib/
|
|
||||||
0 0.00000 0.00000 78:BEGIN {
|
|
||||||
0 0.00000 0.00000 79: package FakeResolver;
|
|
||||||
0 0.00000 0.00000 80: {
|
|
||||||
0 0.00000 0.00000 81: my %class_list = (
|
|
||||||
0 0.00000 0.00000 82: 'MyAtomicComplexTypeElement' =>
|
|
||||||
0 0.00000 0.00000 83: 'MyAtomicComplexTypeElement/test'
|
|
||||||
0 0.00000 0.00000 84:
|
|
||||||
0 0.00000 0.00000 85: );
|
|
||||||
0 0.00000 0.00000 86:
|
|
||||||
0 0.00000 0.00000 87: sub get_map { return \%class_list };
|
|
||||||
0 0.00000 0.00000 88:
|
|
||||||
0 0.00000 0.00000 89: sub new { return bless {},
|
|
||||||
0 0.00000 0.00000 90:
|
|
||||||
0 0.00000 0.00000 91: sub get_class {
|
|
||||||
0 0.00000 0.00000 92: my $name = join('/', @{ $_[1] });
|
|
||||||
0 0.00000 0.00000 93: return ($class_list{ $name }) ?
|
|
||||||
0 0.00000 0.00000 94: : warn "no class found for
|
|
||||||
0 0.00000 0.00000 95: };
|
|
||||||
0 0.00000 0.00000 96: };
|
|
||||||
0 0.00000 0.00000 97:};
|
|
||||||
|
|||||||
+1
-1
@@ -739,7 +739,7 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
|||||||
$Rev: 332 $
|
$Rev: 332 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: WSDL.pm 332 2007-10-19 07:29:03Z kutterma $
|
$Id: WSDL.pm 332 2007-10-19 07:29:03Z kutterma $
|
||||||
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL.pm $
|
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|
||||||
|
|||||||
@@ -368,7 +368,7 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
|||||||
$Rev: 303 $
|
$Rev: 303 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: Client.pm 303 2007-10-01 18:51:50Z kutterma $
|
$Id: Client.pm 303 2007-10-01 18:51:50Z kutterma $
|
||||||
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Client.pm $
|
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Client.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|
||||||
|
|||||||
@@ -120,6 +120,6 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
|||||||
$Rev: 323 $
|
$Rev: 323 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: Base.pm 323 2007-10-17 15:23:05Z kutterma $
|
$Id: Base.pm 323 2007-10-17 15:23:05Z kutterma $
|
||||||
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Client/Base.pm $
|
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Client/Base.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -234,9 +234,9 @@ This module may be used under the same terms as perl itself.
|
|||||||
|
|
||||||
$ID: $
|
$ID: $
|
||||||
|
|
||||||
$LastChangedDate: 2007-10-07 19:27:58 +0200 (So, 07 Okt 2007) $
|
$LastChangedDate: 2007-10-07 19:27:58 +0200 (Son, 07 Okt 2007) $
|
||||||
$LastChangedRevision: 313 $
|
$LastChangedRevision: 313 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
|
|
||||||
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/MessageParser.pm $
|
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/MessageParser.pm $
|
||||||
|
|
||||||
|
|||||||
@@ -68,9 +68,9 @@ This module may be used under the same terms as perl itself.
|
|||||||
|
|
||||||
$ID: $
|
$ID: $
|
||||||
|
|
||||||
$LastChangedDate: 2007-10-07 19:27:58 +0200 (So, 07 Okt 2007) $
|
$LastChangedDate: 2007-10-07 19:27:58 +0200 (Son, 07 Okt 2007) $
|
||||||
$LastChangedRevision: 313 $
|
$LastChangedRevision: 313 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
|
|
||||||
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/MessageStreamParser.pm $
|
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/MessageStreamParser.pm $
|
||||||
|
|
||||||
|
|||||||
@@ -141,6 +141,6 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
|||||||
$Rev: 329 $
|
$Rev: 329 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: Serializer.pm 329 2007-10-18 19:42:09Z kutterma $
|
$Id: Serializer.pm 329 2007-10-18 19:42:09Z kutterma $
|
||||||
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Factory/Serializer.pm $
|
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Factory/Serializer.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -239,6 +239,6 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
|||||||
$Rev: 304 $
|
$Rev: 304 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: Transport.pm 304 2007-10-02 20:07:21Z kutterma $
|
$Id: Transport.pm 304 2007-10-02 20:07:21Z kutterma $
|
||||||
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Factory/Transport.pm $
|
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Factory/Transport.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
|||||||
$Rev: 288 $
|
$Rev: 288 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: HTTP.pm 288 2007-09-29 19:34:20Z kutterma $
|
$Id: HTTP.pm 288 2007-09-29 19:34:20Z kutterma $
|
||||||
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Transport/HTTP.pm $
|
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Transport/HTTP.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|
||||||
|
|||||||
@@ -35,8 +35,8 @@ sub serialize {
|
|||||||
my ($self, $opt) = @_;
|
my ($self, $opt) = @_;
|
||||||
my $ident = ident $self;
|
my $ident = ident $self;
|
||||||
$opt ||= {};
|
$opt ||= {};
|
||||||
my $value = $self->get_value();
|
my $value = $self->get_value();;
|
||||||
return $self->start_tag({ %$opt, nil => 1})
|
return $self->start_tag({ %{ $opt }, nil => 1})
|
||||||
if not defined $value;
|
if not defined $value;
|
||||||
|
|
||||||
# HTML::Entities does the same - and more, thus it's around 1/3 slower...
|
# HTML::Entities does the same - and more, thus it's around 1/3 slower...
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ use Class::Std::Storable;
|
|||||||
|
|
||||||
use base qw(SOAP::WSDL::XSD::Typelib::Builtin::anyType);
|
use base qw(SOAP::WSDL::XSD::Typelib::Builtin::anyType);
|
||||||
|
|
||||||
our $VERSION = '2.00_22';
|
our $VERSION = '2.00_23';
|
||||||
|
|
||||||
my %ELEMENTS_FROM;
|
my %ELEMENTS_FROM;
|
||||||
my %ATTRIBUTES_OF;
|
my %ATTRIBUTES_OF;
|
||||||
@@ -98,10 +98,10 @@ sub _factory {
|
|||||||
*{ "$class\::set_$name" } = sub {
|
*{ "$class\::set_$name" } = sub {
|
||||||
my $is_ref = ref $_[1];
|
my $is_ref = ref $_[1];
|
||||||
$attribute_ref->{ ident $_[0] } = ($is_ref)
|
$attribute_ref->{ ident $_[0] } = ($is_ref)
|
||||||
? $is_ref eq 'ARRAY'
|
? ($is_ref eq 'ARRAY')
|
||||||
? $is_list # remembered from outside closure
|
? $is_list # remembered from outside closure
|
||||||
? $type->new({ value => $_[1] }) # list element - can take list ref as value
|
? $type->new({ value => $_[1] }) # it's a list element - can take list ref as value
|
||||||
: [ map {
|
: [ map { # it's not a list element - set value to list of objects
|
||||||
ref $_
|
ref $_
|
||||||
? ref $_ eq 'HASH'
|
? ref $_ eq 'HASH'
|
||||||
? $type->new($_)
|
? $type->new($_)
|
||||||
@@ -113,9 +113,13 @@ sub _factory {
|
|||||||
]
|
]
|
||||||
: $is_ref eq 'HASH'
|
: $is_ref eq 'HASH'
|
||||||
? $type->new( $_[1] )
|
? $type->new( $_[1] )
|
||||||
: $is_ref eq $type
|
|
||||||
? $_[1]
|
# neither ARRAY nor HASH - probably an object...
|
||||||
|
: ($is_ref eq $type) # of required type ? ->isa would be a better test...
|
||||||
|
? $_[1] # use it
|
||||||
: die croak "cannot use $is_ref reference as value for $name - $type required"
|
: die croak "cannot use $is_ref reference as value for $name - $type required"
|
||||||
|
|
||||||
|
# not $is_ref
|
||||||
: $type->new({ value => $_[1] });
|
: $type->new({ value => $_[1] });
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
@@ -126,14 +130,15 @@ sub _factory {
|
|||||||
if not defined $_[1];
|
if not defined $_[1];
|
||||||
|
|
||||||
# first call
|
# first call
|
||||||
if (not defined $attribute_ref->{ $ident }) {
|
# test for existance, not for definedness
|
||||||
|
if (not exists $attribute_ref->{ $ident }) {
|
||||||
$attribute_ref->{ $ident } = $_[1];
|
$attribute_ref->{ $ident } = $_[1];
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (not ref $attribute_ref->{ $ident } eq 'ARRAY') {
|
if (not ref $attribute_ref->{ $ident } eq 'ARRAY') {
|
||||||
# second call: listify previous value if it's no list
|
# second call: listify previous value if it's no list and add current
|
||||||
$attribute_ref->{ $ident } = [ $attribute_ref->{ $ident } ];
|
$attribute_ref->{ $ident } = [ $attribute_ref->{ $ident }, $_[1] ];
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -142,6 +147,8 @@ sub _factory {
|
|||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# TODO: remove this alias - we don't use it, and it's pretty much
|
||||||
|
# misleading...
|
||||||
*{ "$class\::$name" } = *{ "$class\::add_$name" };
|
*{ "$class\::$name" } = *{ "$class\::add_$name" };
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -381,10 +388,10 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
|||||||
|
|
||||||
=head1 REPOSITORY INFORMATION
|
=head1 REPOSITORY INFORMATION
|
||||||
|
|
||||||
$Rev: 337 $
|
$Rev: 346 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: ComplexType.pm 337 2007-10-22 20:04:59Z kutterma $
|
$Id: ComplexType.pm 346 2007-11-05 21:38:56Z kutterma $
|
||||||
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/XSD/Typelib/ComplexType.pm $
|
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/XSD/Typelib/ComplexType.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
package SOAP::WSDL::XSD::Typelib::Element;
|
package SOAP::WSDL::XSD::Typelib::Element;
|
||||||
use strict;
|
use strict;
|
||||||
|
|
||||||
|
our $VERSION = '2.00_23';
|
||||||
|
|
||||||
my %NAME;
|
my %NAME;
|
||||||
my %NILLABLE;
|
my %NILLABLE;
|
||||||
my %REF;
|
my %REF;
|
||||||
@@ -43,7 +45,7 @@ sub start_tag {
|
|||||||
my @attr_from = ();
|
my @attr_from = ();
|
||||||
|
|
||||||
if ($_[1]->{ nil }) {
|
if ($_[1]->{ nil }) {
|
||||||
return q{} if not $NILLABLE{ ref $_[1] };
|
return q{} if not $NILLABLE{ ref $_[0] };
|
||||||
push @attr_from, 'xsi:nil="true"';
|
push @attr_from, 'xsi:nil="true"';
|
||||||
$ending = '/>';
|
$ending = '/>';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
use Test::More;
|
use Test::More;
|
||||||
use SOAP::Lite;
|
use SOAP::Lite;
|
||||||
eval { require SOAP::Lite } or do {
|
eval { require SOAP::Lite; 1; } or do {
|
||||||
plan skip_all => 'SOAP::Lite not available';
|
plan skip_all => 'SOAP::Lite not available';
|
||||||
exit 0;
|
exit 0;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
use Test::More tests => 30;
|
use Test::More tests => 34;
|
||||||
use File::Basename qw(dirname);
|
use File::Basename qw(dirname);
|
||||||
use File::Spec;
|
use File::Spec;
|
||||||
use File::Path;
|
use File::Path;
|
||||||
@@ -118,4 +118,15 @@ is $complexExtension->get_Test2(), 'test2';
|
|||||||
is $complexExtension->get_Test3(), 'test3';
|
is $complexExtension->get_Test3(), 'test3';
|
||||||
|
|
||||||
|
|
||||||
|
ok eval { require MyTypes::testComplexTypeElementAtomicSimpleType; };
|
||||||
|
my $ct_east = MyTypes::testComplexTypeElementAtomicSimpleType->new({
|
||||||
|
testString => 'Just some test',
|
||||||
|
testAtomicSimpleTypeElement => 42,
|
||||||
|
});
|
||||||
|
|
||||||
|
is $ct_east->get_testAtomicSimpleTypeElement, 42;
|
||||||
|
is $ct_east->get_testAtomicSimpleTypeElement->get_value(), 42;
|
||||||
|
isa_ok($ct_east->get_testAtomicSimpleTypeElement,
|
||||||
|
'MyTypes::testComplexTypeElementAtomicSimpleType::_testAtomicSimpleTypeElement');
|
||||||
|
|
||||||
rmtree "$path/testlib";
|
rmtree "$path/testlib";
|
||||||
|
|||||||
@@ -170,6 +170,22 @@
|
|||||||
<xsd:element name="Header" type="tns:testComplexTypeSequence"/>
|
<xsd:element name="Header" type="tns:testComplexTypeSequence"/>
|
||||||
<xsd:element name="testHeader" type="tns:testComplexTypeSequence"/>
|
<xsd:element name="testHeader" type="tns:testComplexTypeSequence"/>
|
||||||
<xsd:element name="testChoice" type="tns:testComplexTypeChoice"/>
|
<xsd:element name="testChoice" type="tns:testComplexTypeChoice"/>
|
||||||
|
|
||||||
|
|
||||||
|
<xsd:complexType name="testComplexTypeElementAtomicSimpleType">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="testString" type="xsd:string" minOccurs="0"/>
|
||||||
|
<xsd:element name="testAtomicSimpleTypeElement" minOccurs="0">
|
||||||
|
<xsd:simpleType>
|
||||||
|
<xsd:restriction base="xsd:decimal">
|
||||||
|
<xsd:minInclusive value="0"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
|
||||||
|
|
||||||
</xsd:schema>
|
</xsd:schema>
|
||||||
</types>
|
</types>
|
||||||
<message name="testChoice">
|
<message name="testChoice">
|
||||||
|
|||||||
Reference in New Issue
Block a user