Home

Awesome

WSDL

This package provides tools and helpers for dealing with WSDLs.

Want to help out? 💚

Want more information about the future of this project? Check out this list of the next big projects we'll be working on.

Installation

composer require php-soap/wsdl

WSDL Loader

A WSDL loader is able to load the contents of a WSDL file.

Psr18Loader

For loading WSDL's, you might want to use a PSR-18 client to do the hard HTTP work. You'll have to include the php-soap/psr18-transport in order to use this loader:

composer require php-soap/psr18-transport
use Http\Client\Common\PluginClient;
use Soap\Psr18Transport\Wsdl\Psr18Loader;

$loader = Psr18Loader::createForClient(
    $wsdlClient = new PluginClient(
        $psr18Client,
        ...$middleware
    )
);

$contents = $loader('http://some.wsdl');

StreamWrapperLoader

Loads the content of a WSDL by using any of the enabled stream wrappers. It can either be a file, http, ...

use Soap\Wsdl\Loader\StreamWrapperLoader;

$loader = new StreamWrapperLoader(
    stream_context_create([
        'http' => [
            'method' => 'GET',
            'header'=>"User-Agent: my loader\r\n",
        ],        
    ])
);
$contents = $loader($wsdl);

FlatteningLoader

This loader can be used if your WSDL file contains WSDL or XSD imports. It will any other loader internally to load all the parts. The result of this loader is a completely flattened WSDL file which you can e.g. cache on your local filesystem.

use Soap\Wsdl\Loader\FlatteningLoader;
use Soap\Wsdl\Loader\StreamWrapperLoader;

$loader = new FlatteningLoader(new StreamWrapperLoader());

$contents = $loader($wsdl);

CallbackLoader

This loader can be used if you want to have more control about how to load a WSDL. It can be used to decorate another loader, add debug statements, apply custom loading logic, ...

use Soap\Wsdl\Loader\CallbackLoader;

$loader = new CallbackLoader(static function (string $location) use ($loader, $style): string {
    $style->write('> Loading '.$location . '...');

    $result =  $loader($location);
    $style->writeln(' DONE!');

    return $result;
})

$contents = $loader($wsdl);

WSDL CLI Tools

wsdl-tools 1.0.0

Available commands:
  completion  Dump the shell completion script
  flatten     Flatten a remote or local WSDL file into 1 file that contains all includes.
  help        Display help for a command
  list        List commands
  validate    Run validations a (flattened) WSDL file.

Flattening

./bin/wsdl flatten 'https://your/?wsdl' out.wsdl

This command will download the provided WSDL location. If any imports are detected, it will download these as well. The final result is stored in a single WSDL file.

Validating

./bin/wsdl validate out.wsdl

This command performs some basic validations on the provided WSDL file. If your WSDL contains any imports, you'll have to flatten the WSDL into a single file first.

Extensions

By installing additional packages from php-soap, additional commands will be added to the WSDL tools:

Custom WSDL Loader

By default, all CLI tools use the StreamWrapperLoader. All CLI tools have a --loader=file.php option that can be used to apply a custom WSDL loader. This can be handy if your WSDL is located behind authentication or if you want to get control over the HTTP level.

Example custom PHP loader:

<?php

use Soap\Wsdl\Loader\StreamWrapperLoader;

return new StreamWrapperLoader(
    stream_context_create([
        'http' => [
            'method' => 'GET',
            'header'=> sprintf('Authorization: Basic %s', base64_encode('username:password')),
        ],        
    ])
);

WSDL Validators

This package contains some tools you can use to validate the format of WSDL files. It uses the power of veewee/xml DOM Validators internally.

SchemaSyntaxValidator

Validates all defined schemas and returns a list of all issues.

use Soap\Wsdl\Loader\StreamWrapperLoader;
use Soap\Wsdl\Xml\Validator;
use VeeWee\Xml\Dom\Document;

$wsdl = Document::fromXmlString((new StreamWrapperLoader())($file));

echo "Validating Schemas".PHP_EOL;
$issues = $wsdl->validate(new Validator\SchemaSyntaxValidator());
echo ($issues->count() ? $issues->toString() : '🟢 ALL GOOD').PHP_EOL;

WsdlSyntaxValidator

Validates the WSDL file and returns a list of all issues.

use Soap\Wsdl\Loader\StreamWrapperLoader;
use Soap\Wsdl\Xml\Validator;
use VeeWee\Xml\Dom\Document;

$wsdl = Document::fromXmlString((new StreamWrapperLoader())($file));

echo "Validating WSDL:".PHP_EOL;
$issues = $wsdl->validate(new Validator\WsdlSyntaxValidator());
echo ($issues->count() ? $issues->toString() : '🟢 ALL GOOD').PHP_EOL;