ヘッダーをスキップ
Oracle Business Intelligence新機能ガイド
リリース10.1.3.4.1
B54795-01
  目次
目次

戻る
戻る
 
次へ
次へ
 

27 Oracle Business Intelligence PublisherのWebサービス

この章では、Oracle BI PublisherのWebサービスAPIとリリース10.1.3.3.1〜10.1.3.3.3の関連情報について説明します。リリース10.1.3.4で使用できるOracle BI Publisher用WebサービスAPIの詳細は、『Oracle Business Intelligence Publisher管理者および開発者ガイド』の「BI PublisherのWebサービスの使用」を参照してください。

この章では、Webサービスとアプリケーション・プログラミング・インタフェースに関して基本的な知識があることを前提にしています。この章の内容は次のとおりです。

27.1 Oracle BI PublisherのWebサービスの概要

この項では、Oracle BI PublisherのWebサービスの概要について説明します。

27.1.1 機能の概要

PublicReportServiceは、Oracle BI Publisherの公開APIがラップされているWebサービスです。リリース10.1.3.3.1から、次の操作がサポートされるようになりました。これらの操作は、次の3つのカテゴリにグループ化できます。

  • 権限を検証する操作

  • レポートとリポジトリに関する情報を取得する操作

  • レポートの実行とスケジュールを行う操作

27.1.2 PublicReportServiceのWSDL定義

Oracle BI Publisherのインストールやデプロイを行うと、PublicReportServiceに関連付けられた一意のURLがあります。

http://<host>:<port>/xmlpserver/services/PublicReportService?wsdl

このURLをブラウザに入力(その際に、適切なホストとポート番号に置換)すると、BI Publisherでサポートされている公開Webサービス用のフルWSDL(Web Services Description Language)定義が表示されます。

J2EEサーバーによっては、このURLではこのWebサービスのWSDLが適切に表示されないサーバーがあります。フル定義の詳細は、第27.5項「Oracle BI PublisherのWebサービスWSDL」を参照してください。

27.2 Oracle BI PublisherのWebサービスのデータ型

この項の内容は次のとおりです。

27.2.1 基本データ型

Oracle BI PublisherのWebサービスでは、次の基本データ型が使用されます。

  • xsd:boolean = ブール(例: true、false)

  • xsd:xsd:dateTime = 日付と時間(例: 2007-10-26T21:32:52)

  • xsd:int = 整数(例: 23)

  • xsd:string = 文字列(例: /Home/Shared/HR Reports/Salary Report)

  • xsd:base64Binary = 64ビットのバイナリ値(例: PDFやHTMLなどの形式のドキュメント)

27.2.2 XMLデータ型とJavaデータ型とのマッピング

BI PublisherのWebサービスでは、RPCでエンコードされたフォーマットが使用されます。WebサービスのXMLスキーマ・データ型とJavaデータ型とのマッピングは、SOAP開発環境によって異なります。XMLスキーマ・データ型とOracle JDeveloperデータ型のマッピングを次に示します。

  • xsd:boolean = java.lang.Boolean

  • xsd:dateTime = java.util.Date

  • xsd:int = java.lang.Integer

  • xsd:string = java.lang.String

  • xsd:base64Binary = java.lang.Byte

27.2.3 複合型

Oracle BI PublisherのWebサービスでは、次の複合型が定義されて使用されます。

ArrayOf_xsd_string
<complexType name="ArrayOf_xsd_string">
 <complexContent>
  <restriction base="soapenc:Array">
   <attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:string[]"/>
  </restriction>
 </complexContent>
</complexType>

説明: 他の複合型で使用されている文字列の配列。

ParamNameValue
<complexType name="ParamNameValue">
 <sequence>
  <element name="multiValuesAllowed" type="xsd:boolean" />
  <element name="name" nillable="true" type="xsd:string" />
  <element name="values" nillable="true" type="impl:ArrayOf_xsd_string" />
 </sequence>
</complexType>

説明: パラメータ名とパラメータ値配列。

ArrayOfParamNameValue
<complexType name="ArrayOfParamNameValue">
 <complexContent>
  <restriction base="soapenc:Array">
   <attribute ref="soapenc:arrayType" wsdl:arrayType="impl:ParamNameValue[]" />  </restriction>
 </complexContent>
</complexType>

説明: ParamNameValueの配列。

ReportDefinition
<complexType name="ReportDefinition">
 <sequence>
  <element name="defaultOutputFormat" nillable="true" type="xsd:string" />
  <element name="defaultTemplateId" nillable="true" type="xsd:string" />
  <element name="parameterNames" nillable="true"
    type="impl:ArrayOf_xsd_string" />
  <element name="reportParameterNameValues" nillable="true"
    type="impl:ArrayOfParamNameValue" />
  <element name="templateIds" nillable="true" type="impl:ArrayOf_xsd_string" />
 </sequence>
</complexType>

説明: getReportDefinitionから返されるオブジェクト。

ItemData
<complexType name="ItemData"> <sequence>
  <element name="absolutePath" nillable="true" type="xsd:string" />
  <element name="creationDate" nillable="true" type="xsd:dateTime" />
  <element name="displayName" nillable="true" type="xsd:string" />
  <element name="fileName" nillable=
"true" type="xsd:string" />
  <element name="lastModified" nillable="true" type="xsd:dateTime" />   <element name="lastModifier" nillable="true" type="xsd:string" />
  <element name="owner" nillable="true" type="xsd:string" />
  <element name="parentAbsolutePath" nillable="true" type="xsd:string" />
  <element name="type" nillable="true" type="xsd:string" />  </sequence>
</complexType>

説明: レポート・リポジトリに格納されているオブジェクトの説明。

ArrayOfItemData
<complexType name="ArrayOfItemData">
 <complexContent>
  <restriction base="soapenc:Array">
   <attribute ref="soapenc:arrayType"
 wsdl:arrayType="impl:ItemData[]" />   </restriction>
 </complexContent>
</complexType>

説明: ItemDataの配列(レポート・リポジトリに格納されているオブジェクト)。

ReportRequest
<complexType name="ReportRequest"> <sequence>
  <element name="attributeFormat" nillable="true" type="xsd:string"/>
  <element name="attributeLocale" nillable="true" type="xsd:string"/>
  <element name="attributeTemplate" nillable="true" type="xsd:string"/>
  <element name="parameterNameValues" nillable="true"    type="impl:ArrayOfParamNameValue"/>
  <element name="reportAbsolutePath" nillable="false" type="xsd:string"/>
 </sequence>
</complexType>

説明: レポートの実行に必要な設定の集合。attributeFormatの許容値は、使用されるテンプレートのタイプによって異なります(たとえば、PDFテンプレートではPDF出力の生成のみ可能)。

ReportResponse
<complexType name="ReportResponse">
 <sequence>
  <element name="reportBytes" nillable="true" type="xsd:base64Binary" />
  <element name="reportContentType" nillable="true" type="xsd:string" />
  <element name="reportLocale" nillable="true" type="xsd:string" />
 </sequence>
</complexType>

説明: runReport操作から返されるドキュメント(ReportRequest内でattributeFormatに設定されているファイル形式)、ドキュメントのタイプ、およびドキュメントのロケール。

EMailDeliveryOption
<complexType name="EMailDeliveryOption">
 <sequence>
  <element name="emailBCC" nillable="true" type="xsd:string"/>
  <element name="emailBody" nillable="true" type="xsd:string"/>
  <element name="emailCC" nillable="true" type="xsd:string"/>
  <element name="emailFrom" nillable="false" type="xsd:string"/>
  <element name="emailReplyTo" nillable="true" type="xsd:string"/>
  <element name="emailSubject" nillable="false" type="xsd:string"/>
  <element name="emailTo" nillable="false" type="xsd:string"/> </sequence>
</complexType>

説明: レポートを電子メールで配信するために設定するオプション。

FaxDeliveryOption
<complexType name="FaxDeliveryOption">
 <sequence>
  <element name="faxNumber" nillable="false" type="xsd:string"/>
  <element name="faxServer" nillable="false" type="xsd:string"/> </sequence>
