On Thu, Sep 10, 2015 at 8:17 AM, Mark Overmeer <[email protected]> wrote: > * Matthew Horsfall (alh) ([email protected]) [150910 11:45]: >> On Wed, Sep 9, 2015 at 4:14 PM, Mark Overmeer <[email protected]> wrote: >> > If they had used that, as they intended to when I see the detail of the >> > rest of the spec, then your life would be very easy. However, according >> > to the current wsdl you can only use AdvertiserServerFilter elements at >> > that spot... not what you wish for. >> >> Ugh, wonderful. > > Too late last night, I thought that there is an other option: your > schema may use the awful xsi:type. Is that the case? Do you have > an example message somewhere?
A sample request message? No, only what XML::Compile is generating for me. Here's a sample response: <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Body> <GetAdvertisersResponse xmlns="http://api.eyeblaster.com/message"> <Advertisers xmlns:a="http://api.eyeblaster.com/V1/DataContracts" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <a:AdvertiserInfo> <a:ID>134418</a:ID> <a:AdvertiserExtendedInfo i:nil="true"/> <a:AdvertiserName>test $$</a:AdvertiserName> <a:IsGlobalAdvertiser>false</a:IsGlobalAdvertiser> <a:Vertical>Other</a:Vertical> </a:AdvertiserInfo> <a:AdvertiserInfo> <a:ID>134420</a:ID> <a:AdvertiserExtendedInfo i:nil="true"/> <a:AdvertiserName>test 32638</a:AdvertiserName> <a:IsGlobalAdvertiser>false</a:IsGlobalAdvertiser> <a:Vertical>Other</a:Vertical> </a:AdvertiserInfo> <a:AdvertiserInfo> <a:ID>134426</a:ID> <a:AdvertiserExtendedInfo i:nil="true"/> <a:AdvertiserName>The test advertiser 20429</a:AdvertiserName> <a:IsGlobalAdvertiser>false</a:IsGlobalAdvertiser> <a:Vertical>Other</a:Vertical> </a:AdvertiserInfo> <a:AdvertiserInfo> <a:ID>134427</a:ID> <a:AdvertiserExtendedInfo i:nil="true"/> <a:AdvertiserName>The test advertiser 20520</a:AdvertiserName> <a:IsGlobalAdvertiser>false</a:IsGlobalAdvertiser> <a:Vertical>Other</a:Vertical> </a:AdvertiserInfo> <a:AdvertiserInfo> <a:ID>134428</a:ID> <a:AdvertiserExtendedInfo i:nil="true"/> <a:AdvertiserName>The test advertiser 20586</a:AdvertiserName> <a:IsGlobalAdvertiser>false</a:IsGlobalAdvertiser> <a:Vertical>Other</a:Vertical> </a:AdvertiserInfo> </Advertisers> <TotalCount>5</TotalCount> </GetAdvertisersResponse> </s:Body> </s:Envelope> >> error: cannot find element or attribute >> `{http://api.eyeblaster.com/}AdvertiserNameFilter' at >> tns:AdvertiserNameFilter > > Well, there is no element in the WSDL with that name, only a type. So, > the complaint is correct. > > If your messages use xsi:type, then read section "Handling xsi:type" > in XML::Compile::Schema. Probably you then need > $wsdl->addXsiType('data:AdvertiserServiceFilter' => 'AUTO'); > >> Also, is the error I was getting in my first email when using >> ->explain() a bug in XML::Compile or something wrong with the WSDL? >> >> (error: no prefix known for namespace >> `http://api.eyeblaster.com/message', use addPrefixes()) > > The schema included in the WSDL defines elements and types in the > targetNamespace http://api.eyeblaster.com/message However, these > elements apparently never refer to other elements in the namespace: > there is no xmlns which assigns a prefix to that URI. The example > generator explain() really likes to show prefixes. > > The best way to start a project, is to add this to your script > my $wsdl = XML::Compile::WSDL11->new($wsdl, prefixes => \%prefixes); > where you manually assign your own prefixes to the namespaces used. > If you don't, the prefix names used in the schema are used... which > may change over generations of the schema (they are often generated) > > my %prefixes = > ( msg => 'http://api.eyeblaster.com/message' > , data => 'http://api.eyeblaster.com/V1/DataContracts' > , ...more?... > ); > > -- > I hope this helps, It does. It looks like modifying the WSDL before loading to add the substituionGroups is the way to go, as horrible as that feels. I'll see if I can get the vendor to update their WSDLs... Thanks so much! -- Matthew Horsfall (alh) _______________________________________________ Xml-compile mailing list [email protected] http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/xml-compile
