NAME
    WSDL::Compile - Compile SOAP WSDL from your Moose classes.

SYNOPSIS
    # Name of your WebService: Example
    # Op stands for Operation
    # Your method is CreateCustomer
    #
    # Request - what you expect to receive
    package Example::Op::CreateCustomer::Request;
    use Moose;
    use MooseX::Types::XMLSchema qw( :all );
    use WSDL::Compile::Meta::Attribute::WSDL;

    has 'FirstName' => (
       metaclass => 'WSDL',
       is => 'rw',
       isa => 'xs:string',
       required => 1,
       xs_minOccurs => 1,
    );
    has 'LastName' => (
       metaclass => 'WSDL',
       is => 'rw',
       isa => 'xs:string',
       required => 1,
       xs_minOccurs => 1,
    );
    has 'Contacts' => (
       metaclass => 'WSDL',
       is => 'rw',
       isa => 'ArrayRef[Example::CT::Contact]',
       xs_maxOccurs => undef,
    );

    # Response - that's what will be sent back
    package Example::Op::CreateCustomer::Response;
    use Moose;
    use MooseX::Types::XMLSchema qw( :all );
    use WSDL::Compile::Meta::Attribute::WSDL;

    has 'CustomerID' => (
       metaclass => 'WSDL',
       is => 'rw',
       isa => 'xs:int',
       required => 1,
       xs_minOccurs => 1,
    );

    # Fault - class that defines faultdetails
    package Example::Op::CreateCustomer::Fault;
    use Moose;
    use MooseX::Types::XMLSchema qw( :all );
    use WSDL::Compile::Meta::Attribute::WSDL;

    has 'Code' => (
       metaclass => 'WSDL',
       is => 'rw',
       isa => 'xs:int',
    );
    has 'Description' => (
       metaclass => 'WSDL',
       is => 'rw',
       isa => 'xs:string',
    );

    # CT stands for ComplexType
    # So you can have more complex data structures
    package Example::CT::Contact;
    use Moose;
    use MooseX::Types::XMLSchema qw( :all );
    use WSDL::Compile::Meta::Attribute::WSDL;

    has 'AddressLine1' => (
       metaclass => 'WSDL',
       is => 'rw',
       isa => 'xs:string',
    );
    has 'AddressLine2' => (
       metaclass => 'WSDL',
       is => 'rw',
       isa => 'Maybe[xs:string]',
    );
    has 'City' => (
       metaclass => 'WSDL',
       is => 'rw',
       isa => 'xs:string',
    );

    # below could be put in a script
    package main;
    use strict;
    use warnings;
    use WSDL::Compile;

    my $gen = WSDL::Compile->new(
       service => {
           name => 'Example',
           tns => 'http://localhost/Example',
           documentation => 'Example Web Service',
       },
       operations => [
           qw/
               CreateCustomer
           /
       ],
    );

    my $wsdl = $gen->generate_wsdl();

    print $wsdl;

    Please take a look at example/ directory and/or tests for more details.

ATTRIBUTES
  namespace
    Namespace for SOAP classes.

  service
    Hashref with following elements:

    *   name

        Name of web service

    *   tns

        Target namaspace

    *   documentation

        Description of web service

  operations
    Arrayref of all operations available in web service

FUNCTIONS
  generate_wsdl
    Compile a WSDL file based on the classes. Returns string that you should
    save as .wsdl file.

  build_messages
    Builds wsdl:message.

  build_portType
    Builds wsdl:portType.

  build_binding
    Builds wsdl:binding.

  build_service
    Builds wsdl:service.

  build_definitions
    Builds wsdl:definitions.

  build_documentation
    Builds wsdl:documentation.

  build_types
    Builds wsdl:types.

AUTHOR
    Alex J. G. Burzyński, "<ajgb at cpan.org>"

BUGS
    Please report any bugs or feature requests to "bug-wsdl-compile at
    rt.cpan.org", or through the web interface at
    <http://rt.cpan.org/NoAuth/ReportBug.html?Queue=WSDL-Compile>. I will be
    notified, and then you'll automatically be notified of progress on your
    bug as I make changes.

COPYRIGHT & LICENSE
    Copyright 2009 Alex J. G. Burzyński.

    This program is free software; you can redistribute it and/or modify it
    under the terms of the Artistic License.

