Sunday, 20 December 2020

ORACLE OIC - OAuth - Client with Multiple Audience from Different Resources

As we migrate from on premise to cloud ,  one of the critical requirement from customer to use user propagation capability to propagate the user credentials to ERP or Other target applications. 

This will allow the business users to track the changes and validate the records against a user making calls or updates to cloud. 

Its expected that OIC will propagate the user credentials to SaaS or other down stream application .  But this capability is not present in OIC. 

As a work around , you can configure an OIC service to receive the Authentication details in custom header and propagate to target. 

Client or users are expected to send two different authentication tokens or a single token with multiple scope or audiences.  That is the same token will be authorized in IDCS based on the audience value in the token. 

Following diagram will illustrate some of the security requirements. 






We can have an individual IDCS for each application or we can use same IDCS for multiple application.  

Users and Roles will be synced between IDCS and Cloud applications.  A sync job will be configured in IDCS to sync the users and roles. 

Above diagram illustrate the security setup and clients accessing each application using a specific token. 

Following are the some of the requirements.
  1. Client1 is configured to invoke OIC using OIC token.
  2. Client2 is configured to invoke OIC and SaaS using Single token
  3. Client2 can invoke SaaS directly using SaaS token.
  4. Client2 can invoke OIC is using OIC token. 
  5. Client3 is configured to invoke HCM using HCM token. 


  

Wednesday, 2 December 2020

Convert PEM file to PPK file

We cant use PEM file to access servers using PUTTY.  You need to convert the PEM file to PPK and then you can use the PPK file to connect to unix machine using PUTTY. 

Use the following steps to convert the PEM files to PPK file.


  • Download the PEM file 
  • Open the PuttyGen app
  • Select Type of key to generate option at the bottom as RSA.
  • Select Load
  • Select the downloaded PEM file. 
  • Putty gen will generate both PPK and Public Key. 
  • Download the ppk using Save private key option.
  • Copy the public key content from the top window and save it as public key. 
  • Use Putty and add ppk file under Auth option. 
  • Connect to Server. 

-- Happy Learning



Git Basic Commands

  • Create a remote repository using https://github.com or Oracle DCS. 
  • Generate SSH Key. 
    • Go to git bash cmd. 
    • Type   ssh-keygen  and Enter
    • Accept default values. Note down the folder. 
    • Enter Passphrase
    • Go to the folder and list the files.
    •   You will see two files - id_rsa (Private Key) id_rsa.pub (Public Key)
  • To avoid entering ssh password in case if you have given one while creating ssh key. 
    •   Run  Following Command :    eval $(ssh-agent)
    •   Then Run Following Command :  ssh-add ~private_key_path/.ssh/id_rsa
  • Add the public key in the remote server either using console or command. 
  • Get the SSH link from the Git console. 
  • Create a local folder
    • mkdir ICSLocalRepo
    • Go to local folder -  cd ICSLocalRepo
  • Clone remote repository using following commands. This will clone master branch by default. dot at the end will checkout files to current dir. 
    • git clone ssh/http_URL .
    •  Following command will create a new folder and checkout the branch.
      • git clone ssh/http_URL new_dir_name 
  • Clone a specific branch. Example - develop branch. 
    • git clone -b develop ssh/http_URL  . or new_dir_name
  • List  all remote branches. 
    • git branch -a
  • To check the remote repository details.
    •   git remote -v
  • Check the clone status using status command. 
    • git status
  • Command to add files to local repository and push it to stage
    • git add --all 
    • git add .
  • Commit command. 
    • git comit -m "Commit comments"
  • Push the changes to remote repository.
    • git push origin develop
  • Pull the latest files from remote repository. 
    • git pull --all
  • Access a specific branch 
    • git checkout develop
  • Create a new branch from a remote branch. 
    • git checkout -b release-<release-name> origin/develop
  • Push new branch to origin. 
    • git push origin release-<release-name>
  • Merge changes to a branch. This will merge the changes from new_release_branch to develop. 
    • git checkout develop 
    • git merge new_release_branch

Tuesday, 17 November 2020

OCI-SSH Tunneling to ATP DB

 Connect to Autonomous Database Private Endpoint from On-Premise SQL Developer using SSH Local Port Forwarding

Assumptions:

  1. Your Bastion/ServiceVM/Bastion Host is “140.x.x.16” using Private Key “/Users/shadab/Downloads/Oracle Content/Keys/mydemo_vcn.priv” which is copied and available on the on-premise client machine
  2. Your Autonomous Database Private Endpoint IP is “10.10.2.11” running over port 1522
  3. There is connectivity from Bastion Host “140.x.x.16” to Autonomous Database “10.10.2.11” running over port 1522
  4. Your Autonomous Database wallet zip file is available on the on-premise client machine

Connect :
— From the On-Premise Client Machine Add the Hostname of the Autonomous Database which is in the tnsnames.ora file from your wallet file —

eg:
atpocipaas_high = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=hogmsumb.adb.ap-sydney-1.oraclecloud.com))(connect_data=(service_name=pjjuahqavguuilt_atpocipaas_low.atp.oraclecloud.com))(security=(ssl_server_cert_dn=”CN=adb.ap-sydney-1.oraclecloud.com,OU=Oracle ADB SYDNEY,O=Oracle Corporation,L=Redwood City,ST=California,C=US”)))

$ sudo vi /etc/hosts
127.0.0.1 hogmsumb.adb.ap-sydney-1.oraclecloud.com localhost

Now create a SSH tunnel with local port forwarding to forward local port 1522 to remote host 10.10.2.11 and remote port 1522

$ ssh -fNT -v -L 1522:10.10.2.11:1522 opc@140.x.x.16 -i “/Users/shadab/Downloads/Oracle Content/Keys/mydemo_vcn.priv”

Check with telnet

$ telnet hogmsumb.adb.ap-sydney-1.oraclecloud.com 1522
Trying 127.0.0.1…
debug1: Connection to port 1522 forwarding to 10.10.2.11 port 1522 requested.
debug1: channel 3: new [direct-tcpip]
Connected to hogmsumb.adb.ap-sydney-1.oraclecloud.com.
Escape character is ‘^]’.

Now connect with SQL Developer using option ‘cloud wallet’ using any one of the TNS entry and using the “ADMIN” user with which you created the Autonomous Database or any other DB user

Wednesday, 22 July 2020

OIC - REST API URL Patterns

Some applications can expose REST services using either path parameters or query parameters.  
For example Oracle Fusion applications provides REST API's using both path parameters and query parameters. 

Path Parameter Sample: 

https://fusion-host-name:443/hcmRestApi/resources/latest/userAccounts/{UserGUID}


When you provide this URL in OIC relative URL path , OIC will create a parameter called UserGUID with type as String. 

You can use this parameter variable to pass dynamic values during runtime. 


Query Parameter Sample: 


https://idcs-host-name/admin/v1/Users?filter=userName+sw+%22vijaya%22

https://oracle-fusion-hostname/hcmRestApi/resources/latest/emps?q=PersonNumber=112233


In this scenario , we cant provide URL with ?  in OIC rest end point.   We can provide value till ? mark. 

In the above examples, query parameters are filter and q strings.   

While creating REST invoke , select add query parameters and provide Query parameters as filter and q. 

We can provide values to these parameters in mapping and we can pass dynamic values. 

Example : 

q mapping   concat("PersonNumber=",'$dynamic_person_number')








Saturday, 18 July 2020

OIC - Invoke Oracle Fusion ESS Scheduler Job for Job Set

You may come across a scenario where in you may need to submit multiple ESS jobs or BIP Jobs  in parallel or in sequence.  In that case ,  you need to create a job set comprising multiple ESS jobs. 

