Apache Abdera的分块传输编码问题

| 我正在使用Apache Abdera将多部分数据发布到我的服务器上,并且遇到了一些我无法确定的奇怪问题。 分块传输编码看起来像是一个问题,但是我经验不足,无法确定。该问题表现为服务器抛出错误,该错误指示我发送给它的请求仅包含一个mime部分,而不是所需的两个mime部分。我将Wireshark连接到界面并捕获了对话,结果如下:
POST /sss/col-uri/2ee98ea1-f9ad-4f01-9b1c-cfa3c4a6dc3c HTTP/1.1
Host: localhost
Expect: 100-continue
Transfer-Encoding: chunked
Content-Type: multipart/related; boundary=\"1306399868259\";type=\"application/atom+xml;type=entry\"
服务器的响应:
HTTP/1.1 100 Continue
我的客户继续:
198
--1306399868259
Content-Type: application/atom+xml;type=entry
Content-Disposition: attachment; name=\"atom\"

<entry xmlns=\"http://www.w3.org/2005/Atom\"><title xmlns=\"http://purl.org/dc/terms/\">Richard Woz Ere</title><bibliographicCitation xmlns=\"http://purl.org/dc/terms/\">this is my citation</bibliographicCitation><content type=\"application/zip\" src=\"cid:48bd9436-e8b6-4f68-aa83-5c88eda52fd4\" /></entry>
0

b0e9

--1306399868259
Content-Type: application/zip
Content-Disposition: attachment; name=\"payload\"; filename=\"example.zip\"
Content-ID: <48bd9436-e8b6-4f68-aa83-5c88eda52fd4>
Packaging: http://purl.org/net/sword/package/SimpleZip
此时服务器响应:
HTTP/1.1 400 Bad Request
Date: Thu, 26 May 2011 08:51:08 GMT
Server: Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8l DAV/2 mod_wsgi/3.3 Python/2.6.1
Connection: close
Transfer-Encoding: chunked
Content-Type: text/xml
指示错误(众所周知)。我的服务器继续将一堆base64编码的比特流传输到输出流,但是与此同时,服务器没有在监听,它已经确定该请求是错误的。 不幸的是,我不负责HTTP层-所有这些都由Abdera使用Apache httpclient处理。我的代码如下所示:
client.execute(\"POST\", url.toString(), new SWORDMultipartRequestEntity(deposit), options);
在这里,SWORDMultipartRequestEntity是标准Abdera MultipartRequestEntity类的副本,其中添加了一些额外的标题(例如,参见上面的代码段中的Packaging); \“ deposit \”参数只是一个包含原子部分和输入流的对象。 当连接调试器时,我可以很清楚地看到这行代码,然后消失在老鼠洞中,然后我又得到了这个错误。 有任何提示或提示吗?我已经筋疲力尽了! 对我来说唯一突出的是,在atom:entry文档之后,紧随其后的是一个换行符,上面带有\“ 0 \”,这似乎是分块的传输编码,表示\“我已经完成了\” 。不知道它如何到达那里,或者它是否真的有任何作用。帮助非常感谢。 干杯, 理查德     
已邀请:
孤独的“ 5”可能确实是个问题。我不知情的猜测是它是由对
flush()
的某些调用导致的,然后将整个缓冲区写为另一个HTTP块。不幸的是,在调用“ 7”时,缓冲区已经被刷新,因此其大小为零。因此,应该教导
HttpChunkedOutputFilter
(或称其为“ 8”),因为不需要刷新空缓冲区。 [更新:]您应该在
ChunkedOutputStream
类中设置断点,尤其是
flush
方法。我只是看了一下它的代码,似乎还可以,但是也许我错过了一些东西。     

要回复问题请先登录注册