</complexType>

説明: レポートをFAXで配信するために設定するオプション。

FTPDeliveryOption
<complexType name="FTPDeliveryOption">
 <sequence>
  <element name="ftpServerName" nillable="false" type="xsd:string"/>
  <element name="ftpUserName" nillable="false" type="xsd:string"/>
  <element name="ftpUserPassword" nillable="false" type="xsd:string"/>
  <element name="remoteFile" nillable="false" type="xsd:string"/>
  <element name="sftpOption" type="xsd:boolean"/>
 </sequence>
</complexType>

説明: レポートをFTPで配信するために設定するオプション。

LocalDeliveryOption
<complexType name="LocalDeliveryOption">
 <sequence>
  <element name="destination" nillable="false" type="xsd:string"/>
 </sequence>
</complexType>

説明: レポートをBI Publisherリポジトリに配信するために設定するオプション。

PrintDeliveryOption
<complexType name="PrintDeliveryOption">
 <sequence>
  <element name="printNumberOfCopy" nillable="true" type="xsd:string"/>
  <element name="printRange" nillable="true" type="xsd:string"/>
  <element name="printSide" nillable="true" type="xsd:string"/>
  <element name="printTray" nillable="true" type="xsd:string"/>
  <element name="printerName" nillable="false" type="xsd:string"/>
 </sequence>
</complexType>

説明: レポートをプリンタに配信するために設定するオプション。

WebDAVDeliveryOption
<complexType name="WebDAVDeliveryOption">
 <sequence>
  <element name="deliveryAuthType" nillable="true" type="xsd:string"/>
  <element name="deliveryAuthTypeBasic" nillable="true" type="xsd:string"/>
  <element name="deliveryAuthTypeDigest" nillable="true" type="xsd:string"/>
  <element name="password" nillable="true" type="xsd:string"/>
  <element name="remoteFilePath" nillable="false" type="xsd:string"/>
  <element name="server" nillable="false" type="xsd:string"/>
  <element name="userName" nillable="true" type="xsd:string"/> </sequence>
</complexType>

説明: レポートをWeb-based Distributed Authoring and Versioning(WebDAV)で配信するために設定するオプション。

DeliveryRequest
<complexType name="DeliveryRequest">
 <sequence>
  <element name="emailOption" nillable="true" type="impl:EMailDeliveryOption"/>
  <element name="faxOption" nillable="true" type="impl:FaxDeliveryOption"/>
  <element name="ftpOption" nillable="true" type="impl:FTPDeliveryOption"/>
  <element name="localOption" nillable="true" type="impl:LocalDeliveryOption"/>
  <element name="printOption" nillable="true" type="impl:PrintDeliveryOption"/>
  <element name="webDAVOption" nillable="true"
    type="impl:WebDAVDeliveryOption"/>
 </sequence>
</complexType>

説明: レポートを複数の配信先に配信するためのオプションがあるオブジェクト。

ScheduleRequest
<complexType name="ScheduleRequest">
 <sequence>
  <element name="deliveryRequest" nillable="false"
    type="impl:DeliveryRequest"/>
  <element name="endDate" nillable="true" type="xsd:dateTime"/>
  <element name="jobCalendar" nillable="true" type="xsd:string"/>
  <element name="jobLocale" nillable="true" type="xsd:string"/>
  <element name="jobTZ" nillable="true" type="xsd:string"/>
  <element name="notificationTo" nillable="true" type="xsd:string"/>
  <element name="notifyWhenFailed" type="xsd:boolean" />
  <element name="notifyWhenSuccess"  type="xsd:boolean" />
  <element name="notifyWhenWarning"  type="xsd:boolean" />
  <element name="repeatCount" type="xsd:int"/>
  <element name="repeatInterval" type="xsd:int"/>
  <element name="reportRequest" nillable="false" type="impl:ReportRequest"/>
  <element name="saveDataOption"  type="xsd:boolean" />
  <element name="saveOutputOption"  type="xsd:boolean" />
  <element name="scheduleBurstringOption"  type="xsd:boolean" />
  <element name="schedulePublicOption"  type="xsd:boolean" />
  <element name="startDate" nillable="true" type="xsd:dateTime"/>
  <element name="useUTF8Option"  type="xsd:boolean" />
  <element name="userJobName" nillable="true" type="xsd:string"/>
 </sequence>
</complexType>

説明: レポートをスケジュールするためのオプション。

AccessDeniedException
<complexType name="AccessDeniedException">
 <sequence />
</complexType>

説明: 操作を実行するための適切な権限がユーザー資格証明にない場合に返されるメッセージ。

OperationFailedException
<complexType name="OperationFailedException">
 <sequence />
</complexType>

説明: 操作が失敗した場合に返されるメッセージ。

InvalidParametersException
<complexType name="InvalidParametersException">
 <sequence />
</complexType>

説明: 無効なパラメータがWebサービスの操作で渡された場合に返されるメッセージ。

27.3 Oracle BI PublisherのWebサービス操作

Oracle BI PublisherのWebサービスで実行できる操作は、次のカテゴリに分類できます。

この項では、入力メッセージ、出力メッセージおよび発生する場合がある例外メッセージについて説明します。また、各操作に対応するサンプル・コードも記載しています。

27.3.1 サンプル・コードの使用について

次の項に記載されている各操作には、サンプル・コードが記述されています。サンプル・コードは、Apache Axisテクノロジに基づいています。サンプル・コードを操作する前に、前提条件のファイルがCLASSPATHに記述されていることを確認し、必要なBI Publisherスタブ・クラスが生成されてプロジェクトにインポートされていることを確認する必要があります。

必須jarファイルの記述

記述するjarファイルを次に示します。

  • 次のjarファイルをCLASSPATHに記述します(これらのファイルはWebから入手可能)。

    • activation.jar

    • mail-1.4.jar

  • xmlpserver.jarファイル(Oracle BI Publisherでインストールされている)をCLASSPATHに記述します。これによって、すべての必要なリクエスト・オブジェクトとレスポンス・オブジェクトが用意されます。この方法により、リクエストとレスポンスのスタブ・オブジェクトを生成する必要がなくなります。

必要なBI Publisherスタブ・クラスの生成

必要なBI Publisherスタブ・クラスを生成してサンプル用プロジェクトにインポートするには、次を実行します。

  1. BI PublisherのWebサービスWSDLをダウンロードします。

  2. コマンド・ファイルで次を実行します。

    export CLASSPATH="D:/bin/axis-1_4/lib/axis.jar;D:/bin/axis-1_4/lib/jaxrpc.jar;D:/bin/axis-1_4/lib/saaj.jar;D:/bin/axis-1_4/lib/commons-logging.jar;D:/bin/axis-1_4/lib/commons-discovery.jar;D:/bin/axis-1_4/lib/wsdl4j.jar"echo $CLASSPATH
    java org.apache.axis.wsdl.WSDL2Java PublicReportService.wsdl
    

これによって、次のBI Publisherスタブ・クラスが生成されてプロジェクトにインポートされます。

import com.oracle.xmlns.oxp.service.PublicReportService.ItemData;
import com.oracle.xmlns.oxp.service.PublicReportService.ReportRequest;
import com.oracle.xmlns.oxp.service.PublicReportService.ReportResponse;
import com.oracle.xmlns.oxp.service.PublicReportService.ParamNameValue;
import com.oracle.xmlns.oxp.service.PublicReportService.ReportDefinition;
import com.oracle.xmlns.oxp.service.PublicReportService.ScheduleRequest;
import com.oracle.xmlns.oxp.service.PublicReportService.DeliveryRequest;
import com.oracle.xmlns.oxp.service.PublicReportService.EMailDeliveryOption;

必要なApache AxisクラスとJavaスタブ・クラスのインポート

生成されたBI Publisher Webサービス用スタブ・クラスをインポートすることに加えて、次のApache AxisクラスとJavaクラスもインポートする必要があります。

