dmt-software/jms-soap-serializer
最新稳定版本:3.0.0
Composer 安装命令:
composer require dmt-software/jms-soap-serializer
包简介
JMS serialize visitor that (de)serializes SOAP requests/responses
README 文档
README
Install
composer require dmt-software/jms-soap-serializer
Usage
Configure Serializer
use DMT\Soap\Serializer\SoapDeserializationVisitorFactory; use DMT\Soap\Serializer\SoapSerializationVisitorFactory; use DMT\Soap\Serializer\SoapMessageEventSubscriber; use JMS\Serializer\EventDispatcher\EventDispatcher; use JMS\Serializer\SerializerBuilder; $builder = SerializerBuilder::create() ->setSerializationVisitor('soap', new SoapSerializationVisitorFactory()) ->setDeserializationVisitor('soap', new SoapDeserializationVisitorFactory()) ->configureListeners( function (EventDispatcher $dispatcher) { $dispatcher->addSubscriber( new SoapMessageEventSubscriber() ); } ); $serializer = $builder->build();
Enable (de)serialization of DateTime objects
use DMT\Soap\Serializer\SoapDateHandler; use JMS\Serializer\Handler\HandlerRegistry; /** @var JMS\Serializer\SerializerBuilder $builder */ $builder->configureHandlers( function(HandlerRegistry $registry) { $registry->registerSubscribingHandler(new SoapDateHandler()); } );
Configure Serializer with SoapHeader
use DMT\Soap\Serializer\SoapHeaderInterface; use DMT\Soap\Serializer\SoapHeaderEventSubscriber; use DMT\Soap\Serializer\SoapMessageEventSubscriber; use JMS\Serializer\EventDispatcher\EventDispatcher; /** @var JMS\Serializer\SerializerBuilder $builder */ $builder->configureListeners( function (EventDispatcher $dispatcher) { $dispatcher->addSubscriber( new SoapMessageEventSubscriber() ); /** @var SoapHeaderInterface $soapHeader */ $dispatcher->addSubscriber( new SoapHeaderEventSubscriber($soapHeader) ); } );
Using SOAP 1.2
use DMT\Soap\Serializer\SoapNamespaceInterface; use DMT\Soap\Serializer\SoapSerializationVisitorFactory; /** @var JMS\Serializer\SerializerBuilder $builder */ $builder->setSerializationVisitor( 'soap', (new SoapSerializationVisitorFactory()) ->setSoapVersion(SoapNamespaceInterface::SOAP_1_2) );
Using Serializer
Serialize SOAP Request
use JMS\Serializer\Serializer; /** @var Message $requestMessage */ /** @var Serializer $serializer */ $request = $serializer->serialize($requestMessage, 'soap'); // $request = '<soap:Envelope ...><soap:Body><ns1:Message>...</ns1:Message></soap:Body></soap:Envelope>';
Deserialize SOAP Response
use JMS\Serializer\Serializer; /** @var Serializer $serializer */ $response = $serializer->deserialize('<env:Envelope ... </env:Envelope>', ResponseMessage::class, 'soap'); // $response instanceof ResponseMessage
Debugging
Failing to make a request
When creating a SOAP message you must provide a XmlRoot and XmlRootNamespace. If you forgot to provide them an exception is thrown:
Missing XmlRootName or XmlRootNamespace for {{ YourSOAPRequest }}.
To fix this, add the XmlRoot annotation to your configuration:
namespace Any\NS; use JMS\Serializer\Annotation as JMS; #[JMS\XmlRoot(name: 'YourSOAPRequest', namespace: 'http://ns-for-your-request')] class YourSOAPRequest { //... }
or if you're using yaml configuration:
Any\NS\YourSOAPRequest: ... xml_root_name: YourSOAPRequest xml_root_namespace: http://ns-for-your-request ...
统计信息
- 总下载量: 103.7k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 7
- 点击次数: 1
- 依赖项目数: 3
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2018-06-19