You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@mina.apache.org by David R Robison <dr...@openroadsconsulting.com> on 2012/03/05 19:21:38 UTC
Using asyncweb to read large JPEGS
I am trying to use the asyncweb common codecs to read a large JPEG
(>130,000 bytes) from a web service. It appears that the codecs read the
first packet but do no handle the reconstruction of multiple packets
into one response. Am I missing something? Is this supported? Any ideas?
David
--
David R Robison
Open Roads Consulting, Inc.
103 Watson Road, Chesapeake, VA 23320
phone: (757) 546-3401
e-mail: drrobison@openroadsconsulting.com
web: http://openroadsconsulting.com
blog: http://therobe.blogspot.com
book: http://www.xulonpress.com/bookstore/bookdetail.php?PB_ISBN=9781597816526
This email communication (including any attachments) may contain confidential and/or privileged material intended solely for the individual or entity to which it is addressed.
If you are not the intended recipient, please delete this email immediately.
Re: Using asyncweb to read large JPEGS
Posted by David R Robison <dr...@openroadsconsulting.com>.
The following patch seems to help. It is applied to the common code in
the asyncweb project. Does this look reasonable? Any thoughts? I embed
the decoder in a CumulativeProtocolDecoder and also reuse the
HttpResponseDecoder that has been attached to the session. David
Index: src/main/java/org/apache/asyncweb/common/codec/HttpCodecFactory.java
===================================================================
---
src/main/java/org/apache/asyncweb/common/codec/HttpCodecFactory.java
(revision 1296269)
+++
src/main/java/org/apache/asyncweb/common/codec/HttpCodecFactory.java
(working copy)
@@ -70,7 +70,11 @@
}
else
{
- return new HttpResponseDecoder();
+ ProtocolDecoder decoder =
(ProtocolDecoder)session.getAttribute("SessionProtocolDecoder");
+ if (decoder != null) return decoder;
+ decoder = new HttpResponseDecoder();
+ session.setAttribute("SessionProtocolDecoder", decoder);
+ return decoder;
}
}
}
Index:
src/main/java/org/apache/asyncweb/common/codec/HttpResponseDecoder.java
===================================================================
---
src/main/java/org/apache/asyncweb/common/codec/HttpResponseDecoder.java
(revision 1296269)
+++
src/main/java/org/apache/asyncweb/common/codec/HttpResponseDecoder.java
(working copy)
@@ -21,24 +21,41 @@
import java.util.List;
+import org.apache.mina.core.buffer.IoBuffer;
+import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolDecoderOutput;
import org.apache.mina.filter.codec.statemachine.DecodingState;
import
org.apache.mina.filter.codec.statemachine.DecodingStateProtocolDecoder;
+import org.apache.mina.filter.codec.CumulativeProtocolDecoder;
+import org.apache.mina.core.buffer.IoBuffer;
+import org.apache.mina.core.session.IoSession;
/**
* @author The Apache MINA Project (dev@mina.apache.org)
*/
-public class HttpResponseDecoder extends DecodingStateProtocolDecoder {
+public class HttpResponseDecoder extends CumulativeProtocolDecoder {
+
+ private DecodingStateProtocolDecoder decoderDelegate;
+ private boolean amDone = false;
+
public HttpResponseDecoder() {
- super(new HttpResponseDecodingState() {
+ decoderDelegate = new DecodingStateProtocolDecoder(new
HttpResponseDecodingState() {
@Override
protected DecodingState finishDecode(List<Object>
childProducts,
ProtocolDecoderOutput out) throws Exception {
for (Object m: childProducts) {
out.write(m);
}
+ amDone = true;
return null;
}
});
}
+
+ public boolean doDecode(
+ IoSession session, IoBuffer in, ProtocolDecoderOutput out)
+ throws Exception {
+ decoderDelegate.decode(session, in, out);
+ return amDone;
+ }
}
On 3/5/2012 1:45 PM, David R Robison wrote:
> The problem sees to be that the DecodingStateProtocolDecoder class
> assumes that each complete "event" is contained in one packet. There is
> no way for it to tell that the "event" is continued across multiple
> packets. David
>
> On 3/5/2012 1:21 PM, David R Robison wrote:
>> I am trying to use the asyncweb common codecs to read a large JPEG
>> (>130,000 bytes) from a web service. It appears that the codecs read
>> the first packet but do no handle the reconstruction of multiple
>> packets into one response. Am I missing something? Is this supported?
>> Any ideas? David
>>
--
David R Robison
Open Roads Consulting, Inc.
103 Watson Road, Chesapeake, VA 23320
phone: (757) 546-3401
e-mail: drrobison@openroadsconsulting.com
web: http://openroadsconsulting.com
blog: http://therobe.blogspot.com
book: http://www.xulonpress.com/bookstore/bookdetail.php?PB_ISBN=9781597816526
This email communication (including any attachments) may contain confidential and/or privileged material intended solely for the individual or entity to which it is addressed.
If you are not the intended recipient, please delete this email immediately.
Re: Using asyncweb to read large JPEGS
Posted by David R Robison <dr...@openroadsconsulting.com>.
The problem sees to be that the DecodingStateProtocolDecoder class
assumes that each complete "event" is contained in one packet. There is
no way for it to tell that the "event" is continued across multiple
packets. David
On 3/5/2012 1:21 PM, David R Robison wrote:
> I am trying to use the asyncweb common codecs to read a large JPEG
> (>130,000 bytes) from a web service. It appears that the codecs read
> the first packet but do no handle the reconstruction of multiple
> packets into one response. Am I missing something? Is this supported?
> Any ideas? David
>
--
David R Robison
Open Roads Consulting, Inc.
103 Watson Road, Chesapeake, VA 23320
phone: (757) 546-3401
e-mail: drrobison@openroadsconsulting.com
web: http://openroadsconsulting.com
blog: http://therobe.blogspot.com
book: http://www.xulonpress.com/bookstore/bookdetail.php?PB_ISBN=9781597816526
This email communication (including any attachments) may contain confidential and/or privileged material intended solely for the individual or entity to which it is addressed.
If you are not the intended recipient, please delete this email immediately.