import  java.io.FileOutputStream;
import  java.io.OutputStream;
import  java.util.Calendar;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.apache.axis.encoding.ser.BeanDeserializerFactory;
import org.apache.axis.encoding.ser.BeanSerializerFactory;
import  javax.xml.namespace.QName;
import  javax.xml.rpc.ParameterMode;
import  java.net.URL;

27.3.2 権限を検証するための操作

validateLogin

validateLoginを使用して、Oracle BI Publisherレポート・サーバーにアクセスする権限がUserIDとPasswordにあることを検証します。

入力メッセージ = validateLoginRequest

<wsdl:message name="validateLoginRequest">
  <wsdl:part name="userID" type="xsd:string"/>
  <wsdl:part name="password" type="xsd:string"/>
</wsdl:message>

出力メッセージ = validateLoginResponse

<wsdl:message name="validateLoginResponse">
  <wsdl:part name="validateLoginReturn" type="xsd:boolean"/>
</wsdl:message>

例27-1 validateLoginのサンプル・コード

    public static void validateLogin() throws Exception {

        final String bipEndpoint = "http://mycompany.com:9999/xmlpserver/services/PublicReportService?wsdl";
        final String bipNamespace = "http://xmlns.oracle.com/oxp/service/PublicReportService";
        final String reportPath = "/HR Manager/Employee Salary Report/Employee Salary Report.xdo";

        service = new Service();
        call = (Call) service.createCall();
        call.setTargetEndpointAddress(new URL(bipEndpoint));

        System.out.println("TESTING login Service BEGIN");

        call.setOperationName(new QName(bipNamespace, "validateLogin"));
        call.addParameter("userID", XMLType.XSD_STRING, ParameterMode.IN);
        call.addParameter("password", XMLType.XSD_STRING, ParameterMode.IN);
        call.setReturnType(XMLType.XSD_BOOLEAN);

        // issue the request
        Boolean valid = (Boolean) call.invoke(
            new Object[] {"administrator", "Administrator"});

        if (valid) { System.out.println("user valid"); }
        else { System.out.println("user invalid");  }
        System.out.println("Success for validateLogin");
    }
hasReportAccess

hasReportAccessを使用して、特定のレポートにアクセスする権限がUserIDとPasswordにあることを検証します。

入力メッセージ = hasReportAccessRequest

<wsdl:message name="hasReportAccessRequest">
  <wsdl:part name="reportAbsolutePath" type="xsd:string"/>
  <wsdl:part name="userID" type="xsd:string"/>
  <wsdl:part name="password" type="xsd:string"/>
</wsdl:message>

出力メッセージ =hasReportAccessResponse

<wsdl:message name="hasReportAccessResponse">
  <wsdl:part name="hasReportAccessReturn" type="xsd:boolean"/>
</wsdl:message>

発生する場合がある例外:

InvalidParametersException

発生する場合がある例外の詳細は、第27.3.5項「エラー用メッセージ」を参照してください。

例27-2 hasReportAccessのサンプル・コード

    public static void hasReportAccess(String reportPath) throws Exception {

        final String bipEndpoint = "http://mycompany.com:9999/xmlpserver/services/PublicReportService?wsdl";
        //final String bipEndpoint = "http://12.123.8232.107/xmlpserver/services/PublicReportService?wsdl";
        final String bipNamespace = "http://xmlns.oracle.com/oxp/service/PublicReportService";

        service = new Service();
        call = (Call) service.createCall();
        call.setTargetEndpointAddress(new URL(bipEndpoint));

        System.out.println("TESTING hasReportAccess BEGIN");

        call.setOperationName(new QName(bipNamespace, "hasReportAccess"));
        call.addParameter("reportAbsolutePath", XMLType.XSD_STRING, ParameterMode.IN);
        call.addParameter("userID", XMLType.XSD_STRING, ParameterMode.IN);
        call.addParameter("password", XMLType.XSD_STRING, ParameterMode.IN);
        call.setReturnType(XMLType.XSD_BOOLEAN);

        // issue the request
        Boolean valid = (Boolean) call.invoke(
            new Object[] {reportPath, "administrator", "Administrator"});

        if (valid==true) { System.out.println("User has access."); }
        else { System.out.println("User does not have access");  }
        System.out.println("Success for AccessLogin");
    }

27.3.3 レポートとリポジトリに関する情報を取得する操作

getFolderContents

getFolderContentsは、フォルダ内のすべてのアイテムを取得します。この操作では、指定されたフォルダ内のすべてのレポートとフォルダが返されます。これらのアイテムを使用して、実行するレポートや、さらに検索を行ってレポートを特定するフォルダを決定できます。

入力メッセージ = getFolderContentsRequest

<wsdl:message name="getFolderContentsRequest">
  <wsdl:part name="folderAbsolutePath" type="xsd:string"/>
  <wsdl:part name="userID" type="xsd:string"/>
  <wsdl:part name="password" type="xsd:string"/>
</wsdl:message>

出力メッセージ = getFolderContentsResponse

<wsdl:message name="getFolderContentsResponse">
  <wsdl:part name="getFolderContentsReturn" type="impl:ArrayOfItemData"/>
</wsdl:message>

発生する場合がある例外:

InvalidParametersExceptionAccessDeniedException
OperationFailedException

発生する場合がある例外の詳細は、第27.3.5項「エラー用メッセージ」を参照してください。

例27-3 getFolderContentsのサンプル・コード

    public static void getFolderContent(String reportPath) throws Exception {

        final String bipEndpoint = "http://mycompany.com:9999/xmlpserver/services/PublicReportService?wsdl";
        final String bipNamespace = "http://xmlns.oracle.com/oxp/service/PublicReportService";

        service = new Service();
        call = (Call) service.createCall();
        call.setTargetEndpointAddress(new URL(bipEndpoint));

        System.out.println("TESTING getFolderContent Service BEGIN");
        // register the ReportDefinition class
        QName reportDef = new QName(bipNamespace, "ReportDefinition");
        call.registerTypeMapping(ReportDefinition.class, reportDef,
                        BeanSerializerFactory.class, BeanDeserializerFactory.class);

        // register the ParamNameValue class
        QName nmvals = new QName(bipNamespace, "ParamNameValue");
        call.registerTypeMapping(ParamNameValue.class, nmvals, BeanSerializerFactory.class, BeanDeserializerFactory.class);

        call.setOperationName(new QName(bipNamespace, "getFolderContents"));
        call.addParameter("reportAbsolutePath", XMLType.XSD_STRING, ParameterMode.IN);
        call.addParameter("userID", XMLType.XSD_STRING, ParameterMode.IN);
        call.addParameter("password", XMLType.XSD_STRING, ParameterMode.IN);
        call.setReturnClass(ItemData [].class);

        // issue the request
        ItemData items[] =  (ItemData []) call.invoke(
            new Object[] { reportPath, "administrator", "Administrator"});

        for (int i=0; i<items.length; i++) {
            System.out.println(items[i].getDisplayName());
        }
        System.out.println("Success for GetFolderContent");
    }
getReportDefinition

getReportDefinitionを使用して、レポートに関する情報(デフォルトのテンプレート、出力タイプ、テンプレートIDのリストなど)を取得します。テンプレートIDのリストを取得すると、デフォルト以外のテンプレートでレポートを生成することができます。

入力メッセージ = getReportDefinitionRequest

<wsdl:message name="getReportDefinitionRequest">
  <wsdl:part name="reportAbsolutePath" type="xsd:string"/>
  <wsdl:part name="userID" type="xsd:string"/>
  <wsdl:part name="password" type="xsd:string"/>
</wsdl:message>

出力メッセージ = getReportDefinitionResponse

<wsdl:message name="getReportDefinitionResponse">
  <wsdl:part name="getReportDefinitionReturn" type="impl:ReportDefinition"/>
</wsdl:message>

発生する場合がある例外:

InvalidParametersException
AccessDeniedException
OperationFailedException

発生する場合がある例外の詳細は、第27.3.5項「エラー用メッセージ」を参照してください。

