| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
# Copyrights 2009-2013 by [Mark Overmeer]. |
|
2
|
|
|
|
|
|
|
# For other contributors see ChangeLog. |
|
3
|
|
|
|
|
|
|
# See the manual pages for details on the licensing terms. |
|
4
|
|
|
|
|
|
|
# Pod stripped from pm file by OODoc 2.01. |
|
5
|
4
|
|
|
4
|
|
208692
|
use warnings; |
|
|
4
|
|
|
|
|
8
|
|
|
|
4
|
|
|
|
|
116
|
|
|
6
|
4
|
|
|
4
|
|
19
|
use strict; |
|
|
4
|
|
|
|
|
9
|
|
|
|
4
|
|
|
|
|
137
|
|
|
7
|
|
|
|
|
|
|
|
|
8
|
|
|
|
|
|
|
package XML::Compile::RPC; |
|
9
|
4
|
|
|
4
|
|
28
|
use vars '$VERSION'; |
|
|
4
|
|
|
|
|
7
|
|
|
|
4
|
|
|
|
|
180
|
|
|
10
|
|
|
|
|
|
|
$VERSION = '0.17'; |
|
11
|
|
|
|
|
|
|
|
|
12
|
4
|
|
|
4
|
|
22
|
use base 'XML::Compile::Cache'; |
|
|
4
|
|
|
|
|
6
|
|
|
|
4
|
|
|
|
|
15036
|
|
|
13
|
|
|
|
|
|
|
|
|
14
|
|
|
|
|
|
|
use Log::Report 'xml-compile-rpc', syntax => 'SHORT'; |
|
15
|
|
|
|
|
|
|
|
|
16
|
|
|
|
|
|
|
|
|
17
|
|
|
|
|
|
|
sub init($) |
|
18
|
|
|
|
|
|
|
{ my ($self, $args) = @_; |
|
19
|
|
|
|
|
|
|
|
|
20
|
|
|
|
|
|
|
push @{$args->{opts_rw}}, sloppy_floats => 1, sloppy_integers => 1 |
|
21
|
|
|
|
|
|
|
, mixed_elements => 'STRUCTURAL'; |
|
22
|
|
|
|
|
|
|
|
|
23
|
|
|
|
|
|
|
push @{$args->{opts_readers}} |
|
24
|
|
|
|
|
|
|
, hooks => [ {type => 'ValueType', replace => \&_rewrite_string} |
|
25
|
|
|
|
|
|
|
, {type => 'ISO8601', replace => \&_reader_rewrite_date} ]; |
|
26
|
|
|
|
|
|
|
|
|
27
|
|
|
|
|
|
|
push @{$args->{opts_writers}} |
|
28
|
|
|
|
|
|
|
, hook => {type => 'ISO8601', before => \&_writer_rewrite_date}; |
|
29
|
|
|
|
|
|
|
|
|
30
|
|
|
|
|
|
|
$self->SUPER::init($args); |
|
31
|
|
|
|
|
|
|
|
|
32
|
|
|
|
|
|
|
(my $xsd = __FILE__) =~ s,\.pm$,/xml-rpc.xsd,; |
|
33
|
|
|
|
|
|
|
$self->importDefinitions($xsd); |
|
34
|
|
|
|
|
|
|
|
|
35
|
|
|
|
|
|
|
# only declared methods are accepted by the Cache |
|
36
|
|
|
|
|
|
|
$self->declare(WRITER => 'methodCall'); |
|
37
|
|
|
|
|
|
|
$self->declare(READER => 'methodResponse'); |
|
38
|
|
|
|
|
|
|
$self; |
|
39
|
|
|
|
|
|
|
} |
|
40
|
|
|
|
|
|
|
|
|
41
|
|
|
|
|
|
|
sub _rewrite_string($$$$$) |
|
42
|
|
|
|
|
|
|
{ my ($element, $reader, $path, $type, $replaced) = @_; |
|
43
|
|
|
|
|
|
|
# panic $element->childNodes; |
|
44
|
|
|
|
|
|
|
|
|
45
|
|
|
|
|
|
|
(grep $_->isa('XML::LibXML::Element'), $element->childNodes) |
|
46
|
|
|
|
|
|
|
? $replaced->($element) |
|
47
|
|
|
|
|
|
|
: (value => {string => $element->textContent}); |
|
48
|
|
|
|
|
|
|
} |
|
49
|
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
|
# xsd:dateTime requires - and : between the components |
|
51
|
|
|
|
|
|
|
sub _iso8601_to_dateTime($) |
|
52
|
|
|
|
|
|
|
{ my $s = shift; |
|
53
|
|
|
|
|
|
|
$s =~ s/^([12][0-9][0-9][0-9])-?([01][0-9])-?([0-3][0-9])T/$1-$2-$3T/; |
|
54
|
|
|
|
|
|
|
$s =~ s/T([012][0-9]):?([0-5][0-9]):?([0-6][0-9])/T$1:$2:$3/; |
|
55
|
|
|
|
|
|
|
$s; |
|
56
|
|
|
|
|
|
|
} |
|
57
|
|
|
|
|
|
|
|
|
58
|
|
|
|
|
|
|
sub _writer_rewrite_date |
|
59
|
|
|
|
|
|
|
{ my ($doc, $string, $path) = @_; |
|
60
|
|
|
|
|
|
|
_iso8601_to_dateTime $string; |
|
61
|
|
|
|
|
|
|
} |
|
62
|
|
|
|
|
|
|
|
|
63
|
|
|
|
|
|
|
sub _reader_rewrite_date |
|
64
|
|
|
|
|
|
|
{ my ($element, $reader, $path, $type, $replaced) = @_; |
|
65
|
|
|
|
|
|
|
my $schema_time = _iso8601_to_dateTime $element->textContent; |
|
66
|
|
|
|
|
|
|
# $schema_time should get validated... |
|
67
|
|
|
|
|
|
|
('dateTime.iso8601' => $schema_time); |
|
68
|
|
|
|
|
|
|
} |
|
69
|
|
|
|
|
|
|
|
|
70
|
|
|
|
|
|
|
1; |