Play Framework 2.0:“;Errorjava.lang.RuntimeException:org.xml.sax.SAXParseException;行号:1;列数:1;过早结束文件

Play Framework 2.0:“;Errorjava.lang.RuntimeException:org.xml.sax.SAXParseException;行号:1;列数:1;过早结束文件,java,playframework-2.0,Java,Playframework 2.0,Xml模板: @(product: models.Product, productComponents: List[models.ProductComponent]) <product> <name>@product.name</name> <tomcatLocation>@product.tomcatLocation</tomcatLocation> <productComponents> @for(p

Xml模板:

@(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>

如果我错了,请纠正我,但看起来您并没有从服务返回xml文档!?相反,您返回“I WORKED”,因为它不会解析为xml,解析器将抛出异常。

在您正在调用的服务中,通过
WS
、外部URL(
MAIN\u URL
)并在线使用响应:

Document doc = response.asXml();
该错误表示您正在调用的服务(
MAIN\u URL
)没有返回XML


顺便说一下,您的控制器将
TODO
作为返回值,我不确定这是否是您想要的,因为控制器中似乎有工作代码。

除了没有任何XML输入的明显情况之外,有时,当代码第二次尝试读取
javax.xml.transform.Source
javax.xml.transform.sax.SAXSource
时,也会抛出此错误。第一次运行时一切正常,但第二次字节被消耗时,您会出现异常。至少我遇到过这种情况,在这种情况下,我只需重新创建
源代码
——我不知道这是否适用于您的特定情况。

该服务预计将返回内容类型text/plain。因此,响应没有xml解析。我认为这与doc=response.asXml()文档有关;如果我删除这行代码,就不会有运行时异常。服务返回“I Worked”,错误意味着SAXParser得到一个空字符串来解析XML。请显示堆栈跟踪。堆栈跟踪已添加到问题中!结果表明response.body是一个空字符串。我很困惑,这是因为查看http请求。身体里有数据。
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");
                }

            }
          })
        );
}
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)
Document doc = response.asXml();