Запустите отчет из JasperServer, используя PHP SOAP-клиент - PullRequest
2 голосов
/ 07 декабря 2011

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

Ответы [ 4 ]

1 голос
/ 15 декабря 2011

Это скорее комментарий, чем ответ, но, вероятно, полезный.Существует библиотека под названием WSO2 WSF / PHP :

WSO2 WSF / PHP, предназначенная для заполнения некоторых пробелов в расширении PHP.WSO2 WSF / PHP - это реализация с открытым исходным кодом, такая как расширение SOAP, которая поддерживает MTOM, WS-Addressing, WS-Security и WS-RelaiableMessaging.WSO2 WSF / PHP поддерживает API, аналогичный API-интерфейсу расширения SOAP.Есть планы обернуть API, чтобы обеспечить тот же API расширения SOAP;он будет написан на C.

Я думаю, вы ищете Двоичное вложение (MTOM) .

Следующие ссылки также могут быть полезны:

0 голосов
/ 16 декабря 2011

Вы хотите включить XML-файл в свой запрос или ответ SOAP?

Вы можете закодировать его base64, как в электронных письмах, а затем потребовать, чтобы пользователь на другом конце расшифровал его.

$data = chunk_split(base64_encode($xml_data));

Затем просто добавьте его в отдельный тег XML в своем запросе / ответе SOAP.

0 голосов
/ 13 декабря 2011

SOAP запрос не имеет поддержки вложений.

Идея в том, как вы обрабатываете свой запрос. Единственный способ, которым я использую запросы SOAP с вложениями, - это Base64 Encode данные, которые нужно присоединить, и добавление их в текстовый узел.

Добавьте тег с атрибутом encoded= "true/false". Если это содержимое файла, укажите имя файла в запросе.

На стороне сервера, если вы найдете узел с атрибутом encoded="true", вы можете взять данные с узла, Base64, декодировать их и делать все, что вам нужно.

Идея Base64 состоит в том, чтобы избежать многих специальных символов, которые SOAP-запрос не поддерживает в Request. Некоторые процессоры SOAP имеют опцию с атрибутом "encoded".

0 голосов
/ 08 декабря 2011

На своем собственном сайте у них также есть несколько примеров интеграции с веб-сервисами через php.

Есть ли какая-нибудь помощь для этого?

...