Мы создали службу SOAP для получения запроса, однако в ответ необходимо включить дополнительное значение, и мы не знаем, как его добавить.
Нам нужно добавить xmlns="http://some-url.co.uk/"
в это: <SOAP-ENV:PrintLocationResponse>
, чтобы оно выглядело так: <SOAP-ENV:PrintLocationResponse xmlns="http://some-url.co.uk/">
SOAP Служба получает этот запрос:
<?xml version="1.0" encoding="UTF-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<PrintLocation xmlns="http://some-url.co.uk/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<alertMsg>
[ some message goes here]
</alertMsg>
</PrintLocation>
</s:Body>
</s:Envelope>
Служба SOAP отвечает следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<SOAP-ENV:PrintLocationResponse>
<PrintLocationResult>
Message contents goes here
</PrintLocationResult>
</SOAP-ENV:PrintLocationResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Нам необходимо добавить xmlns="http://some-url.co.uk/"
к этой части ответа: <SOAP-ENV:PrintLocationResponse>
, чтобы ответ был таким:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<SOAP-ENV:PrintLocationResponse xmlns="http://some-url.co.uk/">
<PrintLocationResult>
Message contents goes here
</PrintLocationResult>
</SOAP-ENV:PrintLocationResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Мы не знаем, как добавить xmlns="http://some-url.co.uk/"
в ответ выше.
Контроллер, управляющий запросом и ответ возвращается следующим образом:
public function indexAction(Request $request)
{
$soapServer = new \SoapServer('wsdl/hello.wsdl');
$soapServer->setObject($this->get('hello_service'));
$response = new Response();
$response->headers->set('Content-Type', 'text/xml; charset=ISO-8859-1');
ob_start();
$soapServer->handle();
return $response;
}
Этот $soapServer = new \SoapServer('wsdl/hello.wsdl');
вызывает hello.wsdl , который выглядит следующим образом:
<?xml version="1.0" encoding="ISO-8859-1"?>
<wsdl:definitions
xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
>
<wsdl:message name="helloIn">
<part name="alertMsg" type="xsd:string" />
</wsdl:message>
<wsdl:message name="helloOut">
<part name="PrintLocationResult" type="xsd:string" />
</wsdl:message>
<wsdl:portType name="hellowsdlPortType">
<wsdl:operation name="PrintLocation">
<wsdl:input message="tns:helloIn"/>
<wsdl:output message="tns:helloOut"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="hellowsdlBinding" type="tns:hellowsdlPortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="PrintLocation">
<soap:operation soapAction="http://some-url.co.uk/PrintLocation" style="rpc"/>
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="hellowsdl">
<wsdl:port name="hellowsdlPort" binding="tns:hellowsdlBinding">
<soap:address location="http://backoffice.system/soap" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Приведенный выше WSDL является немного загадки для нас. Мы исправили пример, найденный здесь: https://symfony.com/doc/2.7/controller/soap_web_service.html
Этот $soapServer->setObject($this->get('hello_service'));
вызывает HelloService. php, который выглядит так:
class HelloService
{
/**
* @var EntityManager
*/
private $entityManager;
public function __construct(EntityManager $entityManager)
{
$this->entityManager = $entityManager;
}
public function PrintLocation($msg)
{
$log = new TempIressMsgThree($msg);
$xml = simplexml_load_string($log->getMsg());
$json = json_encode($xml);
$array = json_decode($json,TRUE);
$xml='<?xml version="1.0" encoding="UTF-8"?>
<message xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.origoservices.com">
<m_control>
Response message contents goes here.
</m_control>
</message>';
return $xml;
}
Может кто-нибудь помочь?
Чтобы уточнить, нам нужно добавить xmlns="http://some-url.co.uk/"
в это: <SOAP-ENV:PrintLocationResponse>
, чтобы оно читалось следующим образом <SOAP-ENV:PrintLocationResponse xmlns="http://some-url.co.uk/">