2013-12-10 1 views
1

우리가 클라이언트 용으로 빌드하는 어댑터 서비스의 일부로, 타사 서비스의 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] 

이 문제를 해결하는 방법에 대한 도움을 주시면 감사하겠습니다.

+1

당신이 Seda의 압축을 푼 메시지를 보낼 생각 해 봤나 거기에 두 번째 경로로? – vikingsteve

답변

0

난 전혀 스칼라 DSL과 유창하지 않다하지만, 줄에 빠진 종료 괄호되지 않습니다 : 엔드 포인트에서 병렬 처리를 구현 :

.choice(when(ex => ex.getIn.getHeader(Exchange.FILE_NAME_ONLY).toString.matches(".*\\.zip")) 
+0

선택문의 괄호는 마지막 줄에서 닫힙니다. –

관련 문제