(首先,請多多包涵,這是利用各自的技術我第一次,也許這是一個非常簡單的錯誤)錯誤在EXPath HTTP使用<http:body>客戶
更新:我「M改寫了一個問題,我更瞭解現在的問題,這個問題顯然是在EXPath側...
我試圖讓使用XSLT + EXPath HTTP客戶談了一個客戶端到服務器,但我無法得到combinati在POST + <http:body>
上工作...
以下大部分來自真實示例代碼,但要找到直接適用的示例並不容易。
這裏有一些ressources我用:
http://expath.org/modules/http-client/
http://expath.org/modules/http-client/samples
http://expath.org/spec/http-client
http://www.ibm.com/developerworks/library/x-expath/
我使用expath-http-client-saxon-0.12.0
,順便說一句。
下面是來自客戶端的代碼:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:http="http://expath.org/ns/http-client"
xmlns:h="http://www.w3.org/1999/xhtml"
exclude-result-prefixes="#all"
version="2.0">
<xsl:import href="http://expath.org/ns/http-client.xsl"/>
<xsl:output indent="yes"/>
<xsl:template name="main" match="/">
<root>
<!-- the request element -->
<xsl:variable name="request" as="element(http:request)">
<http:request method="post" href="http://127.0.0.1:8888/test">
<http:body media-type="application/xml"/>
</http:request>
</xsl:variable>
<xsl:variable name="body" as="element()">
<x>1</x>
</xsl:variable>
<!-- sending the request -->
<xsl:variable name="resp" select="http:send-request($request,(),$body)"/>
<!-- add the http:response element to the output tree -->
<xsl:sequence select="$resp[1]"/>
</root>
</xsl:template>
</xsl:stylesheet>
請原諒我,如果有些東西是多餘的,我想一個真正的大量的這種變種。
我試圖用@MartinHonnen建議測試發送與提琴手的請求。
如果我打電話與
saxon -xsl:post-example.xsl -it:main
客戶端,然後我得到的消息
May 15, 2016 10:53:42 AM org.expath.pkg.repo.tools.Logger info
INFO: Create a new repository with storage: File system storage in /usr/share/expath/repo
No license file found - running with licensable features disabled
2016/05/15 10:53:42:496 CEST [INFO] DefaultHttpClient - I/O exception (java.io.IOException) caught when processing request to {}->http://127.0.0.1:8888: Error serializing the body content
2016/05/15 10:53:42:499 CEST [INFO] DefaultHttpClient - Retrying request to {}->http://127.0.0.1:8888
2016/05/15 10:53:42:499 CEST [INFO] DefaultHttpClient - I/O exception (java.io.IOException) caught when processing request to {}->http://127.0.0.1:8888: Error serializing the body content
2016/05/15 10:53:42:500 CEST [INFO] DefaultHttpClient - Retrying request to {}->http://127.0.0.1:8888
2016/05/15 10:53:42:500 CEST [INFO] DefaultHttpClient - I/O exception (java.io.IOException) caught when processing request to {}->http://127.0.0.1:8888: Error serializing the body content
2016/05/15 10:53:42:500 CEST [INFO] DefaultHttpClient - Retrying request to {}->http://127.0.0.1:8888
Error on line 18 of post-example.xsl:
Error sending the HTTP request
Error sending the HTTP request
我試圖瞭解如何配置序列化,但它是非常複雜的,我真的不認爲默認值不應該導致這種簡單情況下的問題?
提琴手錶明這一點:
POST /test HTTP/1.1
Content-Type: application/xml; charset=UTF-8
Transfer-Encoding: chunked
Host: 127.0.0.1:8888
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.5.1 (Java/1.7.0_101)
,但正文內容。
這也給了形式
96 Failed to obtain request body. System.IO.InvalidDataException Bad request: Chunked Body was missing entirely.
我也嘗試過如此衆多的信息,具有相同的結果:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:http="http://expath.org/ns/http-client"
xmlns:h="http://www.w3.org/1999/xhtml"
exclude-result-prefixes="#all"
version="2.0">
<xsl:import href="http://expath.org/ns/http-client.xsl"/>
<xsl:output indent="yes"/>
<xsl:template name="main" match="/">
<root>
<!-- the request element -->
<xsl:variable name="request" as="element(http:request)">
<http:request method="post" href="http://127.0.0.1:8888/test">
<http:body media-type="text/plain">foo</http:body>
</http:request>
</xsl:variable>
<!-- sending the request -->
<xsl:variable name="resp" select="http:send-request($request)"/>
<!-- add the http:response element to the output tree -->
<xsl:sequence select="$resp[1]"/>
</root>
</xsl:template>
</xsl:stylesheet>
我如何找出什麼錯誤? PS:如果有人可以推薦另一種工具來將XSLT(Saxon)與REST API接口,我很樂意聽到它。
我對這些工具並不熟悉,但是如果你有一個像curl這樣的工具做正確的事情,那麼也許作爲一個調試步驟,它有助於使用像fiddler這樣的工具來比較使用curl和expath時交換的HTTP請求和響應。 –
@MartinHonnen感謝您的建議。如果我正確地解釋了結果,請求中沒有主體('Content-Length:0')這仍然引發問題,我在http請求的主體聲明中做錯了什麼... –