2012-04-25 1 views
2

Xml Шаблон: ActionPlay Framework 2.0: «Errorjava.lang.RuntimeException: org.xml.sax.SAXParseException; LINENUMBER: 1; ColumnNumber: 1; Преждевременный конец файла

@(product: models.Product, productComponents: List[models.ProductComponent]) 
<product> 
    <name>@product.name</name> 
    <tomcatLocation>@product.tomcatLocation</tomcatLocation> 
    <productComponents> 
    @for(productComponent <- productComponents) { 
    <component> 
     <name>@productComponent.name</name> 
     <packageName>@productComponent.packageName</packageName> 
     <buildPath>@productComponent.buildPath</buildPath> 
     <packageFormat>@productComponent.packageFormat</packageFormat> 
     <versionAction>@productComponent.versionAction</versionAction> 
     <versionFilePath>@productComponent.versionFilePath</versionFilePath> 
     <versionCommand>@productComponent.versionCommand</versionCommand> 
    </component> 
    } 
    </productComponents> 
</product> 

Контроллер:

public static Result upgradeProduct(String serverId, String productId) throws InterruptedException 
    { 
     models.Server server = models.Server.retrieveById(Long.parseLong(serverId)); 
     models.Product product = models.Product.retrieveById(Long.parseLong(productId)); 

     List<models.ProductComponent> productComponents = 
       models.ProductComponent.retrieveByProductId(Long.parseLong(productId)); 

     Xml renderedXmlPage = upgradeService.render(product, productComponents); 

     Promise<WS.Response> upgradeStatus = 
       WS.url("http://" + server.hostIp + ":8085/upgradeProduct").setHeader("Content-Type", "text/xml").post(
         renderedXmlPage.toString()); 

     String testMessage = upgradeStatus.get().getBody(); 

     return TODO; 
    } 

Web Service:

public static Result upgradeProduct() 
{ 
    return async(WS.url(MAIN_URL).get().map(
      new Function<WS.Response, Result>() { 
      public Result apply(WS.Response response) 
      { 
       try 
       { 
        Document doc = response.asXml(); 
        return ok("I WORKED"); 
       } 
       catch(RuntimeException e) 
       { 
        return ok("Error" + e.getMessage()+ "\n"); 
       } 

      } 
      }) 
     ); 
} 

Когда я запускаю это действие, следующее исключение во время выполнения выбрасывается

"Errorjava.lang.RuntimeException: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; . Преждевременный конец файла ".

это исключение бросают в„Документ док = response.asXml();“Я не знаю, почему это происходит любая помощь очень ценится благодаря

.?!
Stack Trace: 
play.libs.WS$Response.asXml(WS.java:332) 
controllers.Service$1.apply(Service.java:40) 
controllers.Service$1.apply(Service.java:35) 
play.libs.F$Promise$2.apply(F.java:111) 
play.api.libs.concurrent.STMPromise$$anonfun$map$1$$anonfun$apply$9.apply(Promise.scala:185) 
scala.util.control.Exception$Catch$$anonfun$either$1.apply(Exception.scala:110) 
scala.util.control.Exception$Catch$$anonfun$either$1.apply(Exception.scala:110) 
scala.util.control.Exception$Catch.apply(Exception.scala:88) 
scala.util.control.Exception$Catch.either(Exception.scala:110) 
play.api.libs.concurrent.STMPromise.redeem(Promise.scala:166) 
play.api.libs.concurrent.STMPromise$$anonfun$map$1.apply(Promise.scala:185) 
play.api.libs.concurrent.STMPromise$$anonfun$map$1.apply(Promise.scala:184) 
play.api.libs.concurrent.STMPromise$PromiseInvoker$$anonfun$receive$1.apply(Promise.scala:10 4) 
play.api.libs.concurrent.STMPromise$PromiseInvoker$$anonfun$receive$1.apply(Promise.scala:10 3) 
akka.actor.Actor$class.apply(Actor.scala:290) 
play.api.libs.concurrent.STMPromise$PromiseInvoker.apply(Promise.scala:101) 
akka.actor.ActorCell.invoke(ActorCell.scala:617) 
akka.dispatch.Mailbox.processMailbox(Mailbox.scala:179) 
akka.dispatch.Mailbox.run(Mailbox.scala:161) 
akka.dispatch.ForkJoinExecutorConfigurator$MailboxExecutionTask.exec(AbstractDispatcher.scala:505) 
akka.jsr166y.ForkJoinTask.doExec(ForkJoinTask.java:259) 
akka.jsr166y.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:997) 
akka.jsr166y.ForkJoinPool.runWorker(ForkJoinPool.java:1495) 
akka.jsr166y.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104) 
+0

Ошибка означает, что SAXParser получает пустую строку для анализа XML. Пожалуйста, покажите Stacktrace. –

+0

Stack Trace добавляется к вопросу! –

+0

Это Оказывается, что response.body - пустая строка. Я смущен, потому что смотрю на http-запрос. В теле есть данные. –

ответ

1

Поправьте меня, если я ошибаюсь, но это не выглядит, как вы возвращаете ваш XML-документ из сервиса !? Вместо этого вы вернуть «Я РАБОТАЛ», что причины не разобрать, как XML, и парсер будет генерировать исключение.

+0

Ожидается, что служба вернет текст Content-Type/plain. Таким образом, для ответа не существует синтаксического анализа xml. Я думаю, что это связано с Document doc = response.asXml(); Если я удалю эту строку кода, исключение из среды выполнения не будет. и служба возвращает «I Worked» –

0

В службе вы вызываете через WS внешний URL ().) и с помощью ответа на линии:

Document doc = response.asXml(); 

ошибка означает, что сервис вы звоните (MAIN_URL) не возвращает XML.

Кстати, ваш контроллер имеет TODO в качестве возвращаемого значения, я не уверен, что это то, что вы хотите там, поскольку кажется, что у вас есть рабочий код в контроллере.

0

За исключением очевидного случая отсутствия ввода XML для начала, иногда эта ошибка также возникает при повторном запуске кода, когда код пытается прочитать javax.xml.transform.Source или javax.xml.transform.sax.SAXSource. В первый раз все работает нормально, но во второй раз байты потребляются, и вы получаете это исключение. По крайней мере, как я столкнулся с этим, и в этом случае я просто создаю Source заново - я не знаю, что это применимо в вашем конкретном случае.

Смежные вопросы