The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
[%  RETURN IF NOT item; RETURN IF NOT item.0;
    message_name = item.0.get_message;

    IF NOT message_name;
        THROW BAD_WSDL "missing <message> attribute in header for operation ${operation.get_name}";
    END;
    message = definitions.find_message( item.0.expand( message_name ) ); PERL %]

    # ToDo: support multiple messages

    my $message        = $stash->{ message };
    my $item           = $stash->{ item };
    my $def            = $stash->{ definitions };
    my $type_prefix    = $stash->{ type_prefix };
    my $element_prefix = $stash->{ element_prefix };
    #my ($ns, $lname) = $def->expand( $item->get_part() );

    # find matching message parts
    my %part_of = map { $_->get_part() => undef;  } @{$item};
    my @parts   = grep {
        exists $part_of{$_->get_name()};
    } @{ $message->get_part( ) };

    my $part_class = join q{ }, map {
            my $part = $_;
            my $name;
            ( $name = $part->get_element() )
                ? do {
                        my $element = $def->first_types->find_element($part->expand($name));
                        my $resolver = $context->plugin('XSD');
                        $resolver->create_xsd_name($element);
                  }
                : ( $name = $part->get_type() )
                    ? do {
                          my $element = $def->first_types->find_type($part->expand($name));
                          my $resolver = $context->plugin('XSD');
                          $resolver->create_xsd_name($element);
                      }
                    : die "input must have either type or element"
        } @parts;
    $stash->{ part_class } = $part_class;
    [% END; IF item.0.get_use != 'literal';
                THROW NOT_SUPPORTED "Header: SOAP::WSDL supports literal encoding only - ${ item.get_use } found";
       END; %]
           'use' => '[% item.0.get_use %]',
            namespace => '[% item.0.get_namespace %]',
            encodingStyle => '[% item.0.get_encodingStyle %]',
            parts => [qw( [% part_class %] )],