1[% RETURN IF NOT item; 2 type = definitions.find_portType( binding.expand( binding.get_type ) ); 3 port_op = type.find_operation( type.get_targetNamespace, operation.get_name ); 4 message = definitions.find_message( port_op.first_input.expand( port_op.first_input.get_message ) ); 5 part_from = message.get_part; 6 PERL %] 7 my $item = $stash->{ item }; 8 my $def = $stash->{ definitions }; 9 my $part_from = $stash->{ message }->get_part(); 10 11 my @body_part_from = split m{\s}, $item->get_parts; 12 13 my @parts; 14 if (@body_part_from) { 15 @parts = map { 16 my $part = $_; 17 (grep { 18 # my ($ns, $lname) = $def->expand( $_ ); 19 ($_ eq $part->get_name) 20 } @body_part_from 21 ) 22 ? do { 23 my $name; 24 ($name = $part->get_element) 25 ? do { 26 my $element = $def->first_types->find_element($part->expand($name)); 27 my $resolver = $context->plugin('XSD'); 28 $resolver->create_xsd_name($element); 29 30 } 31 : ($name = $part->get_type) 32 ? do { 33 my $element = $def->first_types->find_type($part->expand($name)); 34 my $resolver = $context->plugin('XSD'); 35 $resolver->create_xsd_name($element); 36 } 37 : die "input must have either type or element" 38 } 39 : () 40 } @{ $part_from }; 41 } 42 else { 43 @parts = map { 44 my $part = $_; 45 my $name; 46 ($name = $part->get_element) 47 ? do { 48 my $element = $def->first_types->find_element($part->expand($name)); 49 my $resolver = $context->plugin('XSD'); 50 $resolver->create_xsd_name($element); 51 } 52 : ($name = $part->get_type) 53 ? do { 54 my $element = $def->first_types->find_type($part->expand($name)); 55 my $resolver = $context->plugin('XSD'); 56 $resolver->create_xsd_name($element); 57 } 58 : die "input must have either type or element"; 59 } @{ $part_from }; 60 } 61 62 warn "Multiple parts detected in message " . $stash->{ message }->get_name() . ".\n", 63 "WS-I BP demands 0 to 1 parts in message body\n" 64 if (@parts > 1); 65 66 $stash->{ parts } = \@parts; 67 68[% END %] 69[% IF item.get_use != 'literal'; 70 THROW NOT_SUPPORTED "Body: SOAP::WSDL supports literal encoding only - ${ item.get_use } found"; 71END %] 72 'use' => '[% item.get_use %]', 73 namespace => '[% item.get_namespace %]', 74 encodingStyle => '[% item.get_encodingStyle %]', 75 parts => [qw( [% parts.join(' ') %] )],