例27-4 getReportDefinitionのサンプル・コード


    public static void getReportDef(String xdofile) throws Exception {

        final String bipEndpoint = "http://mycompany.com:9999/xmlpserver/services/PublicReportService?wsdl";
        final String bipNamespace = "http://xmlns.oracle.com/oxp/service/PublicReportService";

        service = new Service();
        call = (Call) service.createCall();
        call.setTargetEndpointAddress(new URL(bipEndpoint));

        System.out.println("BEGIN TESTING getReportDefinition");

        // register the ReportDefinition class
        QName reportDef = new QName(bipNamespace, "ReportDefinition");
        call.registerTypeMapping(ReportDefinition.class, reportDef,
                        BeanSerializerFactory.class, BeanDeserializerFactory.class);

        // register the ParamNameValue class
        QName nmvals = new QName(bipNamespace, "ParamNameValue");
        call.registerTypeMapping(ParamNameValue.class, nmvals, BeanSerializerFactory.class, BeanDeserializerFactory.class);

        call.setOperationName(new QName(bipNamespace, "getReportDefinition"));
        call.addParameter("reportAbsolutePath", XMLType.XSD_STRING, ParameterMode.IN);
        call.addParameter("userID", XMLType.XSD_STRING, ParameterMode.IN);
        call.addParameter("password", XMLType.XSD_STRING, ParameterMode.IN);
        call.setReturnClass(ReportDefinition.class);

        // issue the request
        ReportDefinition reportDefn = (ReportDefinition) call.invoke(
            new Object[] { xdofile, "administrator", "Administrator"});

        System.out.println("Report Definition Returns with \n Default Output Format = " + reportDefn.getDefaultOutputFormat());
        ParamNameValue params [] = reportDefn.getReportParameterNameValues();

        if (params != null) {
            for (int i = 0; i < params.length; i++) {
                System.out.print("Parameter " + params[i].getName() + ":");
                if (params[i].getValues() != null) {
                    for (int j = 0;  j < params[i].getValues().length; j++)
                        System.out.print(" " + params[i].getValues()[j]);
                } else
                    System.out.print(" null");
                System.out.println(" - multiple values? " + params[i].isMultiValuesAllowed());
            }
        }
        System.out.println("END TESTING getReportDefinition");
    }
getReportParameters

getReportParametersを使用して、レポート・パラメータとそれらのデフォルト値の配列を取得します。パラメータのリストを取得すると、レポートの実行やスケジュールを行う前にパラメータ値を設定できます。

入力メッセージ = getReportParametersRequest

<wsdl:message name="getReportParametersRequest">
  <wsdl:part name="reportRequest" type="impl:ReportRequest"/>
  <wsdl:part name="userID" type="xsd:string"/>
  <wsdl:part name="password" type="xsd:string"/>
</wsdl:message>

出力メッセージ = getReportParametersResponse

<wsdl:message name="getReportParametersResponse">
  <wsdl:part name="getReportParametersReturn"
    type="impl:ArrayOfParamNameValue"/>
</wsdl:message>

発生する場合がある例外:

InvalidParametersException
AccessDeniedException
OperationFailedException

発生する場合がある例外の詳細は、第27.3.5項「エラー用メッセージ」を参照してください。

例27-5 getReportParametersのサンプル・コード

    public static void getParameters(String xdofile) throws Exception {

        //final String bipEndpoint = "http://10.138.232.107/xmlpserver/services/PublicReportService?wsdl";
        final String bipEndpoint = "http://mycompany.com:9999/xmlpserver/services/PublicReportService?wsdl";
        final String bipNamespace = "http://xmlns.oracle.com/oxp/service/PublicReportService";

        service = new Service();
        call = (Call) service.createCall();
        call.setTargetEndpointAddress(new URL(bipEndpoint));
        System.out.println("BEGIN TESTING: getParameters Service");

        // register the ReportRequest class
        QName reportReq = new QName(bipNamespace, "ReportRequest");
        call.registerTypeMapping(ReportRequest.class, reportReq,
                        BeanSerializerFactory.class, BeanDeserializerFactory.class);

        // register the ParamNameValue class
        QName nmvals = new QName(bipNamespace, "ParamNameValue");
        call.registerTypeMapping(ParamNameValue.class, nmvals, BeanSerializerFactory.class, BeanDeserializerFactory.class);

        // Define parameters
        ParamNameValue[] paramNmVals = new ParamNameValue[2];
        paramNmVals[0] = new ParamNameValue(false, false, "dept", null) ;
        paramNmVals[1] = new ParamNameValue(false, false, "emp", new String[] {"*"}) ;
        ReportRequest req = new ReportRequest("pdf", "en-US", "Simple", paramNmVals, xdofile);


        call.setOperationName(new QName(bipNamespace, "getReportParameters"));
        call.addParameter( "ReportRequest", reportReq, ParameterMode.IN );
        call.addParameter("userID", XMLType.XSD_STRING, ParameterMode.IN);
        call.addParameter("password", XMLType.XSD_STRING, ParameterMode.IN);
        call.setReturnClass(ParamNameValue [].class);

        // issue the request
        ParamNameValue params [] = (ParamNameValue []) call.invoke(
            new Object[] { req, "administrator", "Administrator"});

        if (params != null) {
            for (int i = 0; i < params.length; i++) {
                System.out.print("Parameter " + params[i].getName() + ":");
                if (params[i].getValues() != null) {
                    for (int j = 0;  j < params[i].getValues().length; j++)
                        System.out.print(" " + params[i].getValues()[j]);
                } else
                    System.out.print(" null");
                System.out.println(" - multiple values? " + params[i].isMultiValuesAllowed());
            }
        }
        System.out.println("END TESTING: getParameters");
    }

27.3.4 レポートの実行とスケジュールを行う操作

runReport

runReportを使用してレポートを実行し、生成されたドキュメントを返します。ドキュメントは、指定されたファイル形式で返されます。

入力メッセージ = runReportRequest

<wsdl:message name="runReportRequest">
  <wsdl:part name="reportRequest" type="impl:ReportRequest"/>
  <wsdl:part name="userID" type="xsd:string"/>  <wsdl:part name="password" type="xsd:string"/>
</wsdl:message>

出力メッセージ = runReportResponse

<wsdl:message name="runReportResponse">
  <wsdl:part name="runReportReturn" type="impl:ReportResponse"/>
</wsdl:message>

発生する場合がある例外:

InvalidParametersException
AccessDeniedException
OperationFailedException

発生する場合がある例外の詳細は、第27.3.5項「エラー用メッセージ」を参照してください。

例27-6 runReportのサンプル・コード

    public static void runReport() throws Exception {

        final String bipEndpoint =
          "http://mycompany.com:9999/xmlpserver/services/PublicReportService?wsdl";
        final String bipNamespace = "http://xmlns.oracle.com/oxp/service/PublicReportService";
        final String xdofile ="/HR Manager/Employee Salary Report/Employee Salary Report.xdo";

        // set up the call object
        service = new Service();
        call = (Call) service.createCall();
        call.setTargetEndpointAddress(new URL(bipEndpoint));

        //  TEST Run Report
        System.out.println("TESTING runReport Service BEGIN");

        // register the ReportRequest class
        QName reportReq = new QName(bipNamespace, "ReportRequest");
        call.registerTypeMapping(ReportRequest.class, reportReq,
                        BeanSerializerFactory.class, BeanDeserializerFactory.class);

        // register the ParamNameValue class
        QName nmvals = new QName(bipNamespace, "ParamNameValue");
        call.registerTypeMapping(ParamNameValue.class, nmvals, BeanSerializerFactory.class, BeanDeserializerFactory.class);

        // register the BIPReportResponse class
        QName reportRespqn = new QName(bipNamespace, "ReportResponse");
        call.registerTypeMapping(ReportResponse.class, reportRespqn,
          BeanSerializerFactory.class, BeanDeserializerFactory.class);

        // Default return type based on what we expect
        call.setOperationName( new QName(bipNamespace, "runReport" ));
        call.addParameter( "ReportRequest", reportReq, ParameterMode.IN );
        call.addParameter("userID", XMLType.XSD_STRING, ParameterMode.IN);
        call.addParameter("password", XMLType.XSD_STRING, ParameterMode.IN);
        call.setReturnClass(ReportResponse.class);

        ParamNameValue[] paramNmVals = new ParamNameValue[2];
        paramNmVals[0] = new ParamNameValue(false, "dept", null) ;
        paramNmVals[1] = new ParamNameValue(false, "emp", new String[] {"*"}) ;

        ReportRequest req = new ReportRequest("pdf", "en-US", "Simple", paramNmVals, xdofile);

        // issue the reques
        ReportResponse reportResp = (ReportResponse) call.invoke(
            new Object[] {req, "Administrator", "Administrator"} );
        System.out.println("Return ReportResponse: ContentType = " + reportResp.getReportContentType());

        // Save the report
        byte[] binaryBytes = reportResp.getReportBytes();
        OutputStream out = new FileOutputStream("D:\\temp\\out.pdf");
        out.write(binaryBytes);
        out.close();
        System.out.println("Success for Run Report");
    }

