/** * 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 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(); }