You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Paul Lowry <pl...@newbay.com> on 2011/04/01 10:10:47 UTC

Re: restlet consumer overrides http producer's endpoint

Hi Willem,

I did what you suggested and got another error...

DefaultTypeConverter DEBUG No type converter available to convert from
type: org.apache.camel.converter.stream.InputStreamCache to the required
type: org.w3c.dom.Document with value
org.apache.camel.converter.stream.InputStreamCache@1cb4cae Caused by:
org.xml.sax.SAXParseException: Premature end of file.. Will ignore this
and continue.

DefaultErrorHandler DEBUG Failed delivery for exchangeId:
04ff6403-4294-4152-b81e-6c3da8849a26. On delivery attempt: 0 caught:
java.lang.ClassCastException:
org.apache.camel.converter.stream.InputStreamCache cannot be cast to
org.w3c.dom.Node

DefaultErrorHandler ERROR Failed delivery for exchangeId:
04ff6403-4294-4152-b81e-6c3da8849a26. Exhausted after delivery attempt:
1 caught: java.lang.ClassCastException:
org.apache.camel.converter.stream.InputStreamCache cannot be cast to
org.w3c.dom.Node

But this is OK, because I understand it; I just need to (a) convert the
body in a processor, or (b) add a new type converter to the http
component - right?

Regard,
Paul


On Tue, 2011-03-29 at 22:56 -0700, Willem Jiang wrote:
> <removeHeader headerName="CamelHttpUri"/>
>  >    <to uri="http://localhost:8080/server"/>

STRICTLY PRIVATE, CONFIDENTIAL AND PRIVILEGED COMMUNICATION.

This message (including attachments) may contain information that is
privileged, confidential or protected from disclosure. They are intended
solely for the use of the intended recipient. If you are not the
intended recipient, you are hereby notified that dissemination,
disclosure, copying, distribution, printing, transmission or use of this
message or any information contained in it is strictly prohibited. If
you have received this message from NewBay Software in error, please
immediately notify the sender by reply email and delete this message
from your computer. The content of this e-mail, and any files
transmitted with it, may have been changed or altered without the
consent of the author. Although we have taken steps to ensure that this
email and attachments are free from any virus, we advise that in keeping
with good computing practice the recipient should ensure they are
actually virus free.

Re: restlet consumer overrides http producer's endpoint

Posted by Paul Lowry <pl...@newbay.com>.
Thanks Willem :)

On Fri, 2011-04-01 at 04:07 -0700, Willem Jiang wrote:
> Hi Paul,
>
> Cool. It's good to see you find a way to resolve this issue.
>
> Just one more note for the InputStreamCache, if you want to read the
> body again, you just need to call the method reset() of
> InputStreamCache.
>
> Willem
>
> On 4/1/11 5:49 PM, Paul Lowry wrote:
> > Hi Willem,
> >
> > My route looks like this:
> >
> > <route id="MyRoute">
> >    <from
> uri="restlet:http://localhost:9090/client?restletMethod=POST"/>
> >    <setHeader headerName="CamelHttpMethod">
> >      <constant>POST</constant>
> >    </setHeader>
> >    <setHeader headerName="Content-Type">
> >      <constant>text/xml</constant>
> >    </setHeader>
> >    <removeHeader headerName="CamelHttpUri"/>
> >    <to uri="http://localhost:8080/server"/>
> >    <process ref="MyResponseProcessor"/>
> > </route>
> >
> > The processor at the end is defined as follows:
> >
> > public class MyResponseProcessor implements Processor
> > {
> >    public void process(Exchange exchange) throws Exception {
> >      Message message = exchange.getIn();
> >      MyJaxbType response = message.getBody(MyJaxbType.class);
> >      ...
> >    }
> > }
> >
> > The problem was, the http response is an InputStream, so calling
> > Message.getBody() reads the stream and thus deletes it.
> >
> > I fixed it by adding the following line to the end of the processor:
> >
> >      message.setBody(response, MyJaxbType.class);
> >
> > So now all is good!
> >
> > Thanks,
> > Paul
> >
> >
>
>
> --
> Willem
> ----------------------------------
> FuseSource
> Web: http://www.fusesource.com
> Blog:    http://willemjiang.blogspot.com (English)
>           http://jnn.javaeye.com (Chinese)
> Twitter: willemjiang
>
> Connect at CamelOne May 24-26
> The Open Source Integration Conference
> http://camelone.com
>
>
>


STRICTLY PRIVATE, CONFIDENTIAL AND PRIVILEGED COMMUNICATION.

This message (including attachments) may contain information that is
privileged, confidential or protected from disclosure. They are intended
solely for the use of the intended recipient. If you are not the
intended recipient, you are hereby notified that dissemination,
disclosure, copying, distribution, printing, transmission or use of this
message or any information contained in it is strictly prohibited. If
you have received this message from NewBay Software in error, please
immediately notify the sender by reply email and delete this message
from your computer. The content of this e-mail, and any files
transmitted with it, may have been changed or altered without the
consent of the author. Although we have taken steps to ensure that this
email and attachments are free from any virus, we advise that in keeping
with good computing practice the recipient should ensure they are
actually virus free.

