Я хочу запустить отчет от JasperServer с помощью PHP SOAP-клиента. Я нашел этот пример в Интернете, но хочу приложить источник данных XML, используемый для данных отчета, и я не уверен, как его следует правильно прикрепить.
Как я могу подключить свой XML-источник данных к запросу SOAP, приемлемому для Jasper Server?
public function requestReport($report, $format, $params) { $params_xml = ""; foreach ($params as $name => $value) { $params_xml .= "<parameter name=\"$name\"><![CDATA[$value]]></parameter>\n"; } $request = " <request operationName=\"runReport\" locale=\"en\"> <argument name=\"RUN_OUTPUT_FORMAT\">$format</argument> <resourceDescriptor name=\"\" wsType=\"\" uriString=\"$report\" isNew=\"false\"> <label>null</label> $params_xml </resourceDescriptor> </request> "; $client = new SoapClient(null, array( 'location' => $this->url, 'uri' => 'urn:', 'login' => $this->username, 'password' => $this->password, 'trace' => 1, 'exception'=> 1, 'soap_version' => SOAP_1_1, 'style' => SOAP_RPC, 'use' => SOAP_LITERAL )); $pdf = null; try { $result = $client->__soapCall('runReport', array( new SoapParam($request,"requestXmlString") )); $pdf = $this->parseReponseWithReportData( $client->__getLastResponseHeaders(), $client->__getLastResponse()); } catch(SoapFault $exception) { $responseHeaders = $client->__getLastResponseHeaders(); if ($exception->faultstring == "looks like we got no XML document" && strpos($responseHeaders, "Content-Type: multipart/related;") !== false) { $pdf = $this->parseReponseWithReportData($responseHeaders, $client->__getLastResponse()); } else { throw $exception; } } if ($pdf) return $pdf; else throw new Exception("Jasper did not return PDF data. Instead got: \n$pdf"); }
Полный пример, который я нашел здесь, https://gist.github.com/26205
Цель состоит в том, чтобы создать что-то вроде этого:
Это скорее комментарий, чем ответ, но, вероятно, полезно. Существует библиотека WSO2 WSF / PHP :
WSO2 WSF / PHP предназначен для заполнения некоторых пробелов в расширении PHP. WSO2 WSF / PHP – это реализация с открытым исходным кодом, такая как расширение SOAP, и поддерживает MTOM, WS-Addressing, WS-Security и WS-RelayableMessaging. WSO2 WSF / PHP поддерживает аналогичный API с интерфейсом расширения SOAP. Планируется обернуть API для предоставления того же API расширения SOAP; он будет написан на C.
Я думаю, вы ищете Binary attachment (MTOM) .
Полезны также следующие ссылки:
На своем собственном сайте также есть некоторые примеры интеграции с веб-службами по php.
Есть ли помощь в этом?
Запрос SOAP
не поддерживает привязку.
Идея заключается в том, как вы обрабатываете свой запрос. Единственный способ, с помощью которого я использую SOAP-запросы с вложениями, – Base64 Encode
данные, которые нужно подключить, и добавлять их в текстовый узел.
Добавьте тег с атрибутом encoded=
" true/false"
. Если это содержимое файла, укажите имя файла в запросе.
На стороне сервера, если вы найдете узел с атрибутом encoded="true"
, вы можете взять данные с узла, Base64Decode и делать все, что вам нужно.
Идея Base64 заключается в том, чтобы избежать многих специальных символов, которые SOAP-запрос не поддерживает в запросе. Некоторые процессоры SOAP имеют опцию с атрибутом « encoded
».
Вы хотите включить XML-файл в ваш SOAP-запрос или ответ?
Вы можете закодировать его base64, как в письмах, а затем попросить пользователя на другом конце его декодировать.
$data = chunk_split(base64_encode($xml_data));
Затем просто добавьте его в отдельный тег xml в вашем запросе / ответе SOAP.