scheduleReport

scheduleReportを使用して、レポートの実行と配信(プリンタ、FAX、電子メール、WebDAVまたはFTPへの配信)を行うためにスケジュールするか、単純にレポート・リポジトリに保存します。ジョブは、即座に実行するようにスケジュールしたり、一度か反復して実行するようにスケジュールできます。また、反復実行を停止する終了日を指定できます。レポート・ジョブのスケジュールが正常に実行されると、この操作によってJobIDが返されます。

入力メッセージ = scheduleReportRequest

<wsdl:message name="scheduleReportRequest">
  <wsdl:part name="scheduleRequest" type="impl:ScheduleRequest"/>
  <wsdl:part name="userID" type="xsd:string"/>
  <wsdl:part name="password" type="xsd:string"/>
</wsdl:message>

出力メッセージ = scheduleReportResponse

<wsdl:message name="scheduleReportResponse">
  <wsdl:part name="scheduleReportReturn" type="xsd:string"/>
</wsdl:message>

発生する場合がある例外:

InvalidParametersException
AccessDeniedException
OperationFailedException

発生する場合がある例外の詳細は、第27.3.5項「エラー用メッセージ」を参照してください。

例27-7 scheduleReportのサンプル・コード

    public static void scheduleReport() throws Exception {

        final String bipEndpoint = "http://mycompany.com:9999/xmlpserver/services/PublicReportService?wsdl";
        final String bipNamespace = "http://xmlns.oracle.com/oxp/service/PublicReportService";
        final String xdofile ="/HR Manager/Employee Salary Report/Employee Salary Report.xdo";

        // set up the call object
        service = new Service();
        call = (Call) service.createCall();
        call.setTargetEndpointAddress(new URL(bipEndpoint));

        //  TEST Run Report
        System.out.println("TESTING scheduleReport Service BEGIN");

        // register the ReportRequest class
        QName reportReq = new QName(bipNamespace, "ReportRequest");
        call.registerTypeMapping(ReportRequest.class, reportReq,
                        BeanSerializerFactory.class, BeanDeserializerFactory.class);

        // register the ParamNameValue class
        QName nmvals = new QName(bipNamespace, "ParamNameValue");
        call.registerTypeMapping(ParamNameValue.class, nmvals, BeanSerializerFactory.class, BeanDeserializerFactory.class);

        // register the BIPReportResponse class (part of Schedule Request)
        QName reportRespqn = new QName(bipNamespace, "ReportResponse");
        call.registerTypeMapping(ReportResponse.class, reportRespqn, BeanSerializerFactory.class, BeanDeserializerFactory.class);

        // register the Schedule Request class
        QName scheduleReq = new QName(bipNamespace, "ScheduleRequest");
        call.registerTypeMapping(ReportRequest.class, reportReq,
                        BeanSerializerFactory.class, BeanDeserializerFactory.class);

        // Default return type based on what we expect
        call.setOperationName( new QName(bipNamespace, "scheduleReport" ));
        call.addParameter( "ScheduleRequest", scheduleReq, ParameterMode.IN );
        call.addParameter("userID", XMLType.XSD_STRING, ParameterMode.IN);
        call.addParameter("password", XMLType.XSD_STRING, ParameterMode.IN);
        call.setReturnType(XMLType.XSD_STRING);

        // Define Report Request Object
        ParamNameValue[] paramNmVals = new ParamNameValue[2];
        paramNmVals[0] = new ParamNameValue(false, "dept", null) ;
        paramNmVals[1] = new ParamNameValue(false, "emp", new String[] {"*"}) ;
        ReportRequest report = new ReportRequest("pdf", "en-US", "Simple", paramNmVals, xdofile);

        // Define Email Delivery Options
        EMailDeliveryOption email =
            new EMailDeliveryOption("manager@mycompany.com", "Body", // bcc, boddy
            "manager@mycompany.com", // cc
            "bipublisher@oracle.com", "bipublisher@oracle.com", // from, reply to
            "Test Email Subject", "manager@mycompany.com" // subject, to
            );

        // Define only email delivery
        DeliveryRequest delivery = new DeliveryRequest(email, null, null, null, null, null);

        ScheduleRequest req = new ScheduleRequest(
            delivery,               // delivery options
            null,                   // enddate (Calendar.getInstance())
            null,                   // job calendar
            "en-US", null,          // job locale, timezone
            null, false, false, false, // notifications
            1, 1,                   // repeat count, repeat interval
            report,                 // Report and Parameters
            "true", "true",         // Save Data, Save Output
            "false", "true",        // Bursting, Public
            null,                   // start date
            "true",                 // Use UTF-8
            "my Job4"               // job name
            );

        // issue the request
        String result = (String) call.invoke(
            new Object[] {req, "Administrator", "Administrator"} );
        System.out.println("Success for Schedule Report");
    }

27.3.5 エラー用メッセージ

次のいずれかのメッセージが、操作の実行においてエラーが発生した場合に操作に対して返されることがあります。

OperationFailedException
<wsdl:message name="OperationFailedException">
  <wsdl:part name="fault" type="impl:OperationFailedException"/>
</wsdl:message>
AccessDeniedException
<wsdl:message name="AccessDeniedException">
  <wsdl:part name="fault" type="impl:AccessDeniedException"/>
</wsdl:message>
InvalidParametersException
<wsdl:message name="InvalidParametersException">
  <wsdl:part name="fault" type="impl:InvalidParametersException"/>
</wsdl:message>

27.4 Webサービス・アプリケーションのデバッグ

Webサービス開発者として、SOAPリクエスト・メッセージを表示する必要が発生する場合があります。SOAPリクエスト・メッセージは、これらのリクエスト・メッセージに対するSOAPレスポンスとともにWebサービスを起動するために使用されます。Oracle BI PublisherにはApache Axis SOAP Monitorユーティリティがバンドルされており、サーバーを特別に構成したり再起動しなくても、これによってSOAPメッセージ・フローの監視が実現されます。

クライアントのサンプル・コードでSOAPリクエストがリスニング・ポート8888に対して送信されると、Axis TCPMonitorを使用することにより、SOAPリクエストがポート8080にルーティングされます。このポートではPublicReportServiceが実行しています。これは、Webサービス開発者にとって便利なデバッグ・ツールです。

Axis TCPMonitor(tcpmon)を起動するには、コマンドラインから次を入力します。

% java org.apache.axis.utils.tcpmon

これによって、「TCPMonitor」ウィンドウが起動します。オプションの引数なしで起動されたウィンドウの例を図27-1に示します。

図27-1 「TCPMonitor」ウィンドウ

「TCPMonitor」ウィンドウ

このプログラムを使用するには、tcpmonで着信接続要求を監視するローカル・ポート、接続要求の転送先となるターゲット・ホスト、および接続要求の転送先(トンネリング先)となるターゲット・マシンのポート番号を選択します。「Add」をクリックすると、トンネリングされた新しい接続を示す別のタブが表示されます。このタブには、SOAPリクエスト・メッセージとレスポンス・メッセージが表示されます。これによってデバッグが容易になります。

