Hello, I'm trying to use XML::Compile with http://platform.mediamind.com/Eyeblaster.MediaMind.API.Doc/, and for most things it's working wonderfully.
However, there's on piece of the API that I'm not able to get to work and I can't figure out why. (I apologize for the long email...) In the Advertisers service (https://platform.mediamind.com/Eyeblaster.MediaMind.API/AdvertiserService.svc?wsdl), there is a GetAdvertisers call (http://platform.mediamind.com/Eyeblaster.MediaMind.API.Doc/Default.aspx?page=Operation.aspx%3Fv%3D1%26OperationID%3D-1964927588). This call takes an AdvertisersFilter argument which is an array of AdvertiserServiceFilter. AdvertiserServiceFilter can be made up of a bunch of different derived types - AdvertiserHasConversionsFilter, AdvertiserIDFilter, AdvertiserNameFilter, etc... No matter how I try though, I can't seem to pass these down. I discovered the explain() call, which helped a little, but that call doesn't seem to be aware of the derived types. I also couldn't get explain() to work without some messing around. For example: #!/usr/bin/env perl use strict; use warnings; use LWP::UserAgent; use XML::Compile::WSDL11; use XML::Compile::SOAP11; use XML::Compile::Transport::SOAPHTTP; use File::Temp qw(tempfile); my $wsdl_url = 'https://platform.mediamind.com/Eyeblaster.MediaMind.API/AdvertiserService.svc?wsdl'; # Grab wsdl, compile it my (undef, $file) = tempfile(); $file .= ".wsdl1"; my $lwp = LWP::UserAgent->new; my $res = $lwp->mirror($wsdl_url, $file); die "Mirroring failed: " . $res->status_line unless $res->is_success; my $wsdl = XML::Compile::WSDL11->new($file); $wsdl->compileCalls; print $wsdl->explain('GetAdvertisers', PERL => 'INPUT', recurse => 1); If I run that, I get: $ perl exp.pl error: no prefix known for namespace `http://api.eyeblaster.com/message', use addPrefixes() If I add a bogus prefix, it seems to work. ($wsdl->addNicePrefix('bah', 'http://api.eyeblaster.com/message');) $ perl exp.pl [...] # Describing complex bah:GetAdvertisersRequest # {http://api.eyeblaster.com/message}GetAdvertisersRequest # xmlns:bah http://api.eyeblaster.com/message # xmlns:q5 http://api.eyeblaster.com/V1/DataContracts # xmlns:xs http://www.w3.org/2001/XMLSchema # is an unnamed complex { # sequence of AdvertisersFilter, Paging, ShowAdvertiserExtendedInfo # is a q5:ArrayOfAdvertiserServiceFilter # is nillable, as: AdvertisersFilter => NIL # is optional AdvertisersFilter => { # sequence of AdvertiserServiceFilter # is a q5:AdvertiserServiceFilter # is nillable, as: AdvertiserServiceFilter => NIL # occurs any number of times AdvertiserServiceFilter => [{},], }, # is a bah:ListPaging # is nillable, as: Paging => NIL # is optional Paging => { # sequence of PageIndex, PageSize # is a xs:int PageIndex => 42, # is a xs:int PageSize => 42, }, # is a xs:boolean # is optional ShowAdvertiserExtendedInfo => "true", } ; So that helped a little. I can see that I need: AdvertisersFilter => { AdvertiserServiceFilter => [ { } ], }, However, I don't know what to put in AdvertiserServiceFilter. This *should* be any one of AdvertiserHasConversionsFilter, AdvertiserIDFilter, AdvertiserNameFilter I would think, but the explain output seems to stop at AdvertiserServiceFilter => [{},] as if it doesn't know what an AdvertiserServiceFilter is. I've tried: AdvertisersFilter => { AdvertiserServiceFilter => [ { AdvertiserNameFilter => { AdvertiserName => "..." } } ] } And AdvertisersFilter => { AdvertiserServiceFilter => [ { AdvertiserName => "..." } ] } But I always get back an error like: "mistake: tag `AdvertiserNameFilter' not used at {http://api.eyeblaster.com/message}GetAdvertisersRequest/AdvertisersFilter/AdvertiserServiceFilter" Any help would be appreciated. Sadly, this API needs login credentials that I don't think I can provide for testing. -- Matthew Horsfall (alh) _______________________________________________ Xml-compile mailing list Xml-compile@lists.scsys.co.uk http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/xml-compile