This package provides tools and helpers for dealing with WSDLs.
Want more information about the future of this project? Check out this list of the next big projects we'll be working on.
composer require php-soap/wsdl
A WSDL loader is able to load the contents of a WSDL file.
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');
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);
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);
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-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.
./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.
./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.
By installing additional packages from php-soap
, additional commands will be added to the WSDL tools:
- wsdl-reader: Will install inspect commands that will give you a human-readable version of all information inside your WSDL.
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')),
],
])
);
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.
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;
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;