기본 구현 인 camel's exec component을 사용하여 Windows 환경에서 배치 파일을 호출합니다. 배치 파일 실행이 실패하고 오류 메시지와 함께 0이 아닌 종료 코드가 반환 될 때마다 내 경로는 정상적으로 작동합니다. 하지만 실행이 성공할 때마다 다음과 같이 IOException이 발생합니다.camel exec 구성 요소를 사용하여 배치 파일을 호출하는 동안 IOException 가져 오기
org.apache.camel.component.exec.ExecException: Unable to execute command ExecCommand [args=[/C, d:\file.bat, test_request.xml, null], executable=cmd, timeout=5000, outFile=null, workingDir=null, useStderrOnEmptyStdout=false]
at org.apache.camel.component.exec.impl.DefaultExecCommandExecutor.execute(DefaultExecCommandExecutor.java:81)
at org.apache.camel.component.exec.ExecProducer.process(ExecProducer.java:46)
at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:120)
at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72)
at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:398)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:118)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
at org.apache.camel.component.jetty.CamelContinuationServlet.service(CamelContinuationServlet.java:150)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:503)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:429)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
at org.eclipse.jetty.server.Server.handle(Server.java:366)
at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:494)
at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:982)
at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1043)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:865)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240)
at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:696)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:53)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: Stream Closed
at java.io.FileOutputStream.writeBytes(Native Method)
at java.io.FileOutputStream.write(Unknown Source)
at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
at java.io.BufferedOutputStream.flush(Unknown Source)
at java.io.FilterOutputStream.close(Unknown Source)
at org.apache.commons.exec.DefaultExecutor.closeStreams(DefaultExecutor.java:288)
at org.apache.commons.exec.DefaultExecutor.executeInternal(DefaultExecutor.java:364)
at org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:160)
at org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:147)
at org.apache.camel.component.exec.impl.DefaultExecCommandExecutor.execute(DefaultExecCommandExecutor.java:67)
... 30 more
이상하게도 충분히 일식 IDE에서 내 항아리를 실행할 때마다 모든 것이 잘 작동합니다. 하지만 "java -jar"를 사용하여 명령 프롬프트에서 배포 할 때마다 배치 파일 처리가 성공적으로 완료된 경우에만 위의 예외가 발생합니다. 많은 연구를하면서이 문제는 Java 런타임에서 사용하는 스트림과 관련이 있다고 생각하지만 근본 원인을 알 수는 없습니다. ExecBinding.EXEC_COMMAND_OUT_FILE을 사용하여 out 파일을 제공하려고 시도했지만 내 문제가 해결되지 않았습니다.