Re: restlet consumer overrides http producer's endpoint

Posted by Willem Jiang <wi...@gmail.com>.
Hi Paul,

Cool. It's good to see you find a way to resolve this issue.

Just one more note for the InputStreamCache, if you want to read the 
body again, you just need to call the method reset() of InputStreamCache.

Willem

On 4/1/11 5:49 PM, Paul Lowry wrote:
> Hi Willem,
>
> My route looks like this:
>
> <route id="MyRoute">
>    <from uri="restlet:http://localhost:9090/client?restletMethod=POST"/>
>    <setHeader headerName="CamelHttpMethod">
>      <constant>POST</constant>
>    </setHeader>
>    <setHeader headerName="Content-Type">
>      <constant>text/xml</constant>
>    </setHeader>
>    <removeHeader headerName="CamelHttpUri"/>
>    <to uri="http://localhost:8080/server"/>
>    <process ref="MyResponseProcessor"/>
> </route>
>
> The processor at the end is defined as follows:
>
> public class MyResponseProcessor implements Processor
> {
>    public void process(Exchange exchange) throws Exception {
>      Message message = exchange.getIn();
>      MyJaxbType response = message.getBody(MyJaxbType.class);
>      ...
>    }
> }
>
> The problem was, the http response is an InputStream, so calling
> Message.getBody() reads the stream and thus deletes it.
>
> I fixed it by adding the following line to the end of the processor:
>
>      message.setBody(response, MyJaxbType.class);
>
> So now all is good!
>
> Thanks,
> Paul
>
>


-- 
Willem
----------------------------------
FuseSource
Web: http://www.fusesource.com
Blog:    http://willemjiang.blogspot.com (English)
          http://jnn.javaeye.com (Chinese)
Twitter: willemjiang

Connect at CamelOne May 24-26
The Open Source Integration Conference
http://camelone.com

Re: restlet consumer overrides http producer's endpoint

Posted by Paul Lowry <pl...@newbay.com>.
Hi Willem,

My route looks like this:

<route id="MyRoute">
  <from uri="restlet:http://localhost:9090/client?restletMethod=POST"/>
  <setHeader headerName="CamelHttpMethod">
    <constant>POST</constant>
  </setHeader>
  <setHeader headerName="Content-Type">
    <constant>text/xml</constant>
  </setHeader>
  <removeHeader headerName="CamelHttpUri"/>
  <to uri="http://localhost:8080/server"/>
  <process ref="MyResponseProcessor"/>
</route>

The processor at the end is defined as follows:

public class MyResponseProcessor implements Processor
{
  public void process(Exchange exchange) throws Exception {
    Message message = exchange.getIn();
    MyJaxbType response = message.getBody(MyJaxbType.class);
    ...
  }
}

The problem was, the http response is an InputStream, so calling
Message.getBody() reads the stream and thus deletes it.

I fixed it by adding the following line to the end of the processor:

    message.setBody(response, MyJaxbType.class);

So now all is good!

Thanks,
Paul



On Fri, 2011-04-01 at 01:42 -0700, Willem Jiang wrote:
> Hi Paul,
>
> Can you check the response from the outside server is right.
> I guess the issue of converting the InputStreamCache object to
> Document
> could be caused by the server didn't send the reply message rightly.
>
> Willem
>
> On 4/1/11 4:10 PM, Paul Lowry wrote:
> > Hi Willem,
> >
> > I did what you suggested and got another error...
> >
> > DefaultTypeConverter DEBUG No type converter available to convert
> from
> > type: org.apache.camel.converter.stream.InputStreamCache to the
> required
> > type: org.w3c.dom.Document with value
> > org.apache.camel.converter.stream.InputStreamCache@1cb4cae Caused
> by:
> > org.xml.sax.SAXParseException: Premature end of file.. Will ignore
> this
> > and continue.
> >
> > DefaultErrorHandler DEBUG Failed delivery for exchangeId:
> > 04ff6403-4294-4152-b81e-6c3da8849a26. On delivery attempt: 0 caught:
> > java.lang.ClassCastException:
> > org.apache.camel.converter.stream.InputStreamCache cannot be cast to
> > org.w3c.dom.Node
> >
> > DefaultErrorHandler ERROR Failed delivery for exchangeId:
> > 04ff6403-4294-4152-b81e-6c3da8849a26. Exhausted after delivery
> attempt:
> > 1 caught: java.lang.ClassCastException:
> > org.apache.camel.converter.stream.InputStreamCache cannot be cast to
> > org.w3c.dom.Node
> >
> > But this is OK, because I understand it; I just need to (a) convert
> the
> > body in a processor, or (b) add a new type converter to the http
> > component - right?
> >
> > Regard,
> > Paul
> >
> >
> > On Tue, 2011-03-29 at 22:56 -0700, Willem Jiang wrote:
> >> <removeHeader headerName="CamelHttpUri"/>
> >>   >     <to uri="http://localhost:8080/server"/>
> >
> > STRICTLY PRIVATE, CONFIDENTIAL AND PRIVILEGED COMMUNICATION.
> >
> > This message (including attachments) may contain information that is
> > privileged, confidential or protected from disclosure. They are
> intended
> > solely for the use of the intended recipient. If you are not the
> > intended recipient, you are hereby notified that dissemination,
> > disclosure, copying, distribution, printing, transmission or use of
> this
> > message or any information contained in it is strictly prohibited.
> If
> > you have received this message from NewBay Software in error, please
> > immediately notify the sender by reply email and delete this message
> > from your computer. The content of this e-mail, and any files
> > transmitted with it, may have been changed or altered without the
> > consent of the author. Although we have taken steps to ensure that
> this
> > email and attachments are free from any virus, we advise that in
> keeping
> > with good computing practice the recipient should ensure they are
> > actually virus free.
>
>
> --
> Willem
> ----------------------------------
> FuseSource
> Web: http://www.fusesource.com
> Blog:    http://willemjiang.blogspot.com (English)
>           http://jnn.javaeye.com (Chinese)
> Twitter: willemjiang
>
> Connect at CamelOne May 24-26
> The Open Source Integration Conference
> http://camelone.com
>
>
>


