List of usage examples for java.io PipedInputStream PipedInputStream
public PipedInputStream()
PipedInputStream
so that it is not yet #connect(java.io.PipedOutputStream) connected . From source file:org.mule.providers.jcr.JcrConnector.java
/** * Will get the output stream for this type of transport. Typically this * will be called only when Streaming is being used on an outbound endpoint. *///from w ww . j a va 2 s.co m public OutputStream getOutputStream(final UMOImmutableEndpoint endpoint, UMOMessage message) throws UMOException { final PipedInputStream pipedInputStream = new PipedInputStream(); PipedOutputStream pipedOutputStream; try { pipedOutputStream = new PipedOutputStream(pipedInputStream); } catch (IOException ioe) { throw new ConnectorException(CoreMessages.streamingFailedForEndpoint(endpoint.toString()), this, ioe); } final Map properties = new HashMap(); for (Iterator i = message.getPropertyNames().iterator(); i.hasNext();) { String propertyName = (String) i.next(); properties.put(propertyName, message.getProperty(propertyName)); } final UMOEvent event = RequestContext.getEvent(); final UMOSession session = event != null ? event.getSession() : null; // It is essential to use a different thread for reading the piped input // stream. Doing a dispatch and relying on Mule's work manager to do so // might be a better option but this would require to force threading // and never execute in the same thread even if the pool is expired. final Thread thread = new Thread(new Runnable() { public void run() { try { send(endpoint, new MuleEvent(new MuleMessage(pipedInputStream, properties), endpoint, session, true)); } catch (DispatchException de) { logger.error("Can not send streaming message!", de); } } }); thread.start(); return new CallbackOutputStream(pipedOutputStream, new JoinThreadCallback(thread)); }
From source file:com.streamsets.pipeline.lib.jdbc.JdbcLoadRecordWriter.java
@Override public List<OnRecordErrorException> writeBatch(Iterator<Record> recordIterator) throws StageException { final List<OnRecordErrorException> errorRecords = new LinkedList<>(); if (!recordIterator.hasNext()) { return errorRecords; }/* www .j av a2 s . c o m*/ // Assume all records have the same columns. final Record first = recordIterator.next(); SortedMap<String, String> columnsToParameters = recordReader.getColumnsToParameters(first, OperationType.LOAD_CODE, getColumnsToParameters(), getColumnsToFields()); if (columnsToParameters.isEmpty()) { throw new StageException(JdbcErrors.JDBC_22); } final Set<String> columnNames = columnsToParameters.keySet(); final String loadSql = "LOAD DATA LOCAL INFILE '' " + duplicateKeyAction.getKeyword() + " INTO TABLE " + getTableName() + " (" + Joiner.on(", ").join(columnNames) + ")"; try (Connection connection = getDataSource().getConnection()) { Connection conn = connection.unwrap(Connection.class); try (PreparedStatement statement = conn.prepareStatement(loadSql)) { PipedInputStream is = new PipedInputStream(); PipedOutputStream os = new PipedOutputStream(is); statement.getClass().getMethod("setLocalInfileInputStream", InputStream.class).invoke(statement, is); Future<?> future = loadOutputExecutor.submit(() -> { try (OutputStreamWriter writer = new OutputStreamWriter(os)) { CSVPrinter printer = new CSVPrinter(writer, CSVFormat.MYSQL); Record record = first; while (record != null) { int opCode = getOperationCode(record, errorRecords); if (opCode == OperationType.LOAD_CODE) { for (String column : columnNames) { Field field = record.get(getColumnsToFields().get(column)); printer.print(field.getValue()); } printer.println(); } else if (opCode > 0) { LOG.debug("Sending record to error due to unsupported operation {}", opCode); errorRecords.add(new OnRecordErrorException(record, JdbcErrors.JDBC_70, opCode)); } else { // It should be added to the error records. } record = recordIterator.hasNext() ? recordIterator.next() : null; } ; } catch (IOException e) { throw new RuntimeException(e); } }); if (LOG.isDebugEnabled()) { LOG.debug("Executing query: {}", statement.toString()); } statement.execute(); future.get(); } connection.commit(); } catch (SQLException e) { handleSqlException(e); } catch (Exception e) { throw new StageException(JdbcErrors.JDBC_14, e.getMessage(), e); } return errorRecords; }
From source file:eu.esdihumboldt.hale.io.wfs.AbstractWFSWriter.java
@Override public IOReport execute(ProgressIndicator progress) throws IOProviderConfigurationException, IOException { progress.begin("WFS Transaction", ProgressIndicator.UNKNOWN); // configure internal provider internalProvider.setDocumentWrapper(createTransaction()); final PipedInputStream pIn = new PipedInputStream(); PipedOutputStream pOut = new PipedOutputStream(pIn); currentExecuteStream = pOut;/*from w w w . j a v a2 s . co m*/ Future<Response> futureResponse = null; IOReporter reporter = createReporter(); ExecutorService executor = Executors.newSingleThreadExecutor(); try { // read the stream (in another thread) futureResponse = executor.submit(new Callable<Response>() { @Override public Response call() throws Exception { Proxy proxy = ProxyUtil.findProxy(targetWfs.getLocation()); Request request = Request.Post(targetWfs.getLocation()).bodyStream(pIn, ContentType.APPLICATION_XML); Executor executor = FluentProxyUtil.setProxy(request, proxy); // authentication String user = getParameter(PARAM_USER).as(String.class); String password = getParameter(PARAM_PASSWORD).as(String.class); if (user != null) { // target host int port = targetWfs.getLocation().getPort(); String hostName = targetWfs.getLocation().getHost(); String scheme = targetWfs.getLocation().getScheme(); HttpHost host = new HttpHost(hostName, port, scheme); // add credentials Credentials cred = ClientProxyUtil.createCredentials(user, password); executor.auth(new AuthScope(host), cred); executor.authPreemptive(host); } try { return executor.execute(request); } finally { pIn.close(); } } }); // write the stream SubtaskProgressIndicator subprogress = new SubtaskProgressIndicator(progress); reporter = (IOReporter) super.execute(subprogress); } finally { executor.shutdown(); } try { Response response = futureResponse.get(); HttpResponse res = response.returnResponse(); int statusCode = res.getStatusLine().getStatusCode(); XPathFactory xPathfactory = XPathFactory.newInstance(); XPath xpath = xPathfactory.newXPath(); if (statusCode >= 200 && statusCode < 300) { // success reporter.setSuccess(reporter.isSuccess()); // construct summary from response try { Document responseDoc = parseResponse(res.getEntity()); // totalInserted String inserted = xpath.compile("//TransactionSummary/totalInserted").evaluate(responseDoc); // XXX totalUpdated // XXX totalReplaced // XXX totalDeleted reporter.setSummary("Inserted " + inserted + " features."); } catch (XPathExpressionException e) { log.error("Error in XPath used to evaluate service response"); } catch (ParserConfigurationException | SAXException e) { reporter.error(new IOMessageImpl(MessageFormat.format( "Server returned status code {0}, but could not parse server response", statusCode), e)); reporter.setSuccess(false); } } else { // failure reporter.error( new IOMessageImpl("Server reported failure with code " + res.getStatusLine().getStatusCode() + ": " + res.getStatusLine().getReasonPhrase(), null)); reporter.setSuccess(false); try { Document responseDoc = parseResponse(res.getEntity()); String errorText = xpath.compile("//ExceptionText/text()").evaluate(responseDoc); reporter.setSummary("Request failed: " + errorText); } catch (XPathExpressionException e) { log.error("Error in XPath used to evaluate service response"); } catch (ParserConfigurationException | SAXException e) { reporter.error(new IOMessageImpl("Could not parse server response", e)); reporter.setSuccess(false); } } } catch (ExecutionException | InterruptedException e) { reporter.error(new IOMessageImpl("Failed to execute WFS-T request", e)); reporter.setSuccess(false); } progress.end(); return reporter; }
From source file:com.edgenius.wiki.service.impl.SitemapServiceImpl.java
public boolean removePage(String pageUuid) throws IOException { boolean removed = false; String sitemapIndex = metadata.getSitemapIndex(pageUuid); if (sitemapIndex == null) { log.warn("Page {} does not exist in sitemap", pageUuid); return removed; }/*ww w. j a v a2 s .com*/ String sitemapZip = SITEMAP_NAME_PREFIX + sitemapIndex + ".xml.gz"; File sizemapZipFile = new File(mapResourcesRoot.getFile(), sitemapZip); if (!sizemapZipFile.exists()) { throw new IOException("Remove pageUuid " + pageUuid + " from sitemap failed becuase sitemap not found"); } PipedInputStream bis = new PipedInputStream(); PipedOutputStream bos = new PipedOutputStream(bis); InputStream zipfile = new FileInputStream(sizemapZipFile); GZIPInputStream gzipstream = new GZIPInputStream(zipfile); byte[] bytes = new byte[1024 * 1000]; int len = 0; while ((len = gzipstream.read(bytes)) > 0) { bos.write(bytes, 0, len); } IOUtils.closeQuietly(zipfile); IOUtils.closeQuietly(gzipstream); String pageUrl = metadata.getPageUrl(pageUuid); String body = IOUtils.toString(bis); int loc = body.indexOf("<loc>" + pageUrl + "</loc>"); if (loc != -1) { int start = StringUtils.lastIndexOf(body, "<url>", loc); int end = StringUtils.indexOf(body, "</url>", loc); if (start != -1 && end != -1) { //remove this URL body = StringUtils.substring(body, start, end + 6); zipToFile(sizemapZipFile, body.getBytes()); removed = true; } } metadata.removePageMap(pageUuid); return removed; }
From source file:org.waarp.openr66.context.task.ExecOutputTask.java
@Override public void run() { /*/*from w w w .j a v a2 s .c om*/ * First apply all replacements and format to argRule from context and argTransfer. Will * call exec (from first element of resulting string) with arguments as the following value * from the replacements. Return 0 if OK, else 1 for a warning else as an error. In case of * an error (> 0), all the line from output will be send back to the partner with the Error * code. No change is made to the file. */ logger.info("ExecOutput with " + argRule + ":" + argTransfer + " and {}", session); String finalname = argRule; finalname = getReplacedValue(finalname, argTransfer.split(" ")); // Force the WaitForValidation waitForValidation = true; if (Configuration.configuration.isUseLocalExec() && useLocalExec) { LocalExecClient localExecClient = new LocalExecClient(); if (localExecClient.connect()) { localExecClient.runOneCommand(finalname, delay, waitForValidation, futureCompletion); LocalExecResult result = localExecClient.getLocalExecResult(); finalize(result.getStatus(), result.getResult(), finalname); localExecClient.disconnect(); return; } // else continue } String[] args = finalname.split(" "); File exec = new File(args[0]); if (exec.isAbsolute()) { if (!exec.canExecute()) { logger.error("Exec command is not executable: " + finalname); R66Result result = new R66Result(session, false, ErrorCode.CommandNotFound, session.getRunner()); futureCompletion.setResult(result); futureCompletion.cancel(); return; } } CommandLine commandLine = new CommandLine(args[0]); for (int i = 1; i < args.length; i++) { commandLine.addArgument(args[i]); } DefaultExecutor defaultExecutor = new DefaultExecutor(); PipedInputStream inputStream = new PipedInputStream(); PipedOutputStream outputStream = null; try { outputStream = new PipedOutputStream(inputStream); } catch (IOException e1) { try { inputStream.close(); } catch (IOException e) { } logger.error("Exception: " + e1.getMessage() + " Exec in error with " + commandLine.toString(), e1); futureCompletion.setFailure(e1); return; } PumpStreamHandler pumpStreamHandler = new PumpStreamHandler(outputStream, null); defaultExecutor.setStreamHandler(pumpStreamHandler); int[] correctValues = { 0, 1 }; defaultExecutor.setExitValues(correctValues); ExecuteWatchdog watchdog = null; if (delay > 0) { watchdog = new ExecuteWatchdog(delay); defaultExecutor.setWatchdog(watchdog); } AllLineReader allLineReader = new AllLineReader(inputStream); Thread thread = new Thread(allLineReader, "ExecRename" + session.getRunner().getSpecialId()); thread.setDaemon(true); Configuration.configuration.getExecutorService().execute(thread); int status = -1; try { status = defaultExecutor.execute(commandLine); } catch (ExecuteException e) { if (e.getExitValue() == -559038737) { // Cannot run immediately so retry once try { Thread.sleep(Configuration.RETRYINMS); } catch (InterruptedException e1) { } try { status = defaultExecutor.execute(commandLine); } catch (ExecuteException e1) { finalizeFromError(outputStream, pumpStreamHandler, inputStream, allLineReader, thread, status, commandLine); return; } catch (IOException e1) { try { outputStream.flush(); } catch (IOException e2) { } try { outputStream.close(); } catch (IOException e2) { } thread.interrupt(); try { inputStream.close(); } catch (IOException e2) { } try { pumpStreamHandler.stop(); } catch (IOException e2) { } logger.error( "IOException: " + e.getMessage() + " . Exec in error with " + commandLine.toString()); futureCompletion.setFailure(e); return; } } else { finalizeFromError(outputStream, pumpStreamHandler, inputStream, allLineReader, thread, status, commandLine); return; } } catch (IOException e) { try { outputStream.close(); } catch (IOException e1) { } thread.interrupt(); try { inputStream.close(); } catch (IOException e1) { } try { pumpStreamHandler.stop(); } catch (IOException e2) { } logger.error("IOException: " + e.getMessage() + " . Exec in error with " + commandLine.toString()); futureCompletion.setFailure(e); return; } try { outputStream.flush(); } catch (IOException e) { } try { outputStream.close(); } catch (IOException e) { } try { pumpStreamHandler.stop(); } catch (IOException e2) { } try { if (delay > 0) { thread.join(delay); } else { thread.join(); } } catch (InterruptedException e) { Thread.currentThread().interrupt(); } try { inputStream.close(); } catch (IOException e1) { } String newname = null; if (defaultExecutor.isFailure(status) && watchdog != null && watchdog.killedProcess()) { // kill by the watchdoc (time out) status = -1; newname = "TimeOut"; } else { newname = allLineReader.getLastLine().toString(); } finalize(status, newname, commandLine.toString()); }
From source file:com.xebialabs.overthere.telnet.TelnetConnection.java
@Override public OverthereProcess startProcess(final CmdLine cmd) { checkNotNull(cmd, "Cannot execute null command line"); checkArgument(cmd.getArguments().size() > 0, "Cannot execute empty command line"); final String obfuscatedCmd = cmd.toCommandLine(os, true); logger.info("Starting command [{}] on [{}]", obfuscatedCmd, this); try {/*from w ww . j a v a 2s.com*/ final TelnetClient tc = new TelnetClient(); tc.setSocketFactory(mapper.socketFactory()); tc.setConnectTimeout(connectionTimeoutMillis); tc.addOptionHandler(new WindowSizeOptionHandler(299, 25, true, false, true, false)); logger.info("Connecting to telnet://{}@{}", username, address); tc.connect(address, port); tc.setSoTimeout(socketTimeoutMillis); final InputStream stdout = tc.getInputStream(); final OutputStream stdin = tc.getOutputStream(); final PipedInputStream callersStdout = new PipedInputStream(); final PipedOutputStream toCallersStdout = new PipedOutputStream(callersStdout); final ByteArrayOutputStream outputBuf = new ByteArrayOutputStream(); final int[] exitValue = new int[1]; exitValue[0] = -1; final Thread outputReaderThread = new Thread("Telnet output reader") { @Override public void run() { try { receive(stdout, outputBuf, toCallersStdout, "ogin:"); send(stdin, username); receive(stdout, outputBuf, toCallersStdout, "assword:"); send(stdin, password); receive(stdout, outputBuf, toCallersStdout, ">", "ogon failure"); send(stdin, "PROMPT " + DETECTABLE_WINDOWS_PROMPT); // We must wait for the prompt twice; the first time is an echo of the PROMPT command, // the second is the actual prompt receive(stdout, outputBuf, toCallersStdout, DETECTABLE_WINDOWS_PROMPT); receive(stdout, outputBuf, toCallersStdout, DETECTABLE_WINDOWS_PROMPT); if (workingDirectory != null) { send(stdin, "CD /D " + workingDirectory.getPath()); receive(stdout, outputBuf, toCallersStdout, DETECTABLE_WINDOWS_PROMPT); } send(stdin, cmd.toCommandLine(os, false)); receive(stdout, outputBuf, toCallersStdout, DETECTABLE_WINDOWS_PROMPT); send(stdin, "ECHO \"" + ERRORLEVEL_PREAMBLE + "%errorlevel%" + ERRORLEVEL_POSTAMBLE); receive(stdout, outputBuf, toCallersStdout, ERRORLEVEL_POSTAMBLE); receive(stdout, outputBuf, toCallersStdout, ERRORLEVEL_POSTAMBLE); String outputBufStr = outputBuf.toString(); int preamblePos = outputBufStr.indexOf(ERRORLEVEL_PREAMBLE); int postamblePos = outputBufStr.indexOf(ERRORLEVEL_POSTAMBLE); if (preamblePos >= 0 && postamblePos >= 0) { String errorlevelString = outputBufStr .substring(preamblePos + ERRORLEVEL_PREAMBLE.length(), postamblePos); logger.debug("Errorlevel string found: {}", errorlevelString); try { synchronized (exitValue) { exitValue[0] = Integer.parseInt(errorlevelString); } } catch (NumberFormatException exc) { logger.error("Cannot parse errorlevel in Windows output: " + outputBuf); } } else { logger.error("Cannot find errorlevel in Windows output: " + outputBuf); } } catch (IOException exc) { throw new RuntimeIOException( format("Cannot start command [%s] on [%s]", obfuscatedCmd, TelnetConnection.this), exc); } finally { closeQuietly(toCallersStdout); } } }; outputReaderThread.setDaemon(true); outputReaderThread.start(); return new OverthereProcess() { @Override public synchronized OutputStream getStdin() { return stdin; } @Override public synchronized InputStream getStdout() { return callersStdout; } @Override public synchronized InputStream getStderr() { return new ByteArrayInputStream(new byte[0]); } @Override public synchronized int waitFor() { if (!tc.isConnected()) { return exitValue[0]; } try { try { outputReaderThread.join(); } finally { disconnect(); } return exitValue[0]; } catch (InterruptedException exc) { throw new RuntimeIOException( format("Cannot start command [%s] on [%s]", obfuscatedCmd, TelnetConnection.this), exc); } } @Override public synchronized void destroy() { if (!tc.isConnected()) { return; } disconnect(); } private synchronized void disconnect() { try { tc.disconnect(); logger.info("Disconnected from {}", TelnetConnection.this); closeQuietly(toCallersStdout); } catch (IOException exc) { throw new RuntimeIOException(format("Cannot disconnect from %s", TelnetConnection.this), exc); } } @Override public synchronized int exitValue() { if (tc.isConnected()) { throw new IllegalThreadStateException( format("Process for command [%s] on %s is still running", obfuscatedCmd, TelnetConnection.this)); } synchronized (exitValue) { return exitValue[0]; } } }; } catch (InvalidTelnetOptionException exc) { throw new RuntimeIOException( "Cannot execute command " + cmd + " at telnet://" + username + "@" + address, exc); } catch (IOException exc) { throw new RuntimeIOException( "Cannot execute command " + cmd + " at telnet://" + username + "@" + address, exc); } }
From source file:com.msopentech.odatajclient.engine.communication.response.ODataResponseImpl.java
/** * {@inheritDoc}/* w ww. j a v a 2 s .com*/ */ @Override public InputStream getRawResponse() { if (HttpStatus.SC_NO_CONTENT == getStatusCode()) { throw new NoContentException(); } if (payload == null && batchInfo.isValidBatch()) { // get input stream till the end of item payload = new PipedInputStream(); try { final PipedOutputStream os = new PipedOutputStream((PipedInputStream) payload); new Thread(new Runnable() { @Override public void run() { try { ODataBatchUtilities.readBatchPart(batchInfo, os, true); } catch (Exception e) { LOG.error("Error streaming batch item payload", e); } finally { IOUtils.closeQuietly(os); } } }).start(); } catch (IOException e) { LOG.error("Error streaming payload response", e); throw new IllegalStateException(e); } } return payload; }
From source file:io.syndesis.project.converter.DefaultProjectGenerator.java
private InputStream createTarInputStream(GenerateProjectRequest request) throws IOException { PipedInputStream is = new PipedInputStream(); ExecutorService executor = Executors.newSingleThreadExecutor(); PipedOutputStream os = new PipedOutputStream(is); executor.submit(generateAddProjectTarEntries(request, os)); return is;// w w w.j a va 2 s . c om }
From source file:org.fedoraproject.eclipse.packager.SourcesFile.java
/** * Saves the sources file to the underlying file. * @throws CoreException/* w w w . ja v a 2 s.c o m*/ */ public void save() throws CoreException { final PipedInputStream in = new PipedInputStream(); // create an OutputStream with the InputStream from above as input PipedOutputStream out = null; try { out = new PipedOutputStream(in); PrintWriter pw = new PrintWriter(out); for (Map.Entry<String, String> entry : sources.entrySet()) { pw.println(entry.getValue() + " " + entry.getKey()); //$NON-NLS-1$ } pw.close(); out.close(); final IFile file = sourcesFile; Job job = new Job(FedoraPackagerText.SourcesFile_saveJob) { @Override public IStatus run(IProgressMonitor monitor) { try { // Potentially long running so do as job. file.setContents(in, false, true, monitor); file.getParent().refreshLocal(IResource.DEPTH_ONE, null); } catch (CoreException e) { e.printStackTrace(); } return Status.OK_STATUS; } }; job.schedule(); try { job.join(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (IOException e) { throw new CoreException(new Status(IStatus.ERROR, PackagerPlugin.PLUGIN_ID, MessageFormat.format(FedoraPackagerText.SourcesFile_saveFailedMsg, sourcesFile.getName()))); } finally { if (out != null) { try { out.close(); } catch (IOException e) { // Nothing to do } } } }
From source file:org.geoserver.wfs.xslt.XSLTOutputFormat.java
@Override protected void write(final FeatureCollectionResponse featureCollection, OutputStream output, Operation operation) throws IOException, ServiceException { // get the transformation we need TransformInfo info = locateTransformation(featureCollection, operation); Transformer transformer = repository.getTransformer(info); // force Xalan to indent the output if (transformer.getOutputProperties() != null && "yes".equals(transformer.getOutputProperties().getProperty("indent"))) { try {/* w ww . j av a2 s. c o m*/ transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); } catch (IllegalArgumentException e) { LOGGER.log(Level.FINE, "Could not set indent amount", e); // in case it's not Xalan } } // prepare the fake operation we're providing to the source output format final Operation sourceOperation = buildSourceOperation(operation, info); // lookup the operation we are going to use final Response sourceResponse = findSourceResponse(sourceOperation, info); if (sourceResponse == null) { throw new WFSException("Could not locate a response that can generate the desired source format '" + info.getSourceFormat() + "' for transformation '" + info.getName() + "'"); } // prepare the stream connections, so that we can do the transformation on the fly PipedInputStream pis = new PipedInputStream(); final PipedOutputStream pos = new PipedOutputStream(pis); // submit the source output format execution, tracking exceptions Future<Void> future = executor.submit(new Callable<Void>() { @Override public Void call() throws Exception { try { sourceResponse.write(featureCollection, pos, sourceOperation); } finally { // close the stream to make sure the transformation won't keep on waiting pos.close(); } return null; } }); // run the transformation TransformerException transformerException = null; try { transformer.transform(new StreamSource(pis), new StreamResult(output)); } catch (TransformerException e) { transformerException = e; } finally { pis.close(); } // now handle exceptions, starting from the source try { future.get(); } catch (Exception e) { throw new WFSException( "Failed to run the output format generating the source for the XSTL transformation", e); } if (transformerException != null) { throw new WFSException("Failed to run the the XSTL transformation", transformerException); } }