diff options
-rw-r--r-- | .gitignore | 6 | ||||
-rw-r--r-- | Changes | 5 | ||||
-rw-r--r-- | MANIFEST | 18 | ||||
-rw-r--r-- | MYMETA.json | 47 | ||||
-rw-r--r-- | Makefile.PL | 37 | ||||
-rw-r--r-- | README | 77 | ||||
-rw-r--r-- | debian/changelog | 5 | ||||
-rw-r--r-- | debian/compat | 1 | ||||
-rw-r--r-- | debian/control | 27 | ||||
-rw-r--r-- | debian/copyright | 46 | ||||
-rwxr-xr-x | debian/rules | 4 | ||||
-rw-r--r-- | debian/source/format | 1 | ||||
-rw-r--r-- | debian/watch | 2 | ||||
-rw-r--r-- | ignore.txt | 20 | ||||
-rwxr-xr-x | lib/WebService/Northern911.pm | 221 | ||||
-rw-r--r-- | lib/WebService/Northern911/Response.pm | 88 | ||||
-rw-r--r-- | share/schema/live/wsdl | 1 | ||||
-rw-r--r-- | share/schema/live/xsd0 | 1 | ||||
-rw-r--r-- | share/schema/live/xsd1 | 1 | ||||
-rw-r--r-- | share/schema/live/xsd2 | 1 | ||||
-rw-r--r-- | share/schema/test/wsdl | 1 | ||||
-rw-r--r-- | share/schema/test/xsd0 | 1 | ||||
-rw-r--r-- | share/schema/test/xsd1 | 1 | ||||
-rw-r--r-- | share/schema/test/xsd2 | 1 | ||||
-rw-r--r-- | t/00-load.t | 13 | ||||
-rw-r--r-- | t/manifest.t | 15 | ||||
-rw-r--r-- | t/pod.t | 12 |
27 files changed, 653 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9788afa --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +blib/ +*.sw? +Makefile +Makefile.old +MYMETA.yml +pm_to_blib @@ -0,0 +1,5 @@ +Revision history for WebService-Northern911 + +0.01 Jul 7 2014 + Initial release + diff --git a/MANIFEST b/MANIFEST new file mode 100644 index 0000000..8dedd9d --- /dev/null +++ b/MANIFEST @@ -0,0 +1,18 @@ +Changes +lib/WebService/Northern911.pm +lib/WebService/Northern911/Response.pm +Makefile.PL +MANIFEST This list of files +README +t/00-load.t +t/manifest.t +t/pod.t +share/schema/test/xsd2 +share/schema/test/wsdl +share/schema/test/xsd0 +share/schema/test/xsd1 +share/schema/live/xsd2 +share/schema/live/wsdl +share/schema/live/xsd0 +share/schema/live/xsd1 +ignore.txt diff --git a/MYMETA.json b/MYMETA.json new file mode 100644 index 0000000..0e95f50 --- /dev/null +++ b/MYMETA.json @@ -0,0 +1,47 @@ +{ + "abstract" : "Interface to the Northern 911 ALI database", + "author" : [ + "Mark Wells <mark@freeside.biz>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.8, CPAN::Meta::Converter version 2.120351", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "WebService-Northern911", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "File::ShareDir::Install" : "0", + "Test::More" : "0" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "0" + } + }, + "runtime" : { + "requires" : { + "DateTime" : "0", + "File::ShareDir" : "0", + "XML::Compile" : "1", + "XML::Compile::SOAP" : "3", + "XML::Compile::WSDL11" : "3", + "perl" : "5.006" + } + } + }, + "release_status" : "stable", + "version" : "0.1" +} diff --git a/Makefile.PL b/Makefile.PL new file mode 100644 index 0000000..ebd2c26 --- /dev/null +++ b/Makefile.PL @@ -0,0 +1,37 @@ +use 5.006; +use strict; +use warnings FATAL => 'all'; +use ExtUtils::MakeMaker; +use File::ShareDir::Install; + +install_share dist => 'share'; + +WriteMakefile( + NAME => 'WebService::Northern911', + AUTHOR => q{Mark Wells <mark@freeside.biz>}, + VERSION_FROM => 'lib/WebService/Northern911.pm', + ABSTRACT_FROM => 'lib/WebService/Northern911.pm', + LICENSE => 'Artistic_2_0', + PL_FILES => {}, + MIN_PERL_VERSION => 5.006, + CONFIGURE_REQUIRES => { + 'ExtUtils::MakeMaker' => 0, + }, + BUILD_REQUIRES => { + 'Test::More' => 0, + 'File::ShareDir::Install' => 0, + }, + PREREQ_PM => { + 'XML::Compile' => 1.0, + 'XML::Compile::SOAP' => 3.0, + 'XML::Compile::WSDL11'=> 3.0, + 'File::ShareDir' => 0, + 'DateTime' => 0, + }, + dist => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', }, + clean => { FILES => 'WebService-Northern911-*' }, +); + +package MY; +use File::ShareDir::Install qw(postamble); + @@ -0,0 +1,77 @@ +WebService-Northern911 + +Interface to Northern 911's ALI database. + +Requires XML::Compile::WSDL11 and XML::Compile::SOAP. + +INSTALLATION + +To install this module, run the following commands: + + perl Makefile.PL + make + make test + make install + +SUPPORT AND DOCUMENTATION + +After installing, you can find documentation for this module with the +perldoc command. + + perldoc WebService::Northern911 + +You can also look for information at: + + RT, CPAN's request tracker (report bugs here) + http://rt.cpan.org/NoAuth/Bugs.html?Dist=WebService-Northern911 + + AnnoCPAN, Annotated CPAN documentation + http://annocpan.org/dist/WebService-Northern911 + + CPAN Ratings + http://cpanratings.perl.org/d/WebService-Northern911 + + Search CPAN + http://search.cpan.org/dist/WebService-Northern911/ + + +LICENSE AND COPYRIGHT + +Copyright (C) 2014 Mark Wells + +This program is free software; you can redistribute it and/or modify it +under the terms of the the Artistic License (2.0). You may obtain a +copy of the full license at: + +L<http://www.perlfoundation.org/artistic_license_2_0> + +Any use, modification, and distribution of the Standard or Modified +Versions is governed by this Artistic License. By using, modifying or +distributing the Package, you accept this license. Do not use, modify, +or distribute the Package, if you do not accept this license. + +If your Modified Version has been derived from a Modified Version made +by someone other than you, you are nevertheless required to ensure that +your Modified Version complies with the requirements of this license. + +This license does not grant you the right to use any trademark, service +mark, tradename, or logo of the Copyright Holder. + +This license includes the non-exclusive, worldwide, free-of-charge +patent license to make, have made, use, offer to sell, sell, import and +otherwise transfer the Package with respect to any patent claims +licensable by the Copyright Holder that are necessarily infringed by the +Package. If you institute patent litigation (including a cross-claim or +counterclaim) against any party alleging that the Package constitutes +direct or contributory patent infringement, then this Artistic License +to you shall terminate on the date that such litigation is filed. + +Disclaimer of Warranty: THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER +AND CONTRIBUTORS "AS IS' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. +THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE, OR NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY +YOUR LOCAL LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR +CONTRIBUTOR WILL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR +CONSEQUENTIAL DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..250bb65 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,5 @@ +libwebservice-northern911-perl (0.1-1) unstable; urgency=low + + * Initial Release. + + -- Mark Wells <mark@dancingmad.dyndns.org> Sun, 6 Jul 2014 20:25:33 -0700 diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..ec63514 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +9 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..8e593d2 --- /dev/null +++ b/debian/control @@ -0,0 +1,27 @@ +Source: libwebservice-northern911-perl +Section: perl +Priority: optional +Maintainer: Mark Wells <mark@dancingmad.dyndns.org> +Build-Depends: debhelper (>= 9) +Build-Depends-Indep: libdatetime-perl, + libfile-sharedir-install-perl, + libfile-sharedir-perl, + libxml-compile-perl (>= 1), + libxml-compile-soap-perl (>= 3), + libxml-compile-wsdl11-perl (>= 3), + perl +Standards-Version: 3.9.5 +Homepage: https://metacpan.org/release/WebService-Northern911 + +Package: libwebservice-northern911-perl +Architecture: all +Depends: ${misc:Depends}, ${perl:Depends}, + libdatetime-perl, + libfile-sharedir-perl, + libxml-compile-perl (>= 1), + libxml-compile-soap-perl (>= 3), + libxml-compile-wsdl11-perl (>= 3) +Description: Interface to the Northern 911 ALI database + (no description was found) + . + This description was automagically extracted from the module by dh-make-perl. diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..fbdc7ae --- /dev/null +++ b/debian/copyright @@ -0,0 +1,46 @@ +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Source: https://metacpan.org/release/WebService-Northern911 +Upstream-Contact: Mark Wells, <mark@freeside.biz> + . + Commercial support is available from Freeside Internet Services, Inc. +Upstream-Name: WebService-Northern911 +DISCLAIMER: This copyright info was automatically extracted + from the perl module. It may not be accurate, so you better + check the module sources in order to ensure the module for its + inclusion in Debian or for general legal information. Please, + if licensing information is incorrectly generated, file a bug + on dh-make-perl. + NOTE: Don't forget to remove this disclaimer once you are happy + with this file. + +Files: * +Copyright: Mark Wells, <mark@freeside.biz> + . + Commercial support is available from Freeside Internet Services, Inc. +License: unparsable + +Files: debian/* +Copyright: 2014, Mark Wells <mark@dancingmad.dyndns.org> +License: Artistic or GPL-1+ or unparsable + +License: Artistic + This program is free software; you can redistribute it and/or modify + it under the terms of the Artistic License, which comes with Perl. + . + On Debian systems, the complete text of the Artistic License can be + found in `/usr/share/common-licenses/Artistic'. + +License: GPL-1+ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + . + On Debian systems, the complete text of version 1 of the GNU General + Public License can be found in `/usr/share/common-licenses/GPL-1'. + +License: unparsable + No known license could be automatically determined for this module. + If this module conforms to a commonly used license, please report this + as a bug in dh-make-perl. In any case, please find the proper license + and fix this file! diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..2d33f6a --- /dev/null +++ b/debian/rules @@ -0,0 +1,4 @@ +#!/usr/bin/make -f + +%: + dh $@ diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 0000000..163aaf8 --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/debian/watch b/debian/watch new file mode 100644 index 0000000..a3df09c --- /dev/null +++ b/debian/watch @@ -0,0 +1,2 @@ +version=3 +https://metacpan.org/release/WebService-Northern911 .*/WebService-Northern911-v?(\d[\d.-]*)\.(?:tar(?:\.gz|\.bz2)?|tgz|zip)$ diff --git a/ignore.txt b/ignore.txt new file mode 100644 index 0000000..1a2d807 --- /dev/null +++ b/ignore.txt @@ -0,0 +1,20 @@ +Makefile +Makefile.old +Build +Build.bat +META.* +MYMETA.* +.build/ +_build/ +cover_db/ +blib/ +inc/ +.lwpcookies +.last_cover_stats +nytprof.out +pod2htm*.tmp +pm_to_blib +WebService-Northern911-* +WebService-Northern911-*.tar.gz +.gitignore +.git/* diff --git a/lib/WebService/Northern911.pm b/lib/WebService/Northern911.pm new file mode 100755 index 0000000..bab7e89 --- /dev/null +++ b/lib/WebService/Northern911.pm @@ -0,0 +1,221 @@ +package WebService::Northern911; + +use Digest::MD5 'md5_hex'; +use DateTime; +use XML::Compile::WSDL11; +use XML::Compile::SOAP11; +use XML::Compile::Transport::SOAPHTTP; +use File::ShareDir 'dist_dir'; + +use WebService::Northern911::Response; + +our $VERSION = 0.1; + +=head1 NAME + +WebService::Northern911 - Interface to the Northern 911 ALI database + +=head1 SYNOPSIS + +use WebService::Northern911; + +my $n911 = WebService::Northern911->new( vendor_code => '007', + password => '280fip1@' ); + +my $result = $n911->AddorUpdateCustomer( + PHONE_NUMBER => '4015559988', + FIRST_NAME => 'John', + LAST_NAME => 'Doe', + STREET_NUMBER => 1024, + STREET_NAME => 'Main St', + CITY => 'Calgary', + PROVINCE_STATE => 'AB', + POSTAL_CODE_ZIP => 'Z1A A2Z', +); +if ($result->is_success) { + print "Updated customer." +} else + print $result->error_message; +} + +=head1 METHODS + +=over 4 + +=item new OPTIONS + +Creates an object to access the API. OPTIONS must include C<vendor_code> +and C<password>. By default, this will connect to the development API; +for access to the live service, pass C<live> => 1. + +=cut + +sub new { + my $class = shift; + my %opt = @_; + my $vendor_code = $opt{vendor_code} or die "WebService::Northern911::new() requires vendor_code\n"; + my $password = $opt{password} or die "WebService::Northern911::new() requires password\n"; + + # create the interface + # expensive, so reuse this object as much as possible + my $schema = dist_dir('WebService-Northern911') . '/schema'; + if ($opt{'live'}) { + $schema .= '/live'; + } else { + $schema .= '/test'; + } + + # yes, that's right, we have to distribute the schema with this module. + # XML::Compile::WSDL11 makes the argument that + my $client = XML::Compile::WSDL11->new("$schema/wsdl"); + for my $xsd (<$schema/xsd*>) { + $client->importDefinitions($xsd); + } + + $client->compileCalls; + my $self = { + vendor_code => $vendor_code, + password => $password, + client => $client, + }; + bless $self, $class; +} + +# internal method: returns the authentication string (referred to as the +# "hash" in the docs) + +sub _auth { + my $self = shift; + + my $now = DateTime->now; + $now->set_time_zone('UTC'); + md5_hex($self->{vendor_code} . + $self->{password} . + $now->strftime('%Y%m%d') + ); +} + +# internal method: dispatch a request to the service + +sub _call { + my $self = shift; + $self->{client}->call(@_); +} + +=item AddorUpdateCustomer OPTIONS + +Adds or updates a customer. Note the idiosyncratic capitalization; this +is the spelling of the underlying API method. OPTIONS may include: + +- PHONE_NUMBER: 10 digits, no punctuation +- FIRST_NAME: customer first name, up to 38 characters +- LAST_NAME: customer last name or company name, up to 100 characters +- STREET_NUMBER: up to 10 characters +- STREET_NAME: up to 84 characters +- CITY: up to 38 characters +- PROVINCE_STATE: 2 letter code +- POSTAL_CODE_ZIP: Canadian postal code or U.S. zip code +- OTHER_ADDRESS_INFO: up to 250 characters + +Returns a L<WebService::Northern911::Result> object. + +=cut + +sub AddorUpdateCustomer { + my $self = shift; + my %opt = @_; + my %customer = map { $_ => $opt{$_} } + qw( PHONE_NUMBER FIRST_NAME LAST_NAME STREET_NUMBER STREET_NAME + CITY PROVINCE_STATE POSTAL_CODE_ZIP OTHER_ADDRESS_INFO + ); + # according to Northern 911 support, this is for a future feature, + # and should always be 'N' for now + $customer{ENHANCED_CAPABLE} = 'N'; + + $customer{VENDOR_CODE} = $self->{vendor_code}; + + my ($answer, $trace) = $self->_call( 'AddorUpdateCustomer', + hash => $self->_auth, + customer => \%customer, + ); + + WebService::Northern911::Response->new($answer); +} + +=item DeleteCustomer PHONE + +Deletes a customer record. PHONE must be the phone number (10 digits, +as in C<AddorUpdateCustomer>). + +=cut + +sub DeleteCustomer { + my $self = shift; + my $phone = shift; + + my ($answer, $trace) = $self->_call( 'DeleteCustomer', + vendorCode => $self->{vendor_code}, + hash => $self->_auth, + phoneNumber => $phone, + ); + + WebService::Northern911::Response->new($answer); +} + +=item QueryCustomer PHONE + +Queries a customer record. PHONE must be the phone number. The response +object will have a "customer" method which returns a hashref of customer +information, in the same format as the arguments to C<AddorUpdateCustomer>. + +=cut + +sub QueryCustomer { + my $self = shift; + my $phone = shift; + + my ($answer, $trace) = $self->_call( 'QueryCustomer', + vendorCode => $self->{vendor_code}, + hash => $self->_auth, + phoneNumber => $phone, + ); + + WebService::Northern911::Response->new($answer); +} + +=item GetVendorDumpURL + +Returns a URL to download a CSV dump of your customer data. The response +object will have a 'url' method to return the URL. + +Note that this feature is heavily throttled (at most once per week, unless +you pay for more frequent access) and the URL can only be used once. + +=cut + +sub GetVendorDumpURL { + my $self = shift; + + my ($answer, $trace) = $self->_call( 'GetVendorDumpURL', + vendorCode => $self->{vendor_code}, + hash => $self->_auth, + ); + + WebService::Northern911::Response->new($answer); +} + +=back + +=head1 AUTHOR + +Mark Wells, <mark@freeside.biz> + +Commercial support is available from Freeside Internet Services, Inc. + +=head1 COPYRIGHT + +Copyright (c) 2014 Mark Wells + +=cut + +1; diff --git a/lib/WebService/Northern911/Response.pm b/lib/WebService/Northern911/Response.pm new file mode 100644 index 0000000..f21eab1 --- /dev/null +++ b/lib/WebService/Northern911/Response.pm @@ -0,0 +1,88 @@ +package WebService::Northern911::Response; + +use strict; + +sub new { + my $class = shift; + my $self; + + my $tree = shift; + $tree = $tree->{'parameters'} if exists $tree->{'parameters'}; + my ($key) = grep /Result$/, keys(%$tree); # should only ever be one key + $tree = $tree->{$key} or die "can't parse transaction result"; + + my $error_message = join("\n", + map { $_->{ErrorMessage} } + @{ $tree->{Errors}{Error} } + ); + + $self = { + is_success => $tree->{Accepted}, + error_message => $error_message, + }; + + if ( $key eq 'QueryCustomerResult' ) { + if ($tree->{Accepted}) { + $self->{customer} = $tree->{Customer}; + } elsif ( $tree->{Errors}{Error}[0]{ErrorCode} == 101 ) { + # 101 = Customer does not exist. But the query was successful... + $self->{is_success} = 1; + } + } elsif ( $key eq 'GetVendorDumpURL' ) { + $self->{url} = $tree->{VendorDumpURL}; + } + + bless $self, $class; +} + +sub is_success { + $_[0]->{is_success}; +} + +sub error_message { + $_[0]->{error_message}; +} + +sub customer { + $_[0]->{customer}; +} + +sub url { + $_[0]->{url}; +} + +=head1 NAME + +WebService::Northern911::Response - Response object returned by +WebService::Northern911 API calls + +=head1 METHODS + +=over 4 + +=item is_success + +1 if the API method was a success, 0 if not. If it's 0, C<error_message> +will contain any error returned. Note that we report the C<QueryCustomer> +method as a success if it returns a negative result; in that case, +C<customer> will be undef. + +=item error_message + +Any error messages returned from the web service, separated by newlines. + +=item customer + +For C<QueryCustomer> calls, returns a hashref of the customer information +per the field names used by C<AddorUpdateCustomer>. + +=item url + +For C<GetVendorDumpURL> calls, returns the URL where the data dump can be +downloaded. + +=back + +=cut + +1; diff --git a/share/schema/live/wsdl b/share/schema/live/wsdl new file mode 100644 index 0000000..ff805d7 --- /dev/null +++ b/share/schema/live/wsdl @@ -0,0 +1 @@ +<?xml version="1.0" encoding="utf-8"?><wsdl:definitions name="Service" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:tns="http://tempuri.org/" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"><wsp:Policy wsu:Id="BasicHttpBinding_IService_policy"><wsp:ExactlyOne><wsp:All><sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"><wsp:Policy><sp:TransportToken><wsp:Policy><sp:HttpsToken RequireClientCertificate="false"/></wsp:Policy></sp:TransportToken><sp:AlgorithmSuite><wsp:Policy><sp:Basic256/></wsp:Policy></sp:AlgorithmSuite><sp:Layout><wsp:Policy><sp:Strict/></wsp:Policy></sp:Layout></wsp:Policy></sp:TransportBinding></wsp:All></wsp:ExactlyOne></wsp:Policy><wsdl:types><xsd:schema targetNamespace="http://tempuri.org/Imports"><xsd:import schemaLocation="https://addressinfo.northern911.com/soap/Service.svc?xsd=xsd0" namespace="http://tempuri.org/"/><xsd:import schemaLocation="https://addressinfo.northern911.com/soap/Service.svc?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/"/><xsd:import schemaLocation="https://addressinfo.northern911.com/soap/Service.svc?xsd=xsd2" namespace="http://schemas.datacontract.org/2004/07/"/></xsd:schema></wsdl:types><wsdl:message name="IService_AddorUpdateCustomer_InputMessage"><wsdl:part name="parameters" element="tns:AddorUpdateCustomer"/></wsdl:message><wsdl:message name="IService_AddorUpdateCustomer_OutputMessage"><wsdl:part name="parameters" element="tns:AddorUpdateCustomerResponse"/></wsdl:message><wsdl:message name="IService_DeleteCustomer_InputMessage"><wsdl:part name="parameters" element="tns:DeleteCustomer"/></wsdl:message><wsdl:message name="IService_DeleteCustomer_OutputMessage"><wsdl:part name="parameters" element="tns:DeleteCustomerResponse"/></wsdl:message><wsdl:message name="IService_QueryCustomer_InputMessage"><wsdl:part name="parameters" element="tns:QueryCustomer"/></wsdl:message><wsdl:message name="IService_QueryCustomer_OutputMessage"><wsdl:part name="parameters" element="tns:QueryCustomerResponse"/></wsdl:message><wsdl:message name="IService_GetVendorDumpURL_InputMessage"><wsdl:part name="parameters" element="tns:GetVendorDumpURL"/></wsdl:message><wsdl:message name="IService_GetVendorDumpURL_OutputMessage"><wsdl:part name="parameters" element="tns:GetVendorDumpURLResponse"/></wsdl:message><wsdl:message name="IService_VerifyCustomer_InputMessage"><wsdl:part name="parameters" element="tns:VerifyCustomer"/></wsdl:message><wsdl:message name="IService_VerifyCustomer_OutputMessage"><wsdl:part name="parameters" element="tns:VerifyCustomerResponse"/></wsdl:message><wsdl:portType name="IService"><wsdl:operation name="AddorUpdateCustomer"><wsdl:input wsaw:Action="http://tempuri.org/IService/AddorUpdateCustomer" message="tns:IService_AddorUpdateCustomer_InputMessage"/><wsdl:output wsaw:Action="http://tempuri.org/IService/AddorUpdateCustomerResponse" message="tns:IService_AddorUpdateCustomer_OutputMessage"/></wsdl:operation><wsdl:operation name="DeleteCustomer"><wsdl:input wsaw:Action="http://tempuri.org/IService/DeleteCustomer" message="tns:IService_DeleteCustomer_InputMessage"/><wsdl:output wsaw:Action="http://tempuri.org/IService/DeleteCustomerResponse" message="tns:IService_DeleteCustomer_OutputMessage"/></wsdl:operation><wsdl:operation name="QueryCustomer"><wsdl:input wsaw:Action="http://tempuri.org/IService/QueryCustomer" message="tns:IService_QueryCustomer_InputMessage"/><wsdl:output wsaw:Action="http://tempuri.org/IService/QueryCustomerResponse" message="tns:IService_QueryCustomer_OutputMessage"/></wsdl:operation><wsdl:operation name="GetVendorDumpURL"><wsdl:input wsaw:Action="http://tempuri.org/IService/GetVendorDumpURL" message="tns:IService_GetVendorDumpURL_InputMessage"/><wsdl:output wsaw:Action="http://tempuri.org/IService/GetVendorDumpURLResponse" message="tns:IService_GetVendorDumpURL_OutputMessage"/></wsdl:operation><wsdl:operation name="VerifyCustomer"><wsdl:input wsaw:Action="http://tempuri.org/IService/VerifyCustomer" message="tns:IService_VerifyCustomer_InputMessage"/><wsdl:output wsaw:Action="http://tempuri.org/IService/VerifyCustomerResponse" message="tns:IService_VerifyCustomer_OutputMessage"/></wsdl:operation></wsdl:portType><wsdl:binding name="BasicHttpBinding_IService" type="tns:IService"><wsp:PolicyReference URI="#BasicHttpBinding_IService_policy"/><soap:binding transport="http://schemas.xmlsoap.org/soap/http"/><wsdl:operation name="AddorUpdateCustomer"><soap:operation soapAction="http://tempuri.org/IService/AddorUpdateCustomer" style="document"/><wsdl:input><soap:body use="literal"/></wsdl:input><wsdl:output><soap:body use="literal"/></wsdl:output></wsdl:operation><wsdl:operation name="DeleteCustomer"><soap:operation soapAction="http://tempuri.org/IService/DeleteCustomer" style="document"/><wsdl:input><soap:body use="literal"/></wsdl:input><wsdl:output><soap:body use="literal"/></wsdl:output></wsdl:operation><wsdl:operation name="QueryCustomer"><soap:operation soapAction="http://tempuri.org/IService/QueryCustomer" style="document"/><wsdl:input><soap:body use="literal"/></wsdl:input><wsdl:output><soap:body use="literal"/></wsdl:output></wsdl:operation><wsdl:operation name="GetVendorDumpURL"><soap:operation soapAction="http://tempuri.org/IService/GetVendorDumpURL" style="document"/><wsdl:input><soap:body use="literal"/></wsdl:input><wsdl:output><soap:body use="literal"/></wsdl:output></wsdl:operation><wsdl:operation name="VerifyCustomer"><soap:operation soapAction="http://tempuri.org/IService/VerifyCustomer" style="document"/><wsdl:input><soap:body use="literal"/></wsdl:input><wsdl:output><soap:body use="literal"/></wsdl:output></wsdl:operation></wsdl:binding><wsdl:service name="Service"><wsdl:port name="BasicHttpBinding_IService" binding="tns:BasicHttpBinding_IService"><soap:address location="https://addressinfo.northern911.com/soap/Service.svc"/></wsdl:port></wsdl:service></wsdl:definitions>
\ No newline at end of file diff --git a/share/schema/live/xsd0 b/share/schema/live/xsd0 new file mode 100644 index 0000000..c30e001 --- /dev/null +++ b/share/schema/live/xsd0 @@ -0,0 +1 @@ +<?xml version="1.0" encoding="utf-8"?><xs:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://tempuri.org/"><xs:import schemaLocation="https://addressinfo.northern911.com/soap/Service.svc?xsd=xsd2" namespace="http://schemas.datacontract.org/2004/07/"/><xs:element name="AddorUpdateCustomer"><xs:complexType><xs:sequence><xs:element minOccurs="0" name="customer" nillable="true" type="q1:Customer" xmlns:q1="http://schemas.datacontract.org/2004/07/"/><xs:element minOccurs="0" name="hash" nillable="true" type="xs:string"/></xs:sequence></xs:complexType></xs:element><xs:element name="AddorUpdateCustomerResponse"><xs:complexType><xs:sequence><xs:element minOccurs="0" name="AddorUpdateCustomerResult" nillable="true" type="q2:N911Response" xmlns:q2="http://schemas.datacontract.org/2004/07/"/></xs:sequence></xs:complexType></xs:element><xs:element name="DeleteCustomer"><xs:complexType><xs:sequence><xs:element minOccurs="0" name="vendorCode" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="phoneNumber" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="hash" nillable="true" type="xs:string"/></xs:sequence></xs:complexType></xs:element><xs:element name="DeleteCustomerResponse"><xs:complexType><xs:sequence><xs:element minOccurs="0" name="DeleteCustomerResult" nillable="true" type="q3:N911Response" xmlns:q3="http://schemas.datacontract.org/2004/07/"/></xs:sequence></xs:complexType></xs:element><xs:element name="QueryCustomer"><xs:complexType><xs:sequence><xs:element minOccurs="0" name="vendorCode" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="phoneNumber" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="hash" nillable="true" type="xs:string"/></xs:sequence></xs:complexType></xs:element><xs:element name="QueryCustomerResponse"><xs:complexType><xs:sequence><xs:element minOccurs="0" name="QueryCustomerResult" nillable="true" type="q4:N911Response" xmlns:q4="http://schemas.datacontract.org/2004/07/"/></xs:sequence></xs:complexType></xs:element><xs:element name="GetVendorDumpURL"><xs:complexType><xs:sequence><xs:element minOccurs="0" name="vendorCode" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="hash" nillable="true" type="xs:string"/></xs:sequence></xs:complexType></xs:element><xs:element name="GetVendorDumpURLResponse"><xs:complexType><xs:sequence><xs:element minOccurs="0" name="GetVendorDumpURLResult" nillable="true" type="q5:N911Response" xmlns:q5="http://schemas.datacontract.org/2004/07/"/></xs:sequence></xs:complexType></xs:element><xs:element name="VerifyCustomer"><xs:complexType><xs:sequence><xs:element minOccurs="0" name="customer" nillable="true" type="q6:Customer" xmlns:q6="http://schemas.datacontract.org/2004/07/"/><xs:element minOccurs="0" name="hash" nillable="true" type="xs:string"/></xs:sequence></xs:complexType></xs:element><xs:element name="VerifyCustomerResponse"><xs:complexType><xs:sequence><xs:element minOccurs="0" name="VerifyCustomerResult" nillable="true" type="q7:N911Response" xmlns:q7="http://schemas.datacontract.org/2004/07/"/></xs:sequence></xs:complexType></xs:element></xs:schema>
\ No newline at end of file diff --git a/share/schema/live/xsd1 b/share/schema/live/xsd1 new file mode 100644 index 0000000..5c1344c --- /dev/null +++ b/share/schema/live/xsd1 @@ -0,0 +1 @@ +<?xml version="1.0" encoding="utf-8"?><xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/"><xs:element name="anyType" nillable="true" type="xs:anyType"/><xs:element name="anyURI" nillable="true" type="xs:anyURI"/><xs:element name="base64Binary" nillable="true" type="xs:base64Binary"/><xs:element name="boolean" nillable="true" type="xs:boolean"/><xs:element name="byte" nillable="true" type="xs:byte"/><xs:element name="dateTime" nillable="true" type="xs:dateTime"/><xs:element name="decimal" nillable="true" type="xs:decimal"/><xs:element name="double" nillable="true" type="xs:double"/><xs:element name="float" nillable="true" type="xs:float"/><xs:element name="int" nillable="true" type="xs:int"/><xs:element name="long" nillable="true" type="xs:long"/><xs:element name="QName" nillable="true" type="xs:QName"/><xs:element name="short" nillable="true" type="xs:short"/><xs:element name="string" nillable="true" type="xs:string"/><xs:element name="unsignedByte" nillable="true" type="xs:unsignedByte"/><xs:element name="unsignedInt" nillable="true" type="xs:unsignedInt"/><xs:element name="unsignedLong" nillable="true" type="xs:unsignedLong"/><xs:element name="unsignedShort" nillable="true" type="xs:unsignedShort"/><xs:element name="char" nillable="true" type="tns:char"/><xs:simpleType name="char"><xs:restriction base="xs:int"/></xs:simpleType><xs:element name="duration" nillable="true" type="tns:duration"/><xs:simpleType name="duration"><xs:restriction base="xs:duration"><xs:pattern value="\-?P(\d*D)?(T(\d*H)?(\d*M)?(\d*(\.\d*)?S)?)?"/><xs:minInclusive value="-P10675199DT2H48M5.4775808S"/><xs:maxInclusive value="P10675199DT2H48M5.4775807S"/></xs:restriction></xs:simpleType><xs:element name="guid" nillable="true" type="tns:guid"/><xs:simpleType name="guid"><xs:restriction base="xs:string"><xs:pattern value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}"/></xs:restriction></xs:simpleType><xs:attribute name="FactoryType" type="xs:QName"/><xs:attribute name="Id" type="xs:ID"/><xs:attribute name="Ref" type="xs:IDREF"/></xs:schema>
\ No newline at end of file diff --git a/share/schema/live/xsd2 b/share/schema/live/xsd2 new file mode 100644 index 0000000..7c83a0e --- /dev/null +++ b/share/schema/live/xsd2 @@ -0,0 +1 @@ +<?xml version="1.0" encoding="utf-8"?><xs:schema elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://schemas.datacontract.org/2004/07/"><xs:complexType name="Customer"><xs:sequence><xs:element minOccurs="0" name="CITY" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="ENHANCED_CAPABLE" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="FIRST_NAME" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="LAST_DATETIME_MODIFIED" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="LAST_DATETIME_MODIFIED_UNIXTIME" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="LAST_NAME" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="OTHER_ADDRESS_INFO" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="PHONE_NUMBER" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="POSTAL_CODE_ZIP" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="PROVINCE_STATE" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="STREET_NAME" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="STREET_NUMBER" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="SUITE_APT" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="VENDOR_CODE" nillable="true" type="xs:string"/></xs:sequence></xs:complexType><xs:element name="Customer" nillable="true" type="tns:Customer"/><xs:complexType name="N911Response"><xs:sequence><xs:element minOccurs="0" name="Accepted" type="xs:boolean"/><xs:element minOccurs="0" name="Customer" nillable="true" type="tns:Customer"/><xs:element minOccurs="0" name="Errors" nillable="true" type="tns:ArrayOfError"/><xs:element minOccurs="0" name="VendorDumpURL" nillable="true" type="xs:string"/></xs:sequence></xs:complexType><xs:element name="N911Response" nillable="true" type="tns:N911Response"/><xs:complexType name="ArrayOfError"><xs:sequence><xs:element minOccurs="0" maxOccurs="unbounded" name="Error" nillable="true" type="tns:Error"/></xs:sequence></xs:complexType><xs:element name="ArrayOfError" nillable="true" type="tns:ArrayOfError"/><xs:complexType name="Error"><xs:sequence><xs:element minOccurs="0" name="ErrorCode" type="xs:int"/><xs:element minOccurs="0" name="ErrorMessage" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="SuggestedCity" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="SuggestedProvinceState" nillable="true" type="xs:string"/></xs:sequence></xs:complexType><xs:element name="Error" nillable="true" type="tns:Error"/></xs:schema>
\ No newline at end of file diff --git a/share/schema/test/wsdl b/share/schema/test/wsdl new file mode 100644 index 0000000..c5ba956 --- /dev/null +++ b/share/schema/test/wsdl @@ -0,0 +1 @@ +<?xml version="1.0" encoding="utf-8"?><wsdl:definitions name="Service" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:tns="http://tempuri.org/" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"><wsp:Policy wsu:Id="BasicHttpBinding_IService_policy"><wsp:ExactlyOne><wsp:All><sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"><wsp:Policy><sp:TransportToken><wsp:Policy><sp:HttpsToken RequireClientCertificate="false"/></wsp:Policy></sp:TransportToken><sp:AlgorithmSuite><wsp:Policy><sp:Basic256/></wsp:Policy></sp:AlgorithmSuite><sp:Layout><wsp:Policy><sp:Strict/></wsp:Policy></sp:Layout></wsp:Policy></sp:TransportBinding></wsp:All></wsp:ExactlyOne></wsp:Policy><wsdl:types><xsd:schema targetNamespace="http://tempuri.org/Imports"><xsd:import schemaLocation="https://soapdev.northern911.com/soap/Service.svc?xsd=xsd0" namespace="http://tempuri.org/"/><xsd:import schemaLocation="https://soapdev.northern911.com/soap/Service.svc?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/"/><xsd:import schemaLocation="https://soapdev.northern911.com/soap/Service.svc?xsd=xsd2" namespace="http://schemas.datacontract.org/2004/07/"/></xsd:schema></wsdl:types><wsdl:message name="IService_AddorUpdateCustomer_InputMessage"><wsdl:part name="parameters" element="tns:AddorUpdateCustomer"/></wsdl:message><wsdl:message name="IService_AddorUpdateCustomer_OutputMessage"><wsdl:part name="parameters" element="tns:AddorUpdateCustomerResponse"/></wsdl:message><wsdl:message name="IService_DeleteCustomer_InputMessage"><wsdl:part name="parameters" element="tns:DeleteCustomer"/></wsdl:message><wsdl:message name="IService_DeleteCustomer_OutputMessage"><wsdl:part name="parameters" element="tns:DeleteCustomerResponse"/></wsdl:message><wsdl:message name="IService_QueryCustomer_InputMessage"><wsdl:part name="parameters" element="tns:QueryCustomer"/></wsdl:message><wsdl:message name="IService_QueryCustomer_OutputMessage"><wsdl:part name="parameters" element="tns:QueryCustomerResponse"/></wsdl:message><wsdl:message name="IService_GetVendorDumpURL_InputMessage"><wsdl:part name="parameters" element="tns:GetVendorDumpURL"/></wsdl:message><wsdl:message name="IService_GetVendorDumpURL_OutputMessage"><wsdl:part name="parameters" element="tns:GetVendorDumpURLResponse"/></wsdl:message><wsdl:message name="IService_VerifyCustomer_InputMessage"><wsdl:part name="parameters" element="tns:VerifyCustomer"/></wsdl:message><wsdl:message name="IService_VerifyCustomer_OutputMessage"><wsdl:part name="parameters" element="tns:VerifyCustomerResponse"/></wsdl:message><wsdl:portType name="IService"><wsdl:operation name="AddorUpdateCustomer"><wsdl:input wsaw:Action="http://tempuri.org/IService/AddorUpdateCustomer" message="tns:IService_AddorUpdateCustomer_InputMessage"/><wsdl:output wsaw:Action="http://tempuri.org/IService/AddorUpdateCustomerResponse" message="tns:IService_AddorUpdateCustomer_OutputMessage"/></wsdl:operation><wsdl:operation name="DeleteCustomer"><wsdl:input wsaw:Action="http://tempuri.org/IService/DeleteCustomer" message="tns:IService_DeleteCustomer_InputMessage"/><wsdl:output wsaw:Action="http://tempuri.org/IService/DeleteCustomerResponse" message="tns:IService_DeleteCustomer_OutputMessage"/></wsdl:operation><wsdl:operation name="QueryCustomer"><wsdl:input wsaw:Action="http://tempuri.org/IService/QueryCustomer" message="tns:IService_QueryCustomer_InputMessage"/><wsdl:output wsaw:Action="http://tempuri.org/IService/QueryCustomerResponse" message="tns:IService_QueryCustomer_OutputMessage"/></wsdl:operation><wsdl:operation name="GetVendorDumpURL"><wsdl:input wsaw:Action="http://tempuri.org/IService/GetVendorDumpURL" message="tns:IService_GetVendorDumpURL_InputMessage"/><wsdl:output wsaw:Action="http://tempuri.org/IService/GetVendorDumpURLResponse" message="tns:IService_GetVendorDumpURL_OutputMessage"/></wsdl:operation><wsdl:operation name="VerifyCustomer"><wsdl:input wsaw:Action="http://tempuri.org/IService/VerifyCustomer" message="tns:IService_VerifyCustomer_InputMessage"/><wsdl:output wsaw:Action="http://tempuri.org/IService/VerifyCustomerResponse" message="tns:IService_VerifyCustomer_OutputMessage"/></wsdl:operation></wsdl:portType><wsdl:binding name="BasicHttpBinding_IService" type="tns:IService"><wsp:PolicyReference URI="#BasicHttpBinding_IService_policy"/><soap:binding transport="http://schemas.xmlsoap.org/soap/http"/><wsdl:operation name="AddorUpdateCustomer"><soap:operation soapAction="http://tempuri.org/IService/AddorUpdateCustomer" style="document"/><wsdl:input><soap:body use="literal"/></wsdl:input><wsdl:output><soap:body use="literal"/></wsdl:output></wsdl:operation><wsdl:operation name="DeleteCustomer"><soap:operation soapAction="http://tempuri.org/IService/DeleteCustomer" style="document"/><wsdl:input><soap:body use="literal"/></wsdl:input><wsdl:output><soap:body use="literal"/></wsdl:output></wsdl:operation><wsdl:operation name="QueryCustomer"><soap:operation soapAction="http://tempuri.org/IService/QueryCustomer" style="document"/><wsdl:input><soap:body use="literal"/></wsdl:input><wsdl:output><soap:body use="literal"/></wsdl:output></wsdl:operation><wsdl:operation name="GetVendorDumpURL"><soap:operation soapAction="http://tempuri.org/IService/GetVendorDumpURL" style="document"/><wsdl:input><soap:body use="literal"/></wsdl:input><wsdl:output><soap:body use="literal"/></wsdl:output></wsdl:operation><wsdl:operation name="VerifyCustomer"><soap:operation soapAction="http://tempuri.org/IService/VerifyCustomer" style="document"/><wsdl:input><soap:body use="literal"/></wsdl:input><wsdl:output><soap:body use="literal"/></wsdl:output></wsdl:operation></wsdl:binding><wsdl:service name="Service"><wsdl:port name="BasicHttpBinding_IService" binding="tns:BasicHttpBinding_IService"><soap:address location="https://soapdev.northern911.com/soap/Service.svc"/></wsdl:port></wsdl:service></wsdl:definitions>
\ No newline at end of file diff --git a/share/schema/test/xsd0 b/share/schema/test/xsd0 new file mode 100644 index 0000000..be55868 --- /dev/null +++ b/share/schema/test/xsd0 @@ -0,0 +1 @@ +<?xml version="1.0" encoding="utf-8"?><xs:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://tempuri.org/"><xs:import schemaLocation="https://soapdev.northern911.com/soap/Service.svc?xsd=xsd2" namespace="http://schemas.datacontract.org/2004/07/"/><xs:element name="AddorUpdateCustomer"><xs:complexType><xs:sequence><xs:element minOccurs="0" name="customer" nillable="true" type="q1:Customer" xmlns:q1="http://schemas.datacontract.org/2004/07/"/><xs:element minOccurs="0" name="hash" nillable="true" type="xs:string"/></xs:sequence></xs:complexType></xs:element><xs:element name="AddorUpdateCustomerResponse"><xs:complexType><xs:sequence><xs:element minOccurs="0" name="AddorUpdateCustomerResult" nillable="true" type="q2:N911Response" xmlns:q2="http://schemas.datacontract.org/2004/07/"/></xs:sequence></xs:complexType></xs:element><xs:element name="DeleteCustomer"><xs:complexType><xs:sequence><xs:element minOccurs="0" name="vendorCode" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="phoneNumber" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="hash" nillable="true" type="xs:string"/></xs:sequence></xs:complexType></xs:element><xs:element name="DeleteCustomerResponse"><xs:complexType><xs:sequence><xs:element minOccurs="0" name="DeleteCustomerResult" nillable="true" type="q3:N911Response" xmlns:q3="http://schemas.datacontract.org/2004/07/"/></xs:sequence></xs:complexType></xs:element><xs:element name="QueryCustomer"><xs:complexType><xs:sequence><xs:element minOccurs="0" name="vendorCode" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="phoneNumber" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="hash" nillable="true" type="xs:string"/></xs:sequence></xs:complexType></xs:element><xs:element name="QueryCustomerResponse"><xs:complexType><xs:sequence><xs:element minOccurs="0" name="QueryCustomerResult" nillable="true" type="q4:N911Response" xmlns:q4="http://schemas.datacontract.org/2004/07/"/></xs:sequence></xs:complexType></xs:element><xs:element name="GetVendorDumpURL"><xs:complexType><xs:sequence><xs:element minOccurs="0" name="vendorCode" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="hash" nillable="true" type="xs:string"/></xs:sequence></xs:complexType></xs:element><xs:element name="GetVendorDumpURLResponse"><xs:complexType><xs:sequence><xs:element minOccurs="0" name="GetVendorDumpURLResult" nillable="true" type="q5:N911Response" xmlns:q5="http://schemas.datacontract.org/2004/07/"/></xs:sequence></xs:complexType></xs:element><xs:element name="VerifyCustomer"><xs:complexType><xs:sequence><xs:element minOccurs="0" name="customer" nillable="true" type="q6:Customer" xmlns:q6="http://schemas.datacontract.org/2004/07/"/><xs:element minOccurs="0" name="hash" nillable="true" type="xs:string"/></xs:sequence></xs:complexType></xs:element><xs:element name="VerifyCustomerResponse"><xs:complexType><xs:sequence><xs:element minOccurs="0" name="VerifyCustomerResult" nillable="true" type="q7:N911Response" xmlns:q7="http://schemas.datacontract.org/2004/07/"/></xs:sequence></xs:complexType></xs:element></xs:schema>
\ No newline at end of file diff --git a/share/schema/test/xsd1 b/share/schema/test/xsd1 new file mode 100644 index 0000000..5c1344c --- /dev/null +++ b/share/schema/test/xsd1 @@ -0,0 +1 @@ +<?xml version="1.0" encoding="utf-8"?><xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/"><xs:element name="anyType" nillable="true" type="xs:anyType"/><xs:element name="anyURI" nillable="true" type="xs:anyURI"/><xs:element name="base64Binary" nillable="true" type="xs:base64Binary"/><xs:element name="boolean" nillable="true" type="xs:boolean"/><xs:element name="byte" nillable="true" type="xs:byte"/><xs:element name="dateTime" nillable="true" type="xs:dateTime"/><xs:element name="decimal" nillable="true" type="xs:decimal"/><xs:element name="double" nillable="true" type="xs:double"/><xs:element name="float" nillable="true" type="xs:float"/><xs:element name="int" nillable="true" type="xs:int"/><xs:element name="long" nillable="true" type="xs:long"/><xs:element name="QName" nillable="true" type="xs:QName"/><xs:element name="short" nillable="true" type="xs:short"/><xs:element name="string" nillable="true" type="xs:string"/><xs:element name="unsignedByte" nillable="true" type="xs:unsignedByte"/><xs:element name="unsignedInt" nillable="true" type="xs:unsignedInt"/><xs:element name="unsignedLong" nillable="true" type="xs:unsignedLong"/><xs:element name="unsignedShort" nillable="true" type="xs:unsignedShort"/><xs:element name="char" nillable="true" type="tns:char"/><xs:simpleType name="char"><xs:restriction base="xs:int"/></xs:simpleType><xs:element name="duration" nillable="true" type="tns:duration"/><xs:simpleType name="duration"><xs:restriction base="xs:duration"><xs:pattern value="\-?P(\d*D)?(T(\d*H)?(\d*M)?(\d*(\.\d*)?S)?)?"/><xs:minInclusive value="-P10675199DT2H48M5.4775808S"/><xs:maxInclusive value="P10675199DT2H48M5.4775807S"/></xs:restriction></xs:simpleType><xs:element name="guid" nillable="true" type="tns:guid"/><xs:simpleType name="guid"><xs:restriction base="xs:string"><xs:pattern value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}"/></xs:restriction></xs:simpleType><xs:attribute name="FactoryType" type="xs:QName"/><xs:attribute name="Id" type="xs:ID"/><xs:attribute name="Ref" type="xs:IDREF"/></xs:schema>
\ No newline at end of file diff --git a/share/schema/test/xsd2 b/share/schema/test/xsd2 new file mode 100644 index 0000000..7c83a0e --- /dev/null +++ b/share/schema/test/xsd2 @@ -0,0 +1 @@ +<?xml version="1.0" encoding="utf-8"?><xs:schema elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://schemas.datacontract.org/2004/07/"><xs:complexType name="Customer"><xs:sequence><xs:element minOccurs="0" name="CITY" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="ENHANCED_CAPABLE" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="FIRST_NAME" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="LAST_DATETIME_MODIFIED" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="LAST_DATETIME_MODIFIED_UNIXTIME" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="LAST_NAME" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="OTHER_ADDRESS_INFO" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="PHONE_NUMBER" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="POSTAL_CODE_ZIP" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="PROVINCE_STATE" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="STREET_NAME" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="STREET_NUMBER" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="SUITE_APT" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="VENDOR_CODE" nillable="true" type="xs:string"/></xs:sequence></xs:complexType><xs:element name="Customer" nillable="true" type="tns:Customer"/><xs:complexType name="N911Response"><xs:sequence><xs:element minOccurs="0" name="Accepted" type="xs:boolean"/><xs:element minOccurs="0" name="Customer" nillable="true" type="tns:Customer"/><xs:element minOccurs="0" name="Errors" nillable="true" type="tns:ArrayOfError"/><xs:element minOccurs="0" name="VendorDumpURL" nillable="true" type="xs:string"/></xs:sequence></xs:complexType><xs:element name="N911Response" nillable="true" type="tns:N911Response"/><xs:complexType name="ArrayOfError"><xs:sequence><xs:element minOccurs="0" maxOccurs="unbounded" name="Error" nillable="true" type="tns:Error"/></xs:sequence></xs:complexType><xs:element name="ArrayOfError" nillable="true" type="tns:ArrayOfError"/><xs:complexType name="Error"><xs:sequence><xs:element minOccurs="0" name="ErrorCode" type="xs:int"/><xs:element minOccurs="0" name="ErrorMessage" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="SuggestedCity" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="SuggestedProvinceState" nillable="true" type="xs:string"/></xs:sequence></xs:complexType><xs:element name="Error" nillable="true" type="tns:Error"/></xs:schema>
\ No newline at end of file diff --git a/t/00-load.t b/t/00-load.t new file mode 100644 index 0000000..adcfbef --- /dev/null +++ b/t/00-load.t @@ -0,0 +1,13 @@ +#!perl -T +use 5.006; +use strict; +use warnings FATAL => 'all'; +use Test::More; + +plan tests => 1; + +BEGIN { + use_ok( 'WebService::Northern911' ) || print "Bail out!\n"; +} + +diag( "Testing WebService::Northern911 $WebService::Northern911::VERSION, Perl $], $^X" ); diff --git a/t/manifest.t b/t/manifest.t new file mode 100644 index 0000000..6ddfe36 --- /dev/null +++ b/t/manifest.t @@ -0,0 +1,15 @@ +#!perl -T +use 5.006; +use strict; +use warnings FATAL => 'all'; +use Test::More; + +unless ( $ENV{RELEASE_TESTING} ) { + plan( skip_all => "Author tests not required for installation" ); +} + +my $min_tcm = 0.9; +eval "use Test::CheckManifest $min_tcm"; +plan skip_all => "Test::CheckManifest $min_tcm required" if $@; + +ok_manifest(); @@ -0,0 +1,12 @@ +#!perl -T +use 5.006; +use strict; +use warnings FATAL => 'all'; +use Test::More; + +# Ensure a recent version of Test::Pod +my $min_tp = 1.22; +eval "use Test::Pod $min_tp"; +plan skip_all => "Test::Pod $min_tp required for testing POD" if $@; + +all_pod_files_ok(); |