STRICTLY PRIVATE, CONFIDENTIAL AND PRIVILEGED COMMUNICATION.

This message (including attachments) may contain information that is
privileged, confidential or protected from disclosure. They are intended
solely for the use of the intended recipient. If you are not the
intended recipient, you are hereby notified that dissemination,
disclosure, copying, distribution, printing, transmission or use of this
message or any information contained in it is strictly prohibited. If
you have received this message from NewBay Software in error, please
immediately notify the sender by reply email and delete this message
from your computer. The content of this e-mail, and any files
transmitted with it, may have been changed or altered without the
consent of the author. Although we have taken steps to ensure that this
email and attachments are free from any virus, we advise that in keeping
with good computing practice the recipient should ensure they are
actually virus free.

Re: restlet consumer overrides http producer's endpoint

Posted by Willem Jiang <wi...@gmail.com>.
Hi Paul,

Can you check the response from the outside server is right.
I guess the issue of converting the InputStreamCache object to Document 
could be caused by the server didn't send the reply message rightly.

Willem

On 4/1/11 4:10 PM, Paul Lowry wrote:
> Hi Willem,
>
> I did what you suggested and got another error...
>
> DefaultTypeConverter DEBUG No type converter available to convert from
> type: org.apache.camel.converter.stream.InputStreamCache to the required
> type: org.w3c.dom.Document with value
> org.apache.camel.converter.stream.InputStreamCache@1cb4cae Caused by:
> org.xml.sax.SAXParseException: Premature end of file.. Will ignore this
> and continue.
>
> DefaultErrorHandler DEBUG Failed delivery for exchangeId:
> 04ff6403-4294-4152-b81e-6c3da8849a26. On delivery attempt: 0 caught:
> java.lang.ClassCastException:
> org.apache.camel.converter.stream.InputStreamCache cannot be cast to
> org.w3c.dom.Node
>
> DefaultErrorHandler ERROR Failed delivery for exchangeId:
> 04ff6403-4294-4152-b81e-6c3da8849a26. Exhausted after delivery attempt:
> 1 caught: java.lang.ClassCastException:
> org.apache.camel.converter.stream.InputStreamCache cannot be cast to
> org.w3c.dom.Node
>
> But this is OK, because I understand it; I just need to (a) convert the
> body in a processor, or (b) add a new type converter to the http
> component - right?
>
> Regard,
> Paul
>
>
> On Tue, 2011-03-29 at 22:56 -0700, Willem Jiang wrote:
>> <removeHeader headerName="CamelHttpUri"/>
>>   >     <to uri="http://localhost:8080/server"/>
>
> STRICTLY PRIVATE, CONFIDENTIAL AND PRIVILEGED COMMUNICATION.
>
> This message (including attachments) may contain information that is
> privileged, confidential or protected from disclosure. They are intended
> solely for the use of the intended recipient. If you are not the
> intended recipient, you are hereby notified that dissemination,
> disclosure, copying, distribution, printing, transmission or use of this
> message or any information contained in it is strictly prohibited. If
> you have received this message from NewBay Software in error, please
> immediately notify the sender by reply email and delete this message
> from your computer. The content of this e-mail, and any files
> transmitted with it, may have been changed or altered without the
> consent of the author. Although we have taken steps to ensure that this
> email and attachments are free from any virus, we advise that in keeping
> with good computing practice the recipient should ensure they are
> actually virus free.


-- 
Willem
----------------------------------
FuseSource
Web: http://www.fusesource.com
Blog:    http://willemjiang.blogspot.com (English)
          http://jnn.javaeye.com (Chinese)
Twitter: willemjiang

Connect at CamelOne May 24-26
The Open Source Integration Conference
http://camelone.com