Oracle provide following SOAP services to invoke ESS jobs. 

  • ERP Integration service 
    • https://<fa-host-name>/fscmService/ErpIntegrationService
  • ESS Webservice 
    • https://<fa-host-name>/ess/esswebservice
We can use ESS Webservice to invoke a Job Set or Individual Job Definition.  These are the sample payloads for invoking Job Definition or a Job Set. 



JOB_DEFINITION_PAYLOAD

<soapenv:Envelope xmlns:sch="http://xmlns.oracle.com/scheduler" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:typ="http://xmlns.oracle.com/scheduler/types">
   <soapenv:Header>
      <wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
         <wsu:Timestamp wsu:Id="TS-A5B886251698B47327159420696702512">
            <wsu:Created>2020-07-08T11:16:02.985Z</wsu:Created>
            <wsu:Expires>2020-07-08T12:17:07.024Z</wsu:Expires>
         </wsu:Timestamp>
         <wsse:UsernameToken wsu:Id="UsernameToken-A5B886251698B47327159420696298511">
            <wsse:Username>XXXXX</wsse:Username>
            <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">XXXXX</wsse:Password>
            <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">YPoASPzSuIL4V08wZwLrVw==</wsse:Nonce>
         </wsse:UsernameToken>
      </wsse:Security>
   </soapenv:Header>
   <soapenv:Body>
      <sch:submitRequest>
         <sch:description>xxrun12345</sch:description>
         <sch:jobDefinitionId>
            <!--Optional:-->
            <typ:name>XXHCM_ERP_Newhire_Assignment_Supervisor_Extract</typ:name>
            <!--Optional:-->
            <typ:packageName>/oracle/apps/ess/custom/NewhireAssignmentSupervisor/</typ:packageName>
            <!--Optional:-->
            <typ:type>JOB_DEFINITION</typ:type>
         </sch:jobDefinitionId>
         <sch:application>EarHcmEss</sch:application>
         <sch:requestedStartTime>2020-07-08T11:16:02.985Z</sch:requestedStartTime>
         <sch:requestParameters/>
      </sch:submitRequest>
   </soapenv:Body>
</soapenv:Envelope>


JOB_SET_PAYLOAD:

Following sample payload will provide how to send the parameters to a Job Set


<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sch="http://xmlns.oracle.com/scheduler" xmlns:typ="http://xmlns.oracle.com/scheduler/types">
   <soapenv:Header>
      <wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
         <wsu:Timestamp wsu:Id="TS-A55DABD7EBC81F9C96159506526235712">
            <wsu:Created>2020-07-18T09:41:02.357Z</wsu:Created>
            <wsu:Expires>2020-07-18T11:21:02.357Z</wsu:Expires>
         </wsu:Timestamp>
         <wsse:UsernameToken wsu:Id="UsernameToken-A55DABD7EBC81F9C9615946214924243">
            <wsse:Username>xxxxxx</wsse:Username>
            <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">xxxxxx</wsse:Password>
            <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">VwO7xSR3E3qdW//OXsrTmQ==</wsse:Nonce>
            <wsu:Created>2020-07-13T16:24:23.440Z</wsu:Created>
         </wsse:UsernameToken>
      </wsse:Security>
   </soapenv:Header>
   <soapenv:Body>
      <sch:submitRequest>
         <sch:description>xxrun12347</sch:description>
         <sch:jobDefinitionId>
            <!--Optional:-->
            <typ:name>XXHCM_WORKER_WORKSTRUCTURES_JOBSET</typ:name>
            <!--Optional:-->
            <typ:packageName>/oracle/apps/ess/custom/jobset/</typ:packageName>
            <!--Optional:-->
            <typ:type>JOB_SET</typ:type>
         </sch:jobDefinitionId>
         <sch:application>EarHcmEss</sch:application>
         <sch:requestedStartTime/>
         <sch:requestParameters>
            <!--0 to 1000 repetitions:-->
            <typ:parameter>
               <typ:dataType>STRING</typ:dataType>
               <typ:name>submit.argument1</typ:name>
               <typ:value>1234</typ:value>
            </typ:parameter>
            <typ:parameter>
               <typ:dataType>STRING</typ:dataType>
               <typ:name>submit.argument2</typ:name>
               <typ:value>XXXXYYY</typ:value>
            </typ:parameter>
         </sch:requestParameters>
      </sch:submitRequest>
   </soapenv:Body>
</soapenv:Envelope>


Note:  We need to send the MessageID and Action in SOAP header to invoke these service. 


Common Errors and Solutions:

<env:Header>
      <FaultDetail xmlns="http://www.w3.org/2005/08/addressing">
         <ProblemHeaderQName>wsa:MessageID</ProblemHeaderQName>
      </FaultDetail>
      <wsa:Action>http://www.w3.org/2005/08/addressing/fault</wsa:Action>
   </env:Header>

Solution:  You are not sending Message ID in the request message. 


<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
   <env:Header/>
   <env:Body>
      <env:Fault>
         <faultcode>env:Server</faultcode>
         <faultstring>java.lang.NullPointerException</faultstring>
      </env:Fault>
   </env:Body>
</env:Envelope>


Solution:  You are not sending requestParameters tag in the request message. 



<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
   <env:Header/>
   <env:Body>
      <env:Fault>
         <faultcode>env:Server</faultcode>
         <faultstring>ESS-00502 The metadata object type must be specified</faultstring>
      </env:Fault>
   </env:Body>
</env:Envelope>

Solution:  You are not sending <typ:type>JOB_SET</typ:type> value or the namespace is not matching. 


 

Updated WSDL File: OIC will not support direct WSDL URL to create a SOAP connector.  Use the following WSDL definition to create a connector. 


