2012-11-12 35 views
2

我正在使用Play實現REST webservice!版本2.0.4。播放框架內容類型application/xml

了幾個測試後 - 使用curl請求資源 - 我注意到,播放!只接受帶有以下Content-Type:text/xml的XML。根據W3,text/xml和application/xml都是有效的MIME類型。

來自:http://www.w3.org/TR/xhtml-media-types/

的媒體類型 'application/xml進行' 和 '文本/ XML' 也可使用,但 酌情 '應用/ 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); 
     ... 
} 

如果內容類型等於文本/ xml的一切工作正常,但對於其他網站,如果在Content-Type等於application/xml進行播放!框架返回的分配nullDocument xml = request().body().asXml();

下面是命令列表 - 使用curl - 是我用來測試Web服務:

$ 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. 
... 

這是一個錯誤,或者它的正常行爲?

謝謝!

裏卡多·特謝拉樓

回答

1

現在,我也不一定能回答這是否是有意的,但我也曾經遇到同樣的問題,管理的辦法解決這個情況。

您應該能夠收到您的request().body().asRaw().asBytes(),這將返回byte[]

從那裏,它可以用來構造一個ByteArrayInputStreamDocument將接受作爲它自己的建設的論據。

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

嗯,我想我會用你的方法:)總比沒有好。 謝謝! –