SOAP-WSDL - Re: mucking with namespaces

Posted on Mon Apr 21 23:39:20 2008 by mkutter in response to 7714 (See the whole thread of 3)
Re: mucking with namespaces
The latter actually means this:
<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://sch +emas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <getElement xmlns="http://services.company.com/"> <elementId xmlns="">12345</elementId> </getElement> </SOAP-ENV:Body> </SOAP-ENV:Envelope>

Note the xmlns="" on elementId. Do you mean
<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="http://services +.company.com/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <ns2:getElement> <ns2:elementId>12345</ns2:elementId> </ns2:getElement> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
(note the "ns2:" prefix on elementId)?

The following steps are neccessary to achieve this result:
First, you would need to write a new serializer, which is quite easy, as it just creates the envelope and calls ->serialize_qualified() on $header and $body to fill them in. The new serializer has to declare all namespace prefixes used, the rest is just the same as the original one. Second, you'd need to overwrite the start_tag method in SOAP::WSDL::XSD::Typelib::Element to use the appropriate prefixes for the body elements.

In contrast to the original method, it would probably look up the appropriate prefix from some data set in the serializer class, so this could be the appropriate place to load SOAP::WSDL::XSD::Typelib::Element and override the method.

Something like this should do (without the handling of specialties like empty or nil elements):
%PREFIX_OF = { 'http://services.company.com/' => 'ns2' }; *SOAP::WSDL::XSD::Typelib::Element::start_tag = sub { # use prefix instead of xmlns attribute and copy the rest from # SOAP::WSDL::XSD::Typelib::Element::start_tag my $prefix = $PREFIX_OF{ $_[0]->get_xmlns() }; my $name = $_[1]->{ name } || $self->__get_name(); return "<$prefix:$name>"; }

Martin
Direct Responses: 7717 | Write a response