/**
   * Executes the process and returns the outputs.
   *
   * @return process outputs, never <code>null</code>
   * @throws IOException if a communication/network problem occured
   * @throws OWSException if the server replied with an exception
   * @throws XMLStreamException
   */
  public ExecutionOutputs execute() throws OWSExceptionReport, IOException, XMLStreamException {

    lastResponse = sendExecute(false);
    OWSExceptionReport report = lastResponse.getStatus().getExceptionReport();
    if (report != null) {
      throw report;
    }
    return lastResponse.getOutputs();
  }
 /**
  * Returns the outputs of the process execution.
  *
  * @return the outputs of the process execution, or <code>null</code> if the current state is not
  *     {@link ExecutionState#SUCCEEDED}
  * @throws OWSExceptionReport if the server replied with an exception
  */
 public ExecutionOutputs getOutputs() throws OWSExceptionReport {
   if (lastResponse == null) {
     return null;
   }
   OWSExceptionReport report = lastResponse.getStatus().getExceptionReport();
   if (report != null) {
     throw report;
   }
   return lastResponse.getOutputs();
 }
 /**
  * Returns the current state of the execution.
  *
  * @return state of the execution, or <code>null</code> if the execution has not been started yet
  * @throws OWSExceptionReport if the server replied with an exception
  * @throws IOException if a communication/network problem occured
  * @throws XMLStreamException
  */
 public ExecutionState getState() throws OWSExceptionReport, IOException, XMLStreamException {
   if (lastResponse == null) {
     return null;
   }
   if (lastResponse.getStatus().getState() != ExecutionState.SUCCEEDED
       && lastResponse.getStatus().getState() != ExecutionState.FAILED) {
     URL statusLocation = lastResponse.getStatusLocation();
     if (statusLocation == null) {
       throw new RuntimeException("Cannot update status. No statusLocation provided.");
     }
     LOG.debug("Polling response document from status location: " + statusLocation);
     XMLInputFactory inFactory = XMLInputFactory.newInstance();
     InputStream is = statusLocation.openStream();
     XMLStreamReader xmlReader = inFactory.createXMLStreamReader(is);
     XMLStreamUtils.nextElement(xmlReader);
     if (OWSExceptionReader.isExceptionReport(xmlReader.getName())) {
       throw OWSExceptionReader.parseExceptionReport(xmlReader);
     }
     ExecuteResponse100Reader reader = new ExecuteResponse100Reader(xmlReader);
     lastResponse = reader.parse100();
   }
   return lastResponse.getStatus().getState();
 }
 /**
  * Returns the exception report.
  *
  * <p>NOTE: An exception report is only available if state is {@link ExecutionState#FAILED}.
  *
  * @return an exception report in case the execution failed, <code>null</code> otherwise
  */
 public OWSExceptionReport getExceptionReport() {
   if (lastResponse == null) {
     return null;
   }
   return lastResponse.getStatus().getExceptionReport();
 }
 /**
  * Returns the creation time for the process execution as reported by the server.
  *
  * @return creation time, or <code>null</code> if the execution has not been started yet
  */
 public String getCreationTime() {
   if (lastResponse == null) {
     return null;
   }
   return lastResponse.getStatus().getCreationTime();
 }
 /**
  * Returns the percentage of the process that has been completed.
  *
  * @return the completed percentage of the process, or <code>null</code> if the execution has not
  *     been started yet or no completion percentage provided by the process
  */
 public Integer getPercentCompleted() {
   if (lastResponse == null) {
     return null;
   }
   return lastResponse.getStatus().getPercentCompleted();
 }
 /**
  * Returns the web-accessible URL for retrieving the execute response.
  *
  * <p>For asynchronous operation, this URL may provide access to a dynamic document that's
  * changing until the process is finished.
  *
  * @return web-accessible URL, or <code>null</code> if the execution has not been started yet or
  *     no status location is available
  */
 public URL getStatusLocation() {
   if (lastResponse == null) {
     return null;
   }
   return lastResponse.getStatusLocation();
 }
 /**
  * Returns the status message.
  *
  * @return status message, or <code>null</code> if the execution has not been started yet or no
  *     status message available
  */
 public String getStatusMessage() {
   if (lastResponse == null) {
     return null;
   }
   return lastResponse.getStatus().getStatusMessage();
 }