播放框架内容类型应用程序/xml

播放框架内容类型应用程序/xml,xml,playframework,mime-types,content-type,Xml,Playframework,Mime Types,Content Type,我正在使用Play实现REST Web服务!版本2.0.4 经过几次测试——使用curl请求一个资源——我注意到这个游戏!仅接受具有以下内容类型的XML:text/XML。根据W3,text/xml和application/xml都是有效的MIME类型 发件人: 也可以使用媒体类型“application/xml”和“text/xml”,但 在适当的情况下,应使用“application/xhtml+xml”或“text/html” 使用而不是那些通用的XML媒体类型 这个问题。在我的代码中,我

我正在使用Play实现REST Web服务!版本2.0.4

经过几次测试——使用curl请求一个资源——我注意到这个游戏!仅接受具有以下内容类型的XML:text/XML。根据W3,text/xml和application/xml都是有效的MIME类型

发件人:

也可以使用媒体类型“application/xml”和“text/xml”,但 在适当的情况下,应使用“application/xhtml+xml”或“text/html” 使用而不是那些通用的XML媒体类型

这个问题。在我的代码中,我有如下内容:

106: if (request().getHeader("Content-Type").contains("text/xml")
107:            || request().getHeader("Content-Type").contains("application/xml")) {
108:        
109:        Document xml = request().body().asXml();
110:        Node root = XPath.selectNode("cost", xml);
        ...
}
如果内容类型等于text/xml,一切正常,但是对于另一个站点,如果内容类型等于application/xml,则播放!框架在赋值
文档xml=request().body().asXml()中返回
null

下面是我用来测试web服务的列表命令(使用curl):

$ curl -i -X POST -d @input.xml -H "Content-Type: text/xml" \
http://localhost:9000/costs

HTTP/1.1 200 OK
Content-Type: text/xml
Content-Length: 146

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><cost>3089219.0</cost>

$ curl -i -X POST -d @input.xml -H "Content-Type: application/xml" \
http://localhost:9000/costs

HTTP/1.1 500 Internal Server Error
Content-Type: text/html; charset=utf-8
Content-Length: 5231

...
[RuntimeException: java.lang.RuntimeException: java.lang.NullPointerException]
In (...)/app/controllers/Application.java at line 110.
...
$curl-i-X POST-d@input.xml-H“内容类型:text/xml”\
http://localhost:9000/costs
HTTP/1.1200ok
内容类型:text/xml
内容长度:146
3089219
$curl-i-X POST-d@input.xml-H“内容类型:应用程序/xml”\
http://localhost:9000/costs
HTTP/1.1500内部服务器错误
内容类型:text/html;字符集=utf-8
内容长度:5231
...
[RuntimeException:java.lang.RuntimeException:java.lang.NullPointerException]
在第110行的(…)/app/controllers/Application.java中。
...
这是一个bug还是正常行为

谢谢


Ricardo F.Teixeira

现在我不一定能够回答这是否是有意的,但我也遇到了同样的问题,并设法解决了这种情况

您应该能够接收您的
请求().body().asRaw().asBytes()
,它将返回一个
字节[]

从那里,它可以用来构造一个
ByteArrayInputStream
,而
Document
将接受它作为自身构造的参数

DocumentBuilder docBuilder = DocumentBuilderFactory().newInstance().newDocumentBuilder();
Document xml = docBuilder.parse(new ByteArrayInputStream(request().body().asRaw().asBytes()));

我想我会用你的方法:)总比什么都没有好。谢谢