図27-2に「TCPMonitor」ウィンドウの接続タブを示します。

図27-2 「TCPMonitor」ウィンドウの接続タブ

TCPMonitorの接続タブ

TCPMonitorを実行するには、次を入力します。

set CLASSPATH=.
set CLASSPATH=%CLASSPATH%;%WEB_HOME%\PORTAL\WEB-INF\lib\axis.jar
set TCPMON_PORT=8081
if not %1.==. TCPMON_PORT=%1
java org.apache.axis.utils.tcpmon %TCPMON_PORT% %ADMINSERVER_HOSTNAME% %ADMINSERVER_PORT%

27.5 Oracle BI PublisherのWebサービスWSDL

次は、BI Publisher PublicReportServiceのフルWebサービスWSDLです。これは、このWSDLを表示できないJ2EEサーバーにBI Publisherがデプロイされているインスタンスのために用意されています。

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://xmlns.oracle.com/oxp/service/PublicReportService" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://xmlns.oracle.com/oxp/service/PublicReportService" xmlns:intf="http://xmlns.oracle.com/oxp/service/PublicReportService" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!--WSDL created by Apache Axis version: 1.3
Built on Oct 05, 2005 (05:23:37 EDT)-->
 <wsdl:types>
  <schema targetNamespace="http://xmlns.oracle.com/oxp/service/PublicReportService" xmlns="http://www.w3.org/2001/XMLSchema">
   <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
   <complexType name="ArrayOf_xsd_string">
    <complexContent>
     <restriction base="soapenc:Array">
      <attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:string[]"/>
     </restriction>
    </complexContent>
   </complexType>
   <complexType name="ParamNameValue">
    <sequence>
     <element name="multiValuesAllowed" type="xsd:boolean"/>
     <element name="name" nillable="true" type="xsd:string"/>
     <element name="values" nillable="true" type="impl:ArrayOf_xsd_string"/>
    </sequence>
   </complexType>
   <complexType name="ArrayOfParamNameValue">
    <complexContent>
     <restriction base="soapenc:Array">
      <attribute ref="soapenc:arrayType" wsdl:arrayType="impl:ParamNameValue[]"/>
     </restriction>
    </complexContent>
   </complexType>
   <complexType name="ReportRequest">
    <sequence>
     <element name="attributeFormat" nillable="true" type="xsd:string"/>
     <element name="attributeLocale" nillable="true" type="xsd:string"/>
     <element name="attributeTemplate" nillable="true" type="xsd:string"/>
     <element name="parameterNameValues" nillable="true" type="impl:ArrayOfParamNameValue"/>
     <element name="reportAbsolutePath" nillable="true" type="xsd:string"/>
    </sequence>
   </complexType>
   <complexType name="AccessDeniedException">
    <sequence/>
   </complexType>
   <complexType name="OperationFailedException">
    <sequence/>
   </complexType>
   <complexType name="InvalidParametersException">
    <sequence/>
   </complexType>
   <complexType name="ReportResponse">
    <sequence>
     <element name="reportBytes" nillable="true" type="xsd:base64Binary"/>
     <element name="reportContentType" nillable="true" type="xsd:string"/>
     <element name="reportLocale" nillable="true" type="xsd:string"/>
    </sequence>
   </complexType>
   <complexType name="ReportDefinition">
    <sequence>
     <element name="defaultOutputFormat" nillable="true" type="xsd:string"/>
     <element name="defaultTemplateId" nillable="true" type="xsd:string"/>
     <element name="parameterNames" nillable="true" type="impl:ArrayOf_xsd_string"/>
     <element name="reportParameterNameValues" nillable="true" type="impl:ArrayOfParamNameValue"/>
     <element name="templateIds" nillable="true" type="impl:ArrayOf_xsd_string"/>
    </sequence>
   </complexType>
   <complexType name="ItemData">
    <sequence>
     <element name="absolutePath" nillable="true" type="xsd:string"/>
     <element name="creationDate" nillable="true" type="xsd:dateTime"/>
     <element name="displayName" nillable="true" type="xsd:string"/>
     <element name="fileName" nillable="true" type="xsd:string"/>
     <element name="lastModified" nillable="true" type="xsd:dateTime"/>
     <element name="lastModifier" nillable="true" type="xsd:string"/>
     <element name="owner" nillable="true" type="xsd:string"/>
     <element name="parentAbsolutePath" nillable="true" type="xsd:string"/>
     <element name="type" nillable="true" type="xsd:string"/>
    </sequence>
   </complexType>
   <complexType name="ArrayOfItemData">
    <complexContent>
     <restriction base="soapenc:Array">
      <attribute ref="soapenc:arrayType" wsdl:arrayType="impl:ItemData[]"/>
     </restriction>
    </complexContent>
   </complexType>
   <complexType name="EMailDeliveryOption">
    <sequence>
     <element name="emailBCC" nillable="true" type="xsd:string"/>
     <element name="emailBody" nillable="true" type="xsd:string"/>
     <element name="emailCC" nillable="true" type="xsd:string"/>
     <element name="emailFrom" nillable="true" type="xsd:string"/>
     <element name="emailReplyTo" nillable="true" type="xsd:string"/>
     <element name="emailSubject" nillable="true" type="xsd:string"/>
     <element name="emailTo" nillable="true" type="xsd:string"/>
    </sequence>
   </complexType>
   <complexType name="FaxDeliveryOption">
    <sequence>
     <element name="faxNumber" nillable="true" type="xsd:string"/>
     <element name="faxServer" nillable="true" type="xsd:string"/>
    </sequence>
   </complexType>
   <complexType name="FTPDeliveryOption">
    <sequence>
     <element name="ftpServerName" nillable="true" type="xsd:string"/>
     <element name="ftpUserName" nillable="true" type="xsd:string"/>
     <element name="ftpUserPassword" nillable="true" type="xsd:string"/>
     <element name="remoteFile" nillable="true" type="xsd:string"/>
     <element name="sftpOption" type="xsd:boolean"/>
    </sequence>
   </complexType>
   <complexType name="LocalDeliveryOption">
    <sequence>
     <element name="destination" nillable="true" type="xsd:string"/>
    </sequence>
   </complexType>
   <complexType name="PrintDeliveryOption">
    <sequence>
     <element name="printNumberOfCopy" nillable="true" type="xsd:string"/>
     <element name="printRange" nillable="true" type="xsd:string"/>
     <element name="printSide" nillable="true" type="xsd:string"/>
     <element name="printTray" nillable="true" type="xsd:string"/>
     <element name="printerName" nillable="true" type="xsd:string"/>
    </sequence>
   </complexType>
   <complexType name="WebDAVDeliveryOption">
    <sequence>
     <element name="deliveryAuthType" nillable="true" type="xsd:string"/>
     <element name="deliveryAuthTypeBasic" nillable="true" type="xsd:string"/>
     <element name="deliveryAuthTypeDigest" nillable="true" type="xsd:string"/>
     <element name="password" nillable="true" type="xsd:string"/>
     <element name="remoteFilePath" nillable="true" type="xsd:string"/>
     <element name="server" nillable="true" type="xsd:string"/>
     <element name="userName" nillable="true" type="xsd:string"/>
    </sequence>
   </complexType>
   <complexType name="DeliveryRequest">
    <sequence>
     <element name="emailOption" nillable="true" type="impl:EMailDeliveryOption"/>
     <element name="faxOption" nillable="true" type="impl:FaxDeliveryOption"/>
     <element name="ftpOption" nillable="true" type="impl:FTPDeliveryOption"/>
     <element name="localOption" nillable="true" type="impl:LocalDeliveryOption"/>
     <element name="printOption" nillable="true" type="impl:PrintDeliveryOption"/>
     <element name="webDAVOption" nillable="true" type="impl:WebDAVDeliveryOption"/>
    </sequence>
   </complexType>
   <complexType name="ScheduleRequest">
    <sequence>
     <element name="deliveryRequest" nillable="true" type="impl:DeliveryRequest"/>
     <element name="endDate" nillable="true" type="xsd:dateTime"/>
     <element name="jobCalendar" nillable="true" type="xsd:string"/>
     <element name="jobLocale" nillable="true" type="xsd:string"/>
     <element name="jobTZ" nillable="true" type="xsd:string"/>
     <element name="notificationTo" nillable="true" type="xsd:string"/>
     <element name="notifyWhenFailed" type="xsd:boolean"/>
     <element name="notifyWhenSuccess" type="xsd:boolean"/>
     <element name="notifyWhenWarning" type="xsd:boolean"/>
     <element name="repeatCount" type="xsd:int"/>
     <element name="repeatInterval" type="xsd:int"/>
     <element name="reportRequest" nillable="true" type="impl:ReportRequest"/>
     <element name="saveDataOption" type="xsd:boolean"/>
     <element name="saveOutputOption" type="xsd:boolean"/>
     <element name="scheduleBurstringOption" type="xsd:boolean"/>
     <element name="schedulePublicOption" type="xsd:boolean"/>
     <element name="startDate" nillable="true" type="xsd:dateTime"/>
     <element name="useUTF8Option" type="xsd:boolean"/>
     <element name="userJobName" nillable="true" type="xsd:string"/>
    </sequence>
   </complexType>
  </schema>
 </wsdl:types>

   <wsdl:message name="runReportResponse">

      <wsdl:part name="runReportReturn" type="impl:ReportResponse"/>

   </wsdl:message>

   <wsdl:message name="scheduleReportResponse">

      <wsdl:part name="scheduleReportReturn" type="xsd:string"/>

   </wsdl:message>

   <wsdl:message name="getReportDefinitionRequest">

      <wsdl:part name="reportAbsolutePath" type="xsd:string"/>

      <wsdl:part name="userID" type="xsd:string"/>

      <wsdl:part name="password" type="xsd:string"/>

   </wsdl:message>

   <wsdl:message name="getReportParametersResponse">

      <wsdl:part name="getReportParametersReturn" type="impl:ArrayOfParamNameValue"/>

   </wsdl:message>

   <wsdl:message name="getReportParametersRequest">

      <wsdl:part name="reportRequest" type="impl:ReportRequest"/>

      <wsdl:part name="userID" type="xsd:string"/>

      <wsdl:part name="password" type="xsd:string"/>

   </wsdl:message>

   <wsdl:message name="InvalidParametersException">

      <wsdl:part name="fault" type="impl:InvalidParametersException"/>

   </wsdl:message>

   <wsdl:message name="getFolderContentsResponse">

      <wsdl:part name="getFolderContentsReturn" type="impl:ArrayOfItemData"/>

   </wsdl:message>

   <wsdl:message name="OperationFailedException">

      <wsdl:part name="fault" type="impl:OperationFailedException"/>

   </wsdl:message>

   <wsdl:message name="AccessDeniedException">

      <wsdl:part name="fault" type="impl:AccessDeniedException"/>

   </wsdl:message>

   <wsdl:message name="validateLoginResponse">

      <wsdl:part name="validateLoginReturn" type="xsd:boolean"/>

   </wsdl:message>

   <wsdl:message name="scheduleReportRequest">

      <wsdl:part name="scheduleRequest" type="impl:ScheduleRequest"/>

      <wsdl:part name="userID" type="xsd:string"/>

      <wsdl:part name="password" type="xsd:string"/>

   </wsdl:message>

   <wsdl:message name="runReportRequest">

      <wsdl:part name="reportRequest" type="impl:ReportRequest"/>

      <wsdl:part name="userID" type="xsd:string"/>

      <wsdl:part name="password" type="xsd:string"/>

   </wsdl:message>

   <wsdl:message name="getFolderContentsRequest">

      <wsdl:part name="folderAbsolutePath" type="xsd:string"/>

      <wsdl:part name="userID" type="xsd:string"/>

      <wsdl:part name="password" type="xsd:string"/>

   </wsdl:message>

   <wsdl:message name="getReportDefinitionResponse">

      <wsdl:part name="getReportDefinitionReturn" type="impl:ReportDefinition"/>

   </wsdl:message>

   <wsdl:message name="hasReportAccessRequest">

      <wsdl:part name="reportAbsolutePath" type="xsd:string"/>

      <wsdl:part name="userID" type="xsd:string"/>

      <wsdl:part name="password" type="xsd:string"/>

   </wsdl:message>

   <wsdl:message name="hasReportAccessResponse">

      <wsdl:part name="hasReportAccessReturn" type="xsd:boolean"/>

   </wsdl:message>

   <wsdl:message name="validateLoginRequest">

      <wsdl:part name="userID" type="xsd:string"/>

      <wsdl:part name="password" type="xsd:string"/>

   </wsdl:message>

   <wsdl:portType name="PublicReportService">

      <wsdl:operation name="getReportParameters" parameterOrder="reportRequest userID password">

         <wsdl:input message="impl:getReportParametersRequest" name="getReportParametersRequest"/>

         <wsdl:output message="impl:getReportParametersResponse" name="getReportParametersResponse"/>

         <wsdl:fault message="impl:InvalidParametersException" name="InvalidParametersException"/>

         <wsdl:fault message="impl:AccessDeniedException" name="AccessDeniedException"/>

         <wsdl:fault message="impl:OperationFailedException" name="OperationFailedException"/>

      </wsdl:operation>

      <wsdl:operation name="validateLogin" parameterOrder="userID password">

         <wsdl:input message="impl:validateLoginRequest" name="validateLoginRequest"/>

         <wsdl:output message="impl:validateLoginResponse" name="validateLoginResponse"/>

      </wsdl:operation>

      <wsdl:operation name="runReport" parameterOrder="reportRequest userID password">

         <wsdl:input message="impl:runReportRequest" name="runReportRequest"/>

         <wsdl:output message="impl:runReportResponse" name="runReportResponse"/>

         <wsdl:fault message="impl:InvalidParametersException" name="InvalidParametersException"/>

         <wsdl:fault message="impl:AccessDeniedException" name="AccessDeniedException"/>

         <wsdl:fault message="impl:OperationFailedException" name="OperationFailedException"/>

      </wsdl:operation>

      <wsdl:operation name="getReportDefinition" parameterOrder="reportAbsolutePath userID password">

         <wsdl:input message="impl:getReportDefinitionRequest" name="getReportDefinitionRequest"/>

         <wsdl:output message="impl:getReportDefinitionResponse" name="getReportDefinitionResponse"/>

         <wsdl:fault message="impl:InvalidParametersException" name="InvalidParametersException"/>

         <wsdl:fault message="impl:AccessDeniedException" name="AccessDeniedException"/>

         <wsdl:fault message="impl:OperationFailedException" name="OperationFailedException"/>

      </wsdl:operation>

      <wsdl:operation name="getFolderContents" parameterOrder="folderAbsolutePath userID password">

         <wsdl:input message="impl:getFolderContentsRequest" name="getFolderContentsRequest"/>

         <wsdl:output message="impl:getFolderContentsResponse" name="getFolderContentsResponse"/>

         <wsdl:fault message="impl:InvalidParametersException" name="InvalidParametersException"/>

         <wsdl:fault message="impl:AccessDeniedException" name="AccessDeniedException"/>

         <wsdl:fault message="impl:OperationFailedException" name="OperationFailedException"/>

      </wsdl:operation>

      <wsdl:operation name="scheduleReport" parameterOrder="scheduleRequest userID password">

         <wsdl:input message="impl:scheduleReportRequest" name="scheduleReportRequest"/>

         <wsdl:output message="impl:scheduleReportResponse" name="scheduleReportResponse"/>

         <wsdl:fault message="impl:InvalidParametersException" name="InvalidParametersException"/>

         <wsdl:fault message="impl:AccessDeniedException" name="AccessDeniedException"/>

         <wsdl:fault message="impl:OperationFailedException" name="OperationFailedException"/>

      </wsdl:operation>

      <wsdl:operation name="hasReportAccess" parameterOrder="reportAbsolutePath userID password">

         <wsdl:input message="impl:hasReportAccessRequest" name="hasReportAccessRequest"/>

         <wsdl:output message="impl:hasReportAccessResponse" name="hasReportAccessResponse"/>

         <wsdl:fault message="impl:InvalidParametersException" name="InvalidParametersException"/>

      </wsdl:operation>

   </wsdl:portType>

   <wsdl:binding name="PublicReportServiceSoapBinding" type="impl:PublicReportService">

      <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>

      <wsdl:operation name="getReportParameters">

         <wsdlsoap:operation soapAction=""/>

         <wsdl:input name="getReportParametersRequest">

            <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://xmlns.oracle.com/oxp/service/PublicReportService" use="encoded"/>

         </wsdl:input>

         <wsdl:output name="getReportParametersResponse">

            <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://xmlns.oracle.com/oxp/service/PublicReportService" use="encoded"/>

         </wsdl:output>

         <wsdl:fault name="InvalidParametersException">

            <wsdlsoap:fault encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" name="InvalidParametersException" namespace="http://xmlns.oracle.com/oxp/service/PublicReportService" use="encoded"/>

         </wsdl:fault>

         <wsdl:fault name="AccessDeniedException">

            <wsdlsoap:fault encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" name="AccessDeniedException" namespace="http://xmlns.oracle.com/oxp/service/PublicReportService" use="encoded"/>

         </wsdl:fault>

         <wsdl:fault name="OperationFailedException">

            <wsdlsoap:fault encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" name="OperationFailedException" namespace="http://xmlns.oracle.com/oxp/service/PublicReportService" use="encoded"/>

         </wsdl:fault>

      </wsdl:operation>

      <wsdl:operation name="validateLogin">

         <wsdlsoap:operation soapAction=""/>

         <wsdl:input name="validateLoginRequest">

            <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://xmlns.oracle.com/oxp/service/PublicReportService" use="encoded"/>

         </wsdl:input>

         <wsdl:output name="validateLoginResponse">

            <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://xmlns.oracle.com/oxp/service/PublicReportService" use="encoded"/>

         </wsdl:output>

      </wsdl:operation>

      <wsdl:operation name="runReport">

         <wsdlsoap:operation soapAction=""/>

         <wsdl:input name="runReportRequest">

            <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://xmlns.oracle.com/oxp/service/PublicReportService" use="encoded"/>

         </wsdl:input>

         <wsdl:output name="runReportResponse">

            <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://xmlns.oracle.com/oxp/service/PublicReportService" use="encoded"/>

         </wsdl:output>

         <wsdl:fault name="InvalidParametersException">

            <wsdlsoap:fault encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" name="InvalidParametersException" namespace="http://xmlns.oracle.com/oxp/service/PublicReportService" use="encoded"/>

         </wsdl:fault>

         <wsdl:fault name="AccessDeniedException">

            <wsdlsoap:fault encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" name="AccessDeniedException" namespace="http://xmlns.oracle.com/oxp/service/PublicReportService" use="encoded"/>

         </wsdl:fault>

         <wsdl:fault name="OperationFailedException">

            <wsdlsoap:fault encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" name="OperationFailedException" namespace="http://xmlns.oracle.com/oxp/service/PublicReportService" use="encoded"/>

         </wsdl:fault>

      </wsdl:operation>

      <wsdl:operation name="getReportDefinition">

         <wsdlsoap:operation soapAction=""/>

         <wsdl:input name="getReportDefinitionRequest">

            <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://xmlns.oracle.com/oxp/service/PublicReportService" use="encoded"/>

         </wsdl:input>

         <wsdl:output name="getReportDefinitionResponse">

            <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://xmlns.oracle.com/oxp/service/PublicReportService" use="encoded"/>

         </wsdl:output>

         <wsdl:fault name="InvalidParametersException">

            <wsdlsoap:fault encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" name="InvalidParametersException" namespace="http://xmlns.oracle.com/oxp/service/PublicReportService" use="encoded"/>

         </wsdl:fault>

         <wsdl:fault name="AccessDeniedException">

            <wsdlsoap:fault encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" name="AccessDeniedException" namespace="http://xmlns.oracle.com/oxp/service/PublicReportService" use="encoded"/>

         </wsdl:fault>

         <wsdl:fault name="OperationFailedException">

            <wsdlsoap:fault encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" name="OperationFailedException" namespace="http://xmlns.oracle.com/oxp/service/PublicReportService" use="encoded"/>

         </wsdl:fault>

      </wsdl:operation>

      <wsdl:operation name="getFolderContents">

         <wsdlsoap:operation soapAction=""/>

         <wsdl:input name="getFolderContentsRequest">

            <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://xmlns.oracle.com/oxp/service/PublicReportService" use="encoded"/>

         </wsdl:input>

         <wsdl:output name="getFolderContentsResponse">

            <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://xmlns.oracle.com/oxp/service/PublicReportService" use="encoded"/>

         </wsdl:output>

         <wsdl:fault name="InvalidParametersException">

            <wsdlsoap:fault encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" name="InvalidParametersException" namespace="http://xmlns.oracle.com/oxp/service/PublicReportService" use="encoded"/>

         </wsdl:fault>

         <wsdl:fault name="AccessDeniedException">

            <wsdlsoap:fault encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" name="AccessDeniedException" namespace="http://xmlns.oracle.com/oxp/service/PublicReportService" use="encoded"/>

         </wsdl:fault>

         <wsdl:fault name="OperationFailedException">

            <wsdlsoap:fault encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" name="OperationFailedException" namespace="http://xmlns.oracle.com/oxp/service/PublicReportService" use="encoded"/>

         </wsdl:fault>

      </wsdl:operation>

      <wsdl:operation name="scheduleReport">

         <wsdlsoap:operation soapAction=""/>

         <wsdl:input name="scheduleReportRequest">

            <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://xmlns.oracle.com/oxp/service/PublicReportService" use="encoded"/>

         </wsdl:input>

         <wsdl:output name="scheduleReportResponse">

            <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://xmlns.oracle.com/oxp/service/PublicReportService" use="encoded"/>

         </wsdl:output>

         <wsdl:fault name="InvalidParametersException">

            <wsdlsoap:fault encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" name="InvalidParametersException" namespace="http://xmlns.oracle.com/oxp/service/PublicReportService" use="encoded"/>

         </wsdl:fault>

         <wsdl:fault name="AccessDeniedException">

            <wsdlsoap:fault encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" name="AccessDeniedException" namespace="http://xmlns.oracle.com/oxp/service/PublicReportService" use="encoded"/>

         </wsdl:fault>

         <wsdl:fault name="OperationFailedException">

            <wsdlsoap:fault encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" name="OperationFailedException" namespace="http://xmlns.oracle.com/oxp/service/PublicReportService" use="encoded"/>

         </wsdl:fault>

      </wsdl:operation>

      <wsdl:operation name="hasReportAccess">

         <wsdlsoap:operation soapAction=""/>

         <wsdl:input name="hasReportAccessRequest">

            <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://xmlns.oracle.com/oxp/service/PublicReportService" use="encoded"/>

         </wsdl:input>

         <wsdl:output name="hasReportAccessResponse">

            <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://xmlns.oracle.com/oxp/service/PublicReportService" use="encoded"/>

         </wsdl:output>

         <wsdl:fault name="InvalidParametersException">

            <wsdlsoap:fault encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" name="InvalidParametersException" namespace="http://xmlns.oracle.com/oxp/service/PublicReportService" use="encoded"/>

         </wsdl:fault>

      </wsdl:operation>

   </wsdl:binding>

   <wsdl:service name="PublicReportServiceService">

      <wsdl:port binding="impl:PublicReportServiceSoapBinding" name="PublicReportService">

         <wsdlsoap:address location="http://localhost:8080/xmlpserver/services/PublicReportService"/>

      </wsdl:port>

   </wsdl:service>

</wsdl:definitions>