<definitions name="ESSWebService" targetNamespace="http://xmlns.oracle.com/scheduler" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://xmlns.oracle.com/scheduler" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsa="http://www.w3.org/2005/08/addressing">
   <types>
      <xs:schema version="1.0" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://xmlns.oracle.com/scheduler/types" xmlns:tns="http://xmlns.oracle.com/scheduler/types" xmlns:xs="http://www.w3.org/2001/XMLSchema">
         <xs:complexType name="metadataObjectId">
            <xs:sequence>
               <xs:element name="name" type="xs:string" minOccurs="0" form="qualified"/>
               <xs:element name="packageName" type="xs:string" minOccurs="0" form="qualified"/>
               <xs:element name="type" type="tns:metadataObjectType" minOccurs="0" form="qualified"/>
            </xs:sequence>
         </xs:complexType>
         <xs:complexType name="postProcessAction">
            <xs:sequence>
               <xs:element name="actionName" type="xs:string" minOccurs="0"/>
               <xs:element name="actionOrder" type="xs:int"/>
               <xs:element name="arguments" type="xs:string" nillable="true" minOccurs="0" maxOccurs="100"/>
               <xs:element name="fileMgmtGroup" type="xs:string" minOccurs="0"/>
               <xs:element name="description" type="xs:string" minOccurs="0"/>
               <xs:element name="onError" type="xs:boolean"/>
               <xs:element name="onSuccess" type="xs:boolean"/>
               <xs:element name="onWarning" type="xs:boolean"/>
            </xs:sequence>
         </xs:complexType>
         <xs:complexType name="nlsOptions">
            <xs:sequence>
               <xs:element name="language" type="xs:string" minOccurs="0"/>
               <xs:element name="numericCharacters" type="xs:string" minOccurs="0"/>
               <xs:element name="territory" type="xs:string" minOccurs="0"/>
            </xs:sequence>
         </xs:complexType>
         <xs:complexType name="requestParameters">
            <xs:sequence>
               <xs:element name="parameter" type="tns:requestParameter" nillable="true" minOccurs="0" maxOccurs="1000" form="qualified"/>
            </xs:sequence>
         </xs:complexType>
         <xs:complexType name="requestParameter">
            <xs:sequence>
               <xs:element name="dataType" type="tns:dataType" minOccurs="0" form="qualified"/>
               <xs:element name="name" type="xs:string" minOccurs="0"/>
               <xs:element name="scope" type="xs:string" minOccurs="0"/>
               <xs:element name="value" type="xs:string" minOccurs="0"/>
            </xs:sequence>
         </xs:complexType>
         <xs:complexType name="requestExecutionContext">
            <xs:sequence>
               <xs:element name="requestId" type="xs:long"/>
               <xs:element name="requestHandle" type="xs:string"/>
               <xs:element name="pausedState" type="xs:string"/>
               <xs:element name="resumed" type="xs:boolean"/>
            </xs:sequence>
         </xs:complexType>
         <xs:complexType name="stepArgs">
            <xs:sequence>
               <xs:element name="arguments" type="xs:string" nillable="true" minOccurs="0" maxOccurs="100"/>
               <xs:element name="NLSOptions" type="tns:nlsOptions" minOccurs="0" form="qualified"/>
               <xs:element name="PPActions" type="tns:postProcessAction" nillable="true" minOccurs="0" maxOccurs="100" form="qualified"/>
               <xs:element name="stepPath" type="xs:string" minOccurs="0"/>
            </xs:sequence>
         </xs:complexType>
         <xs:complexType name="requestDetail">
            <xs:sequence>
               <xs:element name="actualEndTime" type="xs:dateTime" minOccurs="0" form="qualified"/>
               <xs:element name="actualStartTime" type="xs:dateTime" minOccurs="0" form="qualified"/>
               <xs:element name="cause" type="xs:string" minOccurs="0" form="qualified"/>
               <xs:element name="description" type="xs:string" minOccurs="0" form="qualified"/>
               <xs:element name="dispatcherNode" type="xs:string" minOccurs="0" form="qualified"/>
               <xs:element name="expirationTime" type="xs:dateTime" minOccurs="0" form="qualified"/>
               <xs:element name="isCancellable" type="xs:boolean" form="qualified"/>
               <xs:element name="isHoldable" type="xs:boolean" form="qualified"/>
               <xs:element name="jobDefinitionId" type="tns:metadataObjectId" minOccurs="0" form="qualified"/>
               <xs:element name="parentRequestId" type="xs:long" form="qualified"/>
               <xs:element name="priority" type="xs:int" form="qualified"/>
               <xs:element name="processorNode" type="xs:string" minOccurs="0" form="qualified"/>
               <xs:element name="requestId" type="xs:long" form="qualified"/>
               <xs:element name="requestParameters" type="tns:requestParameters" minOccurs="0" form="qualified"/>
               <xs:element name="requestedEndTime" type="xs:dateTime" minOccurs="0" form="qualified"/>
               <xs:element name="requestedStartTime" type="xs:dateTime" minOccurs="0" form="qualified"/>
               <xs:element name="retried" type="xs:int" form="qualified"/>
               <xs:element name="scheduleId" type="tns:metadataObjectId" minOccurs="0" form="qualified"/>
               <xs:element name="scheduledTime" type="xs:dateTime" minOccurs="0" form="qualified"/>
               <xs:element name="state" type="tns:state" minOccurs="0" form="qualified"/>
               <xs:element name="errorType" type="tns:errorType" minOccurs="0" form="qualified"/>
               <xs:element name="stepId" type="xs:string" minOccurs="0" form="qualified"/>
               <xs:element name="submissionTime" type="xs:dateTime" minOccurs="0" form="qualified"/>
               <xs:element name="submitter" type="xs:string" minOccurs="0" form="qualified"/>
               <xs:element name="runAsUser" type="xs:string" minOccurs="0" form="qualified"/>
               <xs:element name="triggerId" type="tns:metadataObjectId" minOccurs="0" form="qualified"/>
               <xs:element name="workAssignmentId" type="tns:metadataObjectId" minOccurs="0" form="qualified"/>
               <xs:element name="workshiftId" type="tns:metadataObjectId" minOccurs="0" form="qualified"/>
               <xs:element name="requestType" type="tns:requestType" minOccurs="0" form="qualified"/>
               <xs:element name="errorWarningMessage" type="xs:string" minOccurs="0" form="qualified"/>
               <xs:element name="errorWarningTime" type="xs:dateTime" minOccurs="0" form="qualified"/>
               <xs:element name="errorWarningDetail" type="xs:string" minOccurs="0" form="qualified"/>
               <xs:element name="ecid" type="xs:string" minOccurs="0" form="qualified"/>
               <xs:element name="processPhase" type="xs:string" minOccurs="0" form="qualified"/>
            </xs:sequence>
         </xs:complexType>
         <xs:simpleType name="metadataObjectType">
            <xs:restriction base="xs:string">
               <xs:enumeration value="JOB_TYPE"/>
               <xs:enumeration value="JOB_DEFINITION"/>
               <xs:enumeration value="JOB_SET"/>
               <xs:enumeration value="INCOMPATIBILITY"/>
               <xs:enumeration value="SCHEDULE_DEFINITION"/>
               <xs:enumeration value="EXCLUSION_DEFINITION"/>
               <xs:enumeration value="TRIGGER"/>
               <xs:enumeration value="WORKSHIFT"/>
               <xs:enumeration value="WORK_ASSIGNMENT"/>
            </xs:restriction>
         </xs:simpleType>
         <xs:simpleType name="state">
            <xs:restriction base="xs:string">
               <xs:enumeration value="WAIT"/>
               <xs:enumeration value="READY"/>
               <xs:enumeration value="RUNNING"/>
               <xs:enumeration value="COMPLETED"/>
               <xs:enumeration value="BLOCKED"/>
               <xs:enumeration value="HOLD"/>
               <xs:enumeration value="CANCELLING"/>
               <xs:enumeration value="EXPIRED"/>
               <xs:enumeration value="CANCELLED"/>
               <xs:enumeration value="ERROR"/>
               <xs:enumeration value="WARNING"/>
               <xs:enumeration value="SUCCEEDED"/>
               <xs:enumeration value="PAUSED"/>
               <xs:enumeration value="PENDING_VALIDATION"/>
               <xs:enumeration value="VALIDATION_FAILED"/>
               <xs:enumeration value="SCHEDULE_ENDED"/>
               <xs:enumeration value="FINISHED"/>
               <xs:enumeration value="ERROR_AUTO_RETRY"/>
            </xs:restriction>
         </xs:simpleType>
         <xs:simpleType name="errorType">
            <xs:restriction base="xs:string">
               <xs:enumeration value="UNDEFINED"/>
               <xs:enumeration value="SYSTEM"/>
               <xs:enumeration value="BUSINESS"/>
               <xs:enumeration value="TIMEOUT"/>
            </xs:restriction>
         </xs:simpleType>
         <xs:simpleType name="dataType">
            <xs:restriction base="xs:string">
               <xs:enumeration value="STRING"/>
               <xs:enumeration value="INTEGER"/>
               <xs:enumeration value="LONG"/>
               <xs:enumeration value="BOOLEAN"/>
               <xs:enumeration value="DATETIME"/>
            </xs:restriction>
         </xs:simpleType>
         <xs:simpleType name="requestType">
            <xs:restriction base="xs:string">
               <xs:enumeration value="SINGLETON"/>
               <xs:enumeration value="RECUR_PARENT"/>
               <xs:enumeration value="RECUR_CHILD"/>
               <xs:enumeration value="JOBSET_SINGLETON"/>
               <xs:enumeration value="JOBSET_STEP"/>
               <xs:enumeration value="JOBSET_RECUR_PARENT"/>
               <xs:enumeration value="JOBSET_RECUR_CHILD"/>
               <xs:enumeration value="SUB_REQUEST"/>
               <xs:enumeration value="UNVALIDATED_REQUEST"/>
               <xs:enumeration value="UNVALIDATED_SUB_REQUEST"/>
               <xs:enumeration value="TRIGGER_CHILD"/>
               <xs:enumeration value="JOBSET_TRIGGER_CHILD"/>
            </xs:restriction>
         </xs:simpleType>
         <xs:simpleType name="asyncStatus">
            <xs:restriction base="xs:string">
               <xs:enumeration value="SUCCESS"/>
               <xs:enumeration value="PAUSE"/>
               <xs:enumeration value="CANCEL"/>
               <xs:enumeration value="WARNING"/>
               <xs:enumeration value="ERROR"/>
               <xs:enumeration value="UPDATE"/>
               <xs:enumeration value="BIZ_ERROR"/>
            </xs:restriction>
         </xs:simpleType>
         <xs:simpleType name="processPhase">
            <xs:restriction base="xs:string">
               <xs:enumeration value="Undefined"/>
               <xs:enumeration value="Initial"/>
               <xs:enumeration value="JobSetInitial"/>
               <xs:enumeration value="PreProcessStart"/>
               <xs:enumeration value="PreProcessDelayed"/>
               <xs:enumeration value="PreProcessComplete"/>
               <xs:enumeration value="ExecuteInitiate"/>
               <xs:enumeration value="ExecuteInitiateComplete"/>
               <xs:enumeration value="ExecuteAsyncWait"/>
               <xs:enumeration value="ExecuteFinalize"/>
               <xs:enumeration value="ExecuteFinalizeAsync"/>
               <xs:enumeration value="ExecuteFinalizeComplete"/>
               <xs:enumeration value="ExecutePaused"/>
               <xs:enumeration value="PostProcessStart"/>
               <xs:enumeration value="PostProcessDelayed"/>
               <xs:enumeration value="PostProcessComplete"/>
               <xs:enumeration value="ProcessExecuteComplete"/>
               <xs:enumeration value="PostExecuteStart"/>
               <xs:enumeration value="PostExecuteWaitForSubreq"/>
               <xs:enumeration value="PostExecuteTerminalComplete"/>
               <xs:enumeration value="PostExecuteComplete"/>
               <xs:enumeration value="Complete"/>
            </xs:restriction>
         </xs:simpleType>
      </xs:schema>
      <schema targetNamespace="http://xmlns.oracle.com/scheduler" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://xmlns.oracle.com/scheduler/types">
         <import namespace="http://xmlns.oracle.com/scheduler/types"/>
         <import namespace="http://www.w3.org/2005/08/addressing" schemaLocation="https://www.w3.org/2006/03/addressing/ws-addr.xsd"/>
         <xsd:complexType name="submitRequest">
            <xsd:sequence>
               <xsd:element name="description" type="xsd:string" form="qualified"/>
               <xsd:element name="jobDefinitionId" type="ns1:metadataObjectId" form="qualified"/>
               <xsd:element name="application" type="xsd:string" form="qualified"/>
               <xsd:element name="requestedStartTime" type="xsd:dateTime" form="qualified"/>
               <xsd:element name="requestParameters" type="ns1:requestParameters" form="qualified"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="submitRequest" type="tns:submitRequest"/>
         <xsd:complexType name="submitRequestResponse">
            <xsd:sequence>
               <xsd:element name="requestId" type="xsd:long"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="submitRequestResponse" type="tns:submitRequestResponse"/>
         <xsd:complexType name="submitRecurringRequest">
            <xsd:sequence>
               <xsd:element name="description" type="xsd:string" form="qualified"/>
               <xsd:element name="jobDefinitionId" type="ns1:metadataObjectId" form="qualified"/>
               <xsd:element name="scheduleId" type="ns1:metadataObjectId" form="qualified"/>
               <xsd:element name="triggerId" type="ns1:metadataObjectId" form="qualified"/>
               <xsd:element name="application" type="xsd:string" form="qualified"/>
               <xsd:element name="requestedStartTime" type="xsd:dateTime" form="qualified"/>
               <xsd:element name="requestedEndTime" type="xsd:dateTime" form="qualified"/>
               <xsd:element name="requestParameters" type="ns1:requestParameters" form="qualified"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="submitRecurringRequest" type="tns:submitRecurringRequest"/>
         <xsd:complexType name="submitRecurringRequestResponse">
            <xsd:sequence>
               <xsd:element name="requestId" type="xsd:long"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="submitRecurringRequestResponse" type="tns:submitRecurringRequestResponse"/>
         <xsd:complexType name="submitInstantRecurringRequest">
            <xsd:sequence>
               <xsd:element name="description" type="xsd:string" form="qualified"/>
               <xsd:element name="jobDefinitionId" type="ns1:metadataObjectId" form="qualified"/>
               <xsd:element name="iCalSchedule" type="xsd:string" form="qualified"/>
               <xsd:element name="application" type="xsd:string" form="qualified"/>
               <xsd:element name="requestedStartTime" type="xsd:dateTime" form="qualified"/>
               <xsd:element name="requestedEndTime" type="xsd:dateTime" form="qualified"/>
               <xsd:element name="requestParameters" type="ns1:requestParameters" form="qualified"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="submitInstantRecurringRequest" type="tns:submitInstantRecurringRequest"/>
         <xsd:complexType name="submitInstantRecurringRequestResponse">
            <xsd:sequence>
               <xsd:element name="requestId" type="xsd:long"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="submitInstantRecurringRequestResponse" type="tns:submitInstantRecurringRequestResponse"/>
         <xsd:complexType name="getCompletionStatus">
            <xsd:sequence>
               <xsd:element name="requestId" type="xsd:long" form="qualified"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="getCompletionStatus" type="tns:getCompletionStatus"/>
         <xsd:complexType name="onJobCompletion">
            <xsd:sequence>
               <xsd:element name="requestId" type="xsd:long"/>
               <xsd:element name="state" type="ns1:state" minOccurs="0"/>
               <xsd:element name="resultMessage" type="xsd:string"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="onJobCompletion" type="tns:onJobCompletion"/>
         <xsd:complexType name="getRequestState">
            <xsd:sequence>
               <xsd:element name="requestId" type="xsd:long" form="qualified"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="getRequestState" type="tns:getRequestState"/>
         <xsd:complexType name="getRequestStateResponse">
            <xsd:sequence>
               <xsd:element name="state" type="ns1:state"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="getRequestStateResponse" type="tns:getRequestStateResponse"/>
         <xsd:complexType name="checkInCancelling">
            <xsd:sequence>
               <xsd:element name="requestExecutionContext" type="xsd:string" form="qualified"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="checkInCancelling" type="tns:checkInCancelling"/>
         <xsd:complexType name="checkInCancellingResponse">
            <xsd:sequence>
               <xsd:element name="isCancelling" type="xsd:boolean"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="checkInCancellingResponse" type="tns:checkInCancellingResponse"/>
         <xsd:complexType name="getRequestDetail">
            <xsd:sequence>
               <xsd:element name="requestId" form="qualified" type="xsd:long"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="getRequestDetail" type="tns:getRequestDetail"/>
         <xsd:complexType name="getRequestDetailResponse">
            <xsd:sequence>
               <xsd:element name="requestDetail" type="ns1:requestDetail"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="getRequestDetailResponse" type="tns:getRequestDetailResponse"/>
         <xsd:complexType name="getRequestExecutionContext">
            <xsd:sequence>
               <xsd:element name="requestExecutionContext" type="xsd:string" form="qualified"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="getRequestExecutionContext" type="tns:getRequestExecutionContext"/>
         <xsd:complexType name="getRequestExecutionContextResponse">
            <xsd:sequence>
               <xsd:element name="requestExecutionContext" type="ns1:requestExecutionContext"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="getRequestExecutionContextResponse" type="tns:getRequestExecutionContextResponse"/>
         <xsd:complexType name="holdRequest">
            <xsd:sequence>
               <xsd:element name="requestId" form="qualified" type="xsd:long"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="holdRequest" type="tns:holdRequest"/>
         <xsd:complexType name="holdRequestResponse">
            <xsd:sequence/>
         </xsd:complexType>
         <xsd:element name="holdRequestResponse" type="tns:holdRequestResponse"/>
         <xsd:complexType name="releaseRequest">
            <xsd:sequence>
               <xsd:element name="requestId" form="qualified" type="xsd:long"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="releaseRequest" type="tns:releaseRequest"/>
         <xsd:complexType name="releaseRequestResponse">
            <xsd:sequence/>
         </xsd:complexType>
         <xsd:element name="releaseRequestResponse" type="tns:releaseRequestResponse"/>
         <xsd:complexType name="setAsyncRequestStatus">
            <xsd:sequence>
               <xsd:element name="requestExecutionContext" type="xsd:string" form="qualified"/>
               <xsd:element name="status" form="qualified" type="ns1:asyncStatus"/>
               <xsd:element name="statusMessage" type="xsd:string" minOccurs="0" maxOccurs="1" form="qualified"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="setAsyncRequestStatus" type="tns:setAsyncRequestStatus"/>
         <xsd:complexType name="setAsyncRequestStatusResponse">
            <xsd:sequence/>
         </xsd:complexType>
         <xsd:element name="setAsyncRequestStatusResponse" type="tns:setAsyncRequestStatusResponse"/>
         <xsd:complexType name="cancelRequest">
            <xsd:sequence>
               <xsd:element name="requestId" type="xsd:long" form="qualified"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="cancelRequest" type="tns:cancelRequest"/>
         <xsd:complexType name="cancelRequestResponse">
            <xsd:sequence/>
         </xsd:complexType>
         <xsd:element name="cancelRequestResponse" type="tns:cancelRequestResponse"/>
         <xsd:complexType name="deleteRequest">
            <xsd:sequence>
               <xsd:element name="requestId" form="qualified" type="xsd:long"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="deleteRequest" type="tns:deleteRequest"/>
         <xsd:complexType name="deleteRequestResponse">
            <xsd:sequence/>
         </xsd:complexType>
         <xsd:element name="deleteRequestResponse" type="tns:deleteRequestResponse"/>
         <xsd:complexType name="purgeRequest">
            <xsd:sequence>
               <xsd:element name="requestId" form="qualified" type="xsd:long"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="purgeRequest" type="tns:purgeRequest"/>
         <xsd:complexType name="purgeRequestResponse">
            <xsd:sequence/>
         </xsd:complexType>
         <xsd:element name="purgeRequestResponse" type="tns:purgeRequestResponse"/>
         <xsd:complexType name="setSubmitArgs">
            <xsd:sequence>
               <xsd:element name="requestParameters" type="ns1:requestParameters" form="qualified"/>
               <xsd:element name="arguments" minOccurs="0" maxOccurs="100" type="xsd:string" form="qualified"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="setSubmitArgs" type="tns:setSubmitArgs"/>
         <xsd:complexType name="setSubmitArgsResponse">
            <xsd:sequence>
               <xsd:element name="requestParametersReturn" type="ns1:requestParameters"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="setSubmitArgsResponse" type="tns:setSubmitArgsResponse"/>
         <xsd:complexType name="setStepsArgs">
            <xsd:sequence>
               <xsd:element name="requestParameters" type="ns1:requestParameters" form="qualified"/>
               <xsd:element name="stepArgsList" minOccurs="0" maxOccurs="100" form="qualified" type="ns1:stepArgs"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="setStepsArgs" type="tns:setStepsArgs"/>
         <xsd:complexType name="setStepsArgsResponse">
            <xsd:sequence>
               <xsd:element name="requestParametersReturn" type="ns1:requestParameters"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="setStepsArgsResponse" type="tns:setStepsArgsResponse"/>
         <xsd:complexType name="addPPActions">
            <xsd:sequence>
               <xsd:element name="requestParameters" type="ns1:requestParameters" form="qualified"/>
               <xsd:element name="postProcessActions" minOccurs="0" maxOccurs="100" type="ns1:postProcessAction" form="qualified"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="addPPActions" type="tns:addPPActions"/>
         <xsd:complexType name="addPPActionsResponse">
            <xsd:sequence>
               <xsd:element name="requestParametersReturn" type="ns1:requestParameters"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="addPPActionsResponse" type="tns:addPPActionsResponse"/>
         <xsd:complexType name="setNLSOptions">
            <xsd:sequence>
               <xsd:element name="requestParameters" type="ns1:requestParameters" form="qualified"/>
               <xsd:element name="nlsOptions" type="ns1:nlsOptions" form="qualified"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="setNLSOptions" type="tns:setNLSOptions"/>
         <xsd:complexType name="setNLSOptionsResponse">
            <xsd:sequence>
               <xsd:element name="requestParametersReturn" type="ns1:requestParameters"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="setNLSOptionsResponse" type="tns:setNLSOptionsResponse"/>
         <xsd:complexType name="IllegalStateException">
            <xsd:sequence>
               <xsd:element name="Message" type="xsd:string"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="IllegalStateException" type="tns:IllegalStateException"/>
         <xsd:complexType name="RuntimeServiceException">
            <xsd:sequence>
               <xsd:element name="Message" type="xsd:string"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="RuntimeServiceException" type="tns:RuntimeServiceException"/>
         <xsd:complexType name="IllegalArgumentException">
            <xsd:sequence>
               <xsd:element name="Message" type="xsd:string"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="IllegalArgumentException" type="tns:IllegalArgumentException"/>
         <xsd:complexType name="ValidationException">
            <xsd:sequence>
               <xsd:element name="Message" type="xsd:string"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="ValidationException" type="tns:ValidationException"/>
         <xsd:complexType name="NotAllowedException">
            <xsd:sequence>
               <xsd:element name="Message" type="xsd:string"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="NotAllowedException" type="tns:NotAllowedException"/>
         <xsd:complexType name="NotFoundException">
            <xsd:sequence>
               <xsd:element name="Message" type="xsd:string"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="NotFoundException" type="tns:NotFoundException"/>
         <xsd:complexType name="RequestNotFoundException">
            <xsd:sequence>
               <xsd:element name="Message" type="xsd:string"/>
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="RequestNotFoundException" type="tns:RequestNotFoundException"/>
      </schema>
   </types>
   <message name="wsaHeader">
      <part name="MessageID" element="wsa:MessageID"/>
      <part name="Action" element="wsa:Action"/>
   </message>
   <message name="submitRequestInput">
      <part name="parameters" element="tns:submitRequest"/>
   </message>
   <message name="submitRequestOutput">
      <part name="parameters" element="tns:submitRequestResponse"/>
   </message>
   <message name="RuntimeServiceException">
      <part name="RuntimeServiceException" element="tns:RuntimeServiceException"/>
   </message>
   <message name="ValidationException">
      <part name="ValidationException" element="tns:ValidationException"/>
   </message>
   <message name="NotFoundException">
      <part name="NotFoundException" element="tns:NotFoundException"/>
   </message>
   <message name="submitRecurringRequestInput">
      <part name="parameters" element="tns:submitRecurringRequest"/>
   </message>
   <message name="submitRecurringRequestOutput">
      <part name="parameters" element="tns:submitRecurringRequestResponse"/>
   </message>
   <message name="submitInstantRecurringRequestInput">
      <part name="parameters" element="tns:submitInstantRecurringRequest"/>
   </message>
   <message name="submitInstantRecurringRequestOutput">
      <part name="parameters" element="tns:submitInstantRecurringRequestResponse"/>
   </message>
   <message name="NotAllowedException">
      <part name="NotAllowedException" element="tns:NotAllowedException"/>
   </message>
   <message name="getCompletionStatusInput">
      <part name="parameters" element="tns:getCompletionStatus"/>
   </message>
   <message name="checkInCancellingInput">
      <part name="parameters" element="tns:checkInCancelling"/>
   </message>
   <message name="checkInCancellingOutput">
      <part name="parameters" element="tns:checkInCancellingResponse"/>
   </message>
   <message name="getRequestStateInput">
      <part name="parameters" element="tns:getRequestState"/>
   </message>
   <message name="getRequestStateOutput">
      <part name="parameters" element="tns:getRequestStateResponse"/>
   </message>
   <message name="getRequestDetailInput">
      <part name="parameters" element="tns:getRequestDetail"/>
   </message>
   <message name="getRequestDetailOutput">
      <part name="parameters" element="tns:getRequestDetailResponse"/>
   </message>
   <message name="getRequestExecutionContextInput">
      <part name="parameters" element="tns:getRequestExecutionContext"/>
   </message>
   <message name="getRequestExecutionContextOutput">
      <part name="parameters" element="tns:getRequestExecutionContextResponse"/>
   </message>
   <message name="holdRequestInput">
      <part name="parameters" element="tns:holdRequest"/>
   </message>
   <message name="holdRequestOutput">
      <part name="parameters" element="tns:holdRequestResponse"/>
   </message>
   <message name="IllegalStateException">
      <part name="IllegalStateException" element="tns:IllegalStateException"/>
   </message>
   <message name="releaseRequestInput">
      <part name="parameters" element="tns:releaseRequest"/>
   </message>
   <message name="releaseRequestOutput">
      <part name="parameters" element="tns:releaseRequestResponse"/>
   </message>
   <message name="setAsyncRequestStatusInput">
      <part name="parameters" element="tns:setAsyncRequestStatus"/>
   </message>
   <message name="setAsyncRequestStatusOutput">
      <part name="parameters" element="tns:setAsyncRequestStatusResponse"/>
   </message>
   <message name="RequestNotFoundException">
      <part name="RequestNotFoundException" element="tns:RequestNotFoundException"/>
   </message>
   <message name="cancelRequestInput">
      <part name="parameters" element="tns:cancelRequest"/>
   </message>
   <message name="cancelRequestOutput">
      <part name="parameters" element="tns:cancelRequestResponse"/>
   </message>
   <message name="deleteRequestInput">
      <part name="parameters" element="tns:deleteRequest"/>
   </message>
   <message name="deleteRequestOutput">
      <part name="parameters" element="tns:deleteRequestResponse"/>
   </message>
   <message name="purgeRequestInput">
      <part name="parameters" element="tns:purgeRequest"/>
   </message>
   <message name="purgeRequestOutput">
      <part name="parameters" element="tns:purgeRequestResponse"/>
   </message>
   <message name="setSubmitArgsInput">
      <part name="parameters" element="tns:setSubmitArgs"/>
   </message>
   <message name="setSubmitArgsOutput">
      <part name="parameters" element="tns:setSubmitArgsResponse"/>
   </message>
   <message name="IllegalArgumentException">
      <part name="IllegalArgumentException" element="tns:IllegalArgumentException"/>
   </message>
   <message name="setStepsArgsInput">
      <part name="parameters" element="tns:setStepsArgs"/>
   </message>
   <message name="setStepsArgsOutput">
      <part name="parameters" element="tns:setStepsArgsResponse"/>
   </message>
   <message name="addPPActionsInput">
      <part name="parameters" element="tns:addPPActions"/>
   </message>
   <message name="addPPActionsOutput">
      <part name="parameters" element="tns:addPPActionsResponse"/>
   </message>
   <message name="setNLSOptionsInput">
      <part name="parameters" element="tns:setNLSOptions"/>
   </message>
   <message name="setNLSOptionsOutput">
      <part name="parameters" element="tns:setNLSOptionsResponse"/>
   </message>
   <message name="onJobCompletionInput">
      <part name="parameters" element="tns:onJobCompletion"/>
   </message>
   <portType name="ESSWebService">
      <operation name="submitRequest">
         <input message="tns:submitRequestInput" ns1:Action="submitRequest" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <output message="tns:submitRequestOutput" ns1:Action="submitRequest" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <fault name="RuntimeServiceException" message="tns:RuntimeServiceException"/>
         <fault name="ValidationException" message="tns:ValidationException"/>
         <fault name="NotFoundException" message="tns:NotFoundException"/>
      </operation>
      <operation name="submitRecurringRequest">
         <input message="tns:submitRecurringRequestInput" ns1:Action="submitRecurringRequest" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <output message="tns:submitRecurringRequestOutput" ns1:Action="submitRecurringRequest" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <fault name="RuntimeServiceException" message="tns:RuntimeServiceException"/>
         <fault name="ValidationException" message="tns:ValidationException"/>
         <fault name="NotFoundException" message="tns:NotFoundException"/>
      </operation>
      <operation name="submitInstantRecurringRequest">
         <input message="tns:submitInstantRecurringRequestInput" ns1:Action="submitInstantRecurringRequest" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <output message="tns:submitInstantRecurringRequestOutput" ns1:Action="submitInstantRecurringRequest" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <fault name="RuntimeServiceException" message="tns:RuntimeServiceException"/>
         <fault name="ValidationException" message="tns:ValidationException"/>
         <fault name="NotAllowedException" message="tns:NotAllowedException"/>
         <fault name="NotFoundException" message="tns:NotFoundException"/>
      </operation>
      <operation name="getCompletionStatus">
         <input message="tns:getCompletionStatusInput" ns1:Action="getCompletionStatus" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
      </operation>
      <operation name="checkInCancelling">
         <input message="tns:checkInCancellingInput" ns1:Action="checkInCancelling" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <output message="tns:checkInCancellingOutput" ns1:Action="checkInCancelling" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <fault name="RuntimeServiceException" message="tns:RuntimeServiceException"/>
         <fault name="NotFoundException" message="tns:NotFoundException"/>
      </operation>
      <operation name="getRequestState">
         <input message="tns:getRequestStateInput" ns1:Action="getRequestState" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <output message="tns:getRequestStateOutput" ns1:Action="getRequestState" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <fault name="RuntimeServiceException" message="tns:RuntimeServiceException"/>
         <fault name="NotFoundException" message="tns:NotFoundException"/>
      </operation>
      <operation name="getRequestDetail">
         <input message="tns:getRequestDetailInput" ns1:Action="getRequestDetail" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <output message="tns:getRequestDetailOutput" ns1:Action="getRequestDetail" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <fault name="RuntimeServiceException" message="tns:RuntimeServiceException"/>
         <fault name="NotFoundException" message="tns:NotFoundException"/>
      </operation>
      <operation name="getRequestExecutionContext">
         <input message="tns:getRequestExecutionContextInput" ns1:Action="getRequestExecutionContext" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <output message="tns:getRequestExecutionContextOutput" ns1:Action="getRequestExecutionContext" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <fault name="RuntimeServiceException" message="tns:RuntimeServiceException"/>
         <fault name="NotFoundException" message="tns:NotFoundException"/>
      </operation>
      <operation name="holdRequest">
         <input message="tns:holdRequestInput" ns1:Action="holdRequest" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <output message="tns:holdRequestOutput" ns1:Action="holdRequest" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <fault name="RuntimeServiceException" message="tns:RuntimeServiceException"/>
         <fault name="IllegalStateException" message="tns:IllegalStateException"/>
         <fault name="NotAllowedException" message="tns:NotAllowedException"/>
         <fault name="NotFoundException" message="tns:NotFoundException"/>
      </operation>
      <operation name="releaseRequest">
         <input message="tns:releaseRequestInput" ns1:Action="releaseRequest" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <output message="tns:releaseRequestOutput" ns1:Action="releaseRequest" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <fault name="RuntimeServiceException" message="tns:RuntimeServiceException"/>
         <fault name="IllegalStateException" message="tns:IllegalStateException"/>
         <fault name="NotFoundException" message="tns:NotFoundException"/>
      </operation>
      <operation name="setAsyncRequestStatus">
         <input message="tns:setAsyncRequestStatusInput" ns1:Action="setAsyncRequestStatus" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <output message="tns:setAsyncRequestStatusOutput" ns1:Action="setAsyncRequestStatus" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <fault name="RuntimeServiceException" message="tns:RuntimeServiceException"/>
         <fault name="RequestNotFoundException" message="tns:RequestNotFoundException"/>
      </operation>
      <operation name="cancelRequest">
         <input message="tns:cancelRequestInput" ns1:Action="cancelRequest" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <output message="tns:cancelRequestOutput" ns1:Action="cancelRequest" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <fault name="RuntimeServiceException" message="tns:RuntimeServiceException"/>
         <fault name="IllegalStateException" message="tns:IllegalStateException"/>
         <fault name="NotFoundException" message="tns:NotFoundException"/>
      </operation>
      <operation name="deleteRequest">
         <input message="tns:deleteRequestInput" ns1:Action="deleteRequest" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <output message="tns:deleteRequestOutput" ns1:Action="deleteRequest" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <fault name="RuntimeServiceException" message="tns:RuntimeServiceException"/>
         <fault name="IllegalStateException" message="tns:IllegalStateException"/>
         <fault name="NotAllowedException" message="tns:NotAllowedException"/>
         <fault name="NotFoundException" message="tns:NotFoundException"/>
      </operation>
      <operation name="purgeRequest">
         <input message="tns:purgeRequestInput" ns1:Action="purgeRequest" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <output message="tns:purgeRequestOutput" ns1:Action="purgeRequest" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <fault name="RuntimeServiceException" message="tns:RuntimeServiceException"/>
         <fault name="IllegalStateException" message="tns:IllegalStateException"/>
         <fault name="NotAllowedException" message="tns:NotAllowedException"/>
         <fault name="NotFoundException" message="tns:NotFoundException"/>
      </operation>
      <operation name="setSubmitArgs">
         <input message="tns:setSubmitArgsInput" ns1:Action="setSubmitArgs" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <output message="tns:setSubmitArgsOutput" ns1:Action="setSubmitArgs" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <fault name="IllegalArgumentException" message="tns:IllegalArgumentException"/>
      </operation>
      <operation name="setStepsArgs">
         <input message="tns:setStepsArgsInput" ns1:Action="setStepsArgs" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <output message="tns:setStepsArgsOutput" ns1:Action="setStepsArgs" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <fault name="IllegalArgumentException" message="tns:IllegalArgumentException"/>
      </operation>
      <operation name="addPPActions">
         <input message="tns:addPPActionsInput" ns1:Action="addPPActions" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <output message="tns:addPPActionsOutput" ns1:Action="addPPActions" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <fault name="IllegalArgumentException" message="tns:IllegalArgumentException"/>
      </operation>
      <operation name="setNLSOptions">
         <input message="tns:setNLSOptionsInput" ns1:Action="setNLSOptions" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <output message="tns:setNLSOptionsOutput" ns1:Action="setNLSOptions" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
         <fault name="IllegalArgumentException" message="tns:IllegalArgumentException"/>
      </operation>
   </portType>
   <portType name="ESSWebServiceCallback">
      <operation name="onJobCompletion">
         <input message="tns:onJobCompletionInput" ns1:Action="http://xmlns.oracle.com/scheduler/ESSWebService/getCompletionStatus/Response" xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"/>
      </operation>
   </portType>
   <binding name="ESSWebServiceCallbackSoapHttp" type="tns:ESSWebServiceCallback" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl">
      <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
      <wsaw:UsingAddressing wsdl:required="true"/>
      <operation name="onJobCompletion">
         <soap:operation soapAction="onJobCompletion"/>
         <input>
            <soap:body use="literal"/>
         </input>
      </operation>
   </binding>
   <binding name="ESSWebServiceSoapHttp" type="tns:ESSWebService" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl">
      <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
      <wsaw:UsingAddressing wsdl:required="true"/>
      <operation name="submitRequest">
         <soap:operation soapAction="submitRequest"/>
         <input>
            <soap:body use="literal"/>
            <soap:header message="tns:wsaHeader" part="MessageID" use="literal"/>
            <soap:header message="tns:wsaHeader" part="Action" use="literal"/>
         </input>
         <output>
            <soap:body use="literal"/>
         </output>
         <fault name="RuntimeServiceException">
            <soap:fault name="RuntimeServiceException" use="literal" encodingStyle=""/>
         </fault>
         <fault name="ValidationException">
            <soap:fault name="ValidationException" use="literal" encodingStyle=""/>
         </fault>
         <fault name="NotFoundException">
            <soap:fault name="NotFoundException" use="literal" encodingStyle=""/>
         </fault>
      </operation>
      <operation name="submitRecurringRequest">
         <soap:operation soapAction="submitRecurringRequest"/>
         <input>
            <soap:body use="literal"/>
         </input>
         <output>
            <soap:body use="literal"/>
         </output>
         <fault name="RuntimeServiceException">
            <soap:fault name="RuntimeServiceException" use="literal" encodingStyle=""/>
         </fault>
         <fault name="ValidationException">
            <soap:fault name="ValidationException" use="literal" encodingStyle=""/>
         </fault>
         <fault name="NotFoundException">
            <soap:fault name="NotFoundException" use="literal" encodingStyle=""/>
         </fault>
      </operation>
      <operation name="submitInstantRecurringRequest">
         <soap:operation soapAction="submitInstantRecurringRequest"/>
         <input>
            <soap:body use="literal"/>
         </input>
         <output>
            <soap:body use="literal"/>
         </output>
         <fault name="RuntimeServiceException">
            <soap:fault name="RuntimeServiceException" use="literal" encodingStyle=""/>
         </fault>
         <fault name="ValidationException">
            <soap:fault name="ValidationException" use="literal" encodingStyle=""/>
         </fault>
         <fault name="NotAllowedException">
            <soap:fault name="NotAllowedException" use="literal" encodingStyle=""/>
         </fault>
         <fault name="NotFoundException">
            <soap:fault name="NotFoundException" use="literal" encodingStyle=""/>
         </fault>
      </operation>
      <operation name="getCompletionStatus">
         <soap:operation soapAction="getCompletionStatus"/>
         <input>
            <soap:body use="literal"/>
         </input>
      </operation>
      <operation name="getRequestState">
         <soap:operation soapAction="getRequestState"/>
         <input>
            <soap:body use="literal"/>
         </input>
         <output>
            <soap:body use="literal"/>
         </output>
         <fault name="RuntimeServiceException">
            <soap:fault name="RuntimeServiceException" use="literal" encodingStyle=""/>
         </fault>
         <fault name="NotFoundException">
            <soap:fault name="NotFoundException" use="literal" encodingStyle=""/>
         </fault>
      </operation>
      <operation name="checkInCancelling">
         <soap:operation soapAction="checkInCancelling"/>
         <input>
            <soap:body use="literal"/>
         </input>
         <output>
            <soap:body use="literal"/>
         </output>
         <fault name="RuntimeServiceException">
            <soap:fault name="RuntimeServiceException" use="literal" encodingStyle=""/>
         </fault>
         <fault name="NotFoundException">
            <soap:fault name="NotFoundException" use="literal" encodingStyle=""/>
         </fault>
      </operation>
      <operation name="getRequestDetail">
         <soap:operation soapAction="getRequestDetail"/>
         <input>
            <soap:body use="literal"/>
         </input>
         <output>
            <soap:body use="literal"/>
         </output>
         <fault name="RuntimeServiceException">
            <soap:fault name="RuntimeServiceException" use="literal" encodingStyle=""/>
         </fault>
         <fault name="NotFoundException">
            <soap:fault name="NotFoundException" use="literal" encodingStyle=""/>
         </fault>
      </operation>
      <operation name="getRequestExecutionContext">
         <soap:operation soapAction="getRequestExecutionContext"/>
         <input>
            <soap:body use="literal"/>
         </input>
         <output>
            <soap:body use="literal"/>
         </output>
         <fault name="RuntimeServiceException">
            <soap:fault name="RuntimeServiceException" use="literal" encodingStyle=""/>
         </fault>
         <fault name="NotFoundException">
            <soap:fault name="NotFoundException" use="literal" encodingStyle=""/>
         </fault>
      </operation>
      <operation name="holdRequest">
         <soap:operation soapAction="holdRequest"/>
         <input>
            <soap:body use="literal"/>
         </input>
         <output>
            <soap:body use="literal"/>
         </output>
         <fault name="RuntimeServiceException">
            <soap:fault name="RuntimeServiceException" use="literal" encodingStyle=""/>
         </fault>
         <fault name="IllegalStateException">
            <soap:fault name="IllegalStateException" use="literal" encodingStyle=""/>
         </fault>
         <fault name="NotAllowedException">
            <soap:fault name="NotAllowedException" use="literal" encodingStyle=""/>
         </fault>
         <fault name="NotFoundException">
            <soap:fault name="NotFoundException" use="literal" encodingStyle=""/>
         </fault>
      </operation>
      <operation name="releaseRequest">
         <soap:operation soapAction="releaseRequest"/>
         <input>
            <soap:body use="literal"/>
         </input>
         <output>
            <soap:body use="literal"/>
         </output>
         <fault name="RuntimeServiceException">
            <soap:fault name="RuntimeServiceException" use="literal" encodingStyle=""/>
         </fault>
         <fault name="IllegalStateException">
            <soap:fault name="IllegalStateException" use="literal" encodingStyle=""/>
         </fault>
         <fault name="NotFoundException">
            <soap:fault name="NotFoundException" use="literal" encodingStyle=""/>
         </fault>
      </operation>
      <operation name="setAsyncRequestStatus">
         <soap:operation soapAction="setAsyncRequestStatus"/>
         <input>
            <soap:body use="literal"/>
         </input>
         <output>
            <soap:body use="literal"/>
         </output>
         <fault name="RuntimeServiceException">
            <soap:fault name="RuntimeServiceException" use="literal" encodingStyle=""/>
         </fault>
         <fault name="RequestNotFoundException">
            <soap:fault name="RequestNotFoundException" use="literal" encodingStyle=""/>
         </fault>
      </operation>
      <operation name="cancelRequest">
         <soap:operation soapAction="cancelRequest"/>
         <input>
            <soap:body use="literal"/>
         </input>
         <output>
            <soap:body use="literal"/>
         </output>
         <fault name="RuntimeServiceException">
            <soap:fault name="RuntimeServiceException" use="literal" encodingStyle=""/>
         </fault>
         <fault name="IllegalStateException">
            <soap:fault name="IllegalStateException" use="literal" encodingStyle=""/>
         </fault>
         <fault name="NotFoundException">
            <soap:fault name="NotFoundException" use="literal" encodingStyle=""/>
         </fault>
      </operation>
      <operation name="deleteRequest">
         <soap:operation soapAction="deleteRequest"/>
         <input>
            <soap:body use="literal"/>
         </input>
         <output>
            <soap:body use="literal"/>
         </output>
         <fault name="RuntimeServiceException">
            <soap:fault name="RuntimeServiceException" use="literal" encodingStyle=""/>
         </fault>
         <fault name="IllegalStateException">
            <soap:fault name="IllegalStateException" use="literal" encodingStyle=""/>
         </fault>
         <fault name="NotAllowedException">
            <soap:fault name="NotAllowedException" use="literal" encodingStyle=""/>
         </fault>
         <fault name="NotFoundException">
            <soap:fault name="NotFoundException" use="literal" encodingStyle=""/>
         </fault>
      </operation>
      <operation name="purgeRequest">
         <soap:operation soapAction="purgeRequest"/>
         <input>
            <soap:body use="literal"/>
         </input>
         <output>
            <soap:body use="literal"/>
         </output>
         <fault name="RuntimeServiceException">
            <soap:fault name="RuntimeServiceException" use="literal" encodingStyle=""/>
         </fault>
         <fault name="IllegalStateException">
            <soap:fault name="IllegalStateException" use="literal" encodingStyle=""/>
         </fault>
         <fault name="NotAllowedException">
            <soap:fault name="NotAllowedException" use="literal" encodingStyle=""/>
         </fault>
         <fault name="NotFoundException">
            <soap:fault name="NotFoundException" use="literal" encodingStyle=""/>
         </fault>
      </operation>
      <operation name="setSubmitArgs">
         <soap:operation soapAction="setSubmitArgs"/>
         <input>
            <soap:body use="literal"/>
         </input>
         <output>
            <soap:body use="literal"/>
         </output>
         <fault name="IllegalArgumentException">
            <soap:fault name="IllegalArgumentException" use="literal" encodingStyle=""/>
         </fault>
      </operation>
      <operation name="setStepsArgs">
         <soap:operation soapAction="setStepsArgs"/>
         <input>
            <soap:body use="literal"/>
         </input>
         <output>
            <soap:body use="literal"/>
         </output>
         <fault name="IllegalArgumentException">
            <soap:fault name="IllegalArgumentException" use="literal" encodingStyle=""/>
         </fault>
      </operation>
      <operation name="addPPActions">
         <soap:operation soapAction="addPPActions"/>
         <input>
            <soap:body use="literal"/>
         </input>
         <output>
            <soap:body use="literal"/>
         </output>
         <fault name="IllegalArgumentException">
            <soap:fault name="IllegalArgumentException" use="literal" encodingStyle=""/>
         </fault>
      </operation>
      <operation name="setNLSOptions">
         <soap:operation soapAction="setNLSOptions"/>
         <input>
            <soap:body use="literal"/>
         </input>
         <output>
            <soap:body use="literal"/>
         </output>
         <fault name="IllegalArgumentException">
            <soap:fault name="IllegalArgumentException" use="literal" encodingStyle=""/>
         </fault>
      </operation>
   </binding>
   <service name="ESSWebService">
      <port name="SchedulerServiceImplPort" binding="tns:ESSWebServiceSoapHttp">
         <soap:address location="https://hostname:443/ess/esswebservice"/>
      </port>
   </service>
   <service name="ESSWebServiceCallback">
      <port name="callbackPort" binding="tns:ESSWebServiceCallbackSoapHttp">
         <soap:address location="REPLACE_WITH_ACTUAL_URL"/>
      </port>
   </service>
</definitions>