Запустить отчет от JasperServer с помощью PHP SOAP client

Я хочу запустить отчет от 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

Цель состоит в том, чтобы создать что-то вроде этого: Клиент Jasper Server PHP

Related of "Запустить отчет от JasperServer с помощью PHP SOAP client"

Это скорее комментарий, чем ответ, но, вероятно, полезно. Существует библиотека 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 с прикрепленными файлами PEAR :: SOAP
  • MIME-приложения с использованием списка почтовых рассылок SoapClient
  • Сообщения SOAP с вложениями W3C
  • Введение в PHP SOAP

На своем собственном сайте также есть некоторые примеры интеграции с веб-службами по 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.