우리가 클라이언트 용으로 빌드하는 어댑터 서비스의 일부로, 타사 서비스의 zip 파일로 수신 된 XML을 처리하여 JSON 형식으로 다른 API에 게시해야합니다. XML에 대한 병렬 처리를 도입하지 않으면 모든 것이 잘 작동합니다. 이것은 zip에서 XML 파일을 읽는 데 사용하는 코드입니다.zip 파일 형식으로 처리 된 파일을 병렬 처리하는 방법은 무엇입니까?
this.basicRoute
.log("picked file fileName=${file:absolute.path}")
.choice(when(ex => ex.getIn.getHeader(Exchange.FILE_NAME_ONLY).toString.matches(".*\\.zip"))
.log("inside zip file processing zipFileName=${file:absolute.path}")
.unmarshal(zipFile)
.split(_.getIn.getBody)
.streaming()
.when(_.getIn.getHeader(Exchange.FILE_NAME).toString.matches(".*\\.xml"))
.setBody(ex => InputStreamToXmlConverter.toXml(ex.getIn.getBody.asInstanceOf[InputStream]))
.choice(when(exchange => XmlValidator.isProperLocale(exchange.getIn.getBody.asInstanceOf[Node]))
.to("direct:toPath"))
.otherwise()
.to("file:" + Settings("some.ignoredPath")))
파일을 병렬 처리하기위한 두 가지 방법을 시도했지만 "스트림 닫기"예외가 발생했습니다.
java.io.IOException: Stream closed
at java.util.zip.ZipInputStream.ensureOpen(ZipInputStream.java:66) ~[na:1.7.0_06]
at java.util.zip.ZipInputStream.read(ZipInputStream.java:181) ~[na:1.7.0_06]
at java.io.BufferedInputStream.read1(BufferedInputStream.java:273) ~[na:1.7.0_06]
at java.io.BufferedInputStream.read(BufferedInputStream.java:334) ~[na:1.7.0_06]
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283) ~[na:1.7.0_06]
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325) ~[na:1.7.0_06]
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177) ~[na:1.7.0_06]
at java.io.InputStreamReader.read(InputStreamReader.java:184) ~[na:1.7.0_06]
at java.io.BufferedReader.fill(BufferedReader.java:154) ~[na:1.7.0_06]
at java.io.BufferedReader.read(BufferedReader.java:175) ~[na:1.7.0_06]
at scala.io.BufferedSource$$anonfun$iter$1$$anonfun$apply$mcI$sp$1.apply$mcI$sp(BufferedSource.scala:38) ~[scala-library.jar:na]
at scala.io.Codec.wrap(Codec.scala:68) ~[scala-library.jar:na]
at scala.io.BufferedSource$$anonfun$iter$1.apply(BufferedSource.scala:38) ~[scala-library.jar:na]
at scala.io.BufferedSource$$anonfun$iter$1.apply(BufferedSource.scala:38) ~[scala-library.jar:na]
at scala.collection.Iterator$$anon$9.next(Iterator.scala:162) ~[scala-library.jar:0.12.1]
at scala.collection.Iterator$$anon$17.hasNext(Iterator.scala:511) ~[scala-library.jar:0.12.1]
at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:327) ~[scala-library.jar:0.12.1]
at scala.io.Source.hasNext(Source.scala:226) ~[scala-library.jar:na]
at scala.collection.Iterator$class.foreach(Iterator.scala:727) ~[scala-library.jar:0.12.1]
at scala.io.Source.foreach(Source.scala:178) ~[scala-library.jar:na]
at scala.collection.TraversableOnce$class.addString(TraversableOnce.scala:320) ~[scala-library.jar:0.12.1]
at scala.io.Source.addString(Source.scala:178) ~[scala-library.jar:na]
at scala.collection.TraversableOnce$class.mkString(TraversableOnce.scala:286) ~[scala-library.jar:0.12.1]
at scala.io.Source.mkString(Source.scala:178) ~[scala-library.jar:na]
at scala.collection.TraversableOnce$class.mkString(TraversableOnce.scala:288) ~[scala-library.jar:0.12.1]
at scala.io.Source.mkString(Source.scala:178) ~[scala-library.jar:na]
at scala.collection.TraversableOnce$class.mkString(TraversableOnce.scala:290) ~[scala-library.jar:0.12.1]
at scala.io.Source.mkString(Source.scala:178) ~[scala-library.jar:na]
이 문제를 해결하는 방법에 대한 도움을 주시면 감사하겠습니다.
당신이 Seda의 압축을 푼 메시지를 보낼 생각 해 봤나 거기에 두 번째 경로로? – vikingsteve