2

PHP SOAP クライアントを使用して JasperServer からレポートを実行したいと考えています。この例をオンラインで見つけましたが、レポート データに使用される XML データ ソースを添付したいのですが、どのように正しく添付すればよいかわかりません。

Jasper Server が受け入れられるように、XML データ ソースを SOAP リクエストに添付するにはどうすればよいですか?

  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 サーバー PHP クライアント

4

4 に答える 4

0

SOAP クエリまたは応答に xml ファイルを含めたいですか?

電子メールのように base64 でエンコードし、相手側のユーザーにデコードを要求することができます。

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

次に、SOAP クエリ/応答の別の xml タグに追加します。

于 2011-12-16T18:35:23.813 に答える
0

SOAPrequest には添付ファイルのサポートがありません。

アイデアは、リクエストをどのように処理するかです。添付ファイル付きのSOAP リクエストを使用する唯一の方法はBase64 Encode、データを添付し、それを Text ノードに追加することです。

encoded=属性"のタグを追加しますtrue/false"。ファイル コンテンツの場合は、要求でファイルの名前を指定します。

サーバー側では、属性を持つノードが見つかった場合、encoded="true"ノードからデータを取得し、それを Base64Decode して、必要なことを行うことができます。

Base64 の考え方は、SOAP リクエストが Request でサポートしていない多くの特殊文字を避けることです。一部の SOAP プロセッサには、" encoded" 属性のオプションがあります。

于 2011-12-13T11:07:24.733 に答える