You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Suraf <ra...@sabre.com> on 2008/12/02 17:35:57 UTC

camel-mina in servicemix - how to process TCP response?

All,

I'm trying to execute a few steps using Camel-Mina TCP component in
servicemix:
- get InOut message from ServiceMix component
- process message (processed message is still an XML)
- send it to TCP server (via Mina)
- get response from TCP server (response is an XML)
- process response and send it back to ServiceMix component

Here is my code:

public class TcpRouteBuilder extends RouteBuilder {

    public void configure() throws Exception {

        String fullAddress = new StringBuilder()
                .append("mina:tcp://")
                .append(serverAddress)
                .append(":")
                .append(serverPort)
               
.append("?textline=true&sync=true&transferExchange=true").toString();

       
from("jbi:endpoint:http://namespace/tcpService/tcpEndpoint").process(
                new Processor() {
                    public void process(Exchange exchange) throws Exception
{
                        String xmlString = convertToString((DOMSource)
exchange.getIn().getBody());
                        xmlString = prepareMessage(xmlString);
                        exchange.getIn().setBody(xmlString);
                    }
                }
        ).to(fullAddress).process(
                new Processor() {
                    public void process(Exchange exchange) throws Exception
{
                        // here some additional processing of response is
required but body seems to be null
                        Object body = exchange.getOut().getBody();
                        body = processBody( body );
                        exchange.getOut().setBody(body);
                    }
                }
        );
    }
}

In the second processor I get null from exchange.getOut().getBody(). 

What am I doing wrong? How should I get valid XML response from TCP and
process it somehow? 
Could you please advice something?

I'm using FuseESB 3.3.1.11 with Camel 1.5.0 (camel-core-1.5.0.0-fuse.jar and
camel-mina-1.5.0.jar) and Mina 1.1.7 (mina-core-1.1.7.jar).

Thanks in advance for your help. 

-- 
View this message in context: http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20794416.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Re: camel-mina in servicemix - how to process TCP response?

Posted by Claus Ibsen <cl...@gmail.com>.
Hi

Just for the record I have improved camel-mina so you can now
- set the textline delimiter to use that mina supports
- if no response received from remote server, camel will detect this
and throw an exception instead of continuing

Is fixed in 1.5.1 and 2.0


/Claus Ibsen
Apache Camel Committer
Blog: http://davsclaus.blogspot.com/



On Wed, Dec 3, 2008 at 12:30 PM, Claus Ibsen <cl...@gmail.com> wrote:
> Hi
>
> What do you mean with TCP headers?
>
> You need to determine what the TCP server protocol is using. If you
> send raw bytes/text you need to determine
> - encoding (charset)
> - if using special start byte marker
> - if using special end byte marker
> - or using \n, \r or \n\r as end marker
>
> For instance the HL7 protocol over TCP uses special start and end byte markers.
> We have implemented this as a mina protocol. So you can check the
> source code in camel-hl7 how this is done.
>
> http://activemq.apache.org/camel/hl7.html
>
>
> /Claus Ibsen
> Apache Camel Committer
> Blog: http://davsclaus.blogspot.com/
>
>
>
> On Wed, Dec 3, 2008 at 11:53 AM, Suraf <ra...@sabre.com> wrote:
>>
>> Hi,
>>
>> I changed message to plain type, but I've just found out that TCP server is
>> not really "TCP" server. It requires some additional headers in standard TCP
>> request, so this is probably the issue of this exception:
>>
>>
>> DEBUG - MinaProducer                   - Waiting for response
>> ERROR - MinaProducer                   - Exception on receiving message from
>> address: /123.123.123.123:12345 using connector:
>> org.apache.mina.transport.socket.nio.SocketConnector@b9979b
>> java.io.IOException: An existing connection was forcibly closed by the
>> remote host
>>        at sun.nio.ch.SocketDispatcher.read0(Native Method)
>>        at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:25)
>>        at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:233)
>>        at sun.nio.ch.IOUtil.read(IOUtil.java:200)
>>        at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:207)
>>        at
>> org.apache.mina.transport.socket.nio.SocketIoProcessor.read(SocketIoProcessor.java:218)
>>        at
>> org.apache.mina.transport.socket.nio.SocketIoProcessor.process(SocketIoProcessor.java:198
>> )
>>        at
>> org.apache.mina.transport.socket.nio.SocketIoProcessor.access$400(SocketIoProcessor.java:
>> 45)
>>        at
>> org.apache.mina.transport.socket.nio.SocketIoProcessor$Worker.run(SocketIoProcessor.java:
>> 485)
>>        at
>> org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:51)
>>        at java.lang.Thread.run(Thread.java:595)
>>
>> DEBUG - MinaProducer                   - Session closed but no message
>> received from address: /123.123.123.123:12345
>>
>>
>> Thank you very much for your explanations and sorry for confusion.
>> I'll need to use some other - non standard - solution.
>>
>> (BTW: Is there any method to modify/add TCP headers in Mina using my flow
>> defined in the first post?)
>>
>>
>> Best regards,
>> Suraf
>>
>>
>>
>> Claus Ibsen-2 wrote:
>>>
>>> Hi
>>>
>>> Mina have some delimiters that can be configued to UNIX or what else
>>> format. By default it runs in some auto format where it tries to guess
>>> it.
>>> http://mina.apache.org/report/1.1/apidocs/org/apache/mina/filter/codec/textline/LineDelimiter.html
>>>
>>> You could try plain mina and assemble the encoder/decode yourself to
>>> use the right line delimiter.
>>>
>>> Browsing the javadoc it doesn't look like it's easy to set a new line
>>> delimiter.
>>> But I guess we should support this in Camel as a URI option. I will
>>> create a ticket for this.
>>>
>>> But try with plain mina to see if you can get it working.
>>> We can use this work as a help for adding this feature directly into
>>> camel.
>>>
>>>
>>> /Claus Ibsen
>>> Apache Camel Committer
>>> Blog: http://davsclaus.blogspot.com/
>>>
>>>
>>>
>>> On Wed, Dec 3, 2008 at 11:06 AM, Suraf <ra...@sabre.com> wrote:
>>>>
>>>> TCP server returns an answer in less than 1 second, so it might not be
>>>> related to timeout.
>>>>
>>>> What else protocol can I use to be sure that Mina will correctly handle
>>>> XML
>>>> response from server?
>>>> Is there anything like "xmlline" that I can use to let Mina know how to
>>>> indicate an end of message?
>>>>
>>>>
>>>> Best regards,
>>>> Suraf
>>>>
>>>>
>>>>
>>>> Claus Ibsen-2 wrote:
>>>>>
>>>>> Hi
>>>>>
>>>>> Ah that could be it the TCP server newer returns a response and
>>>>> camel-mina with timeout after 30 seconds.
>>>>> And then it continues the routing, so you kinda get the input concatted.
>>>>>
>>>>> In this situation camel-mina doesn't properly report that there is an
>>>>> issue, that the remote server didn't return a response.
>>>>> It should throw an IOException indicating this error.
>>>>>
>>>>> I will create a ticket in JIRA for this.
>>>>>
>>>>> Since you are using textline as the protocol the remote TCP server
>>>>> must send some kind of \n to indicate end of data.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> /Claus Ibsen
>>>>> Apache Camel Committer
>>>>> Blog: http://davsclaus.blogspot.com/
>>>>>
>>>>>
>>>>>
>>>>> On Wed, Dec 3, 2008 at 9:56 AM, Suraf wrote:
>>>>>>
>>>>>> TCP server returns plain XML message and it is working for sure (if I'm
>>>>>> using
>>>>>> some other TCP component it is working fine and gets message from
>>>>>> server).
>>>>>>
>>>>>> Probably the problem is in connection definition. I found sth like that
>>>>>> in
>>>>>> log:
>>>>>>
>>>>>> DEBUG - MinaProducer - Waiting for response
>>>>>> DEBUG - MinaProducer - Session closed but no message received from
>>>>>> address:
>>>>>> /123.123.123.123:12345
>>>>>>
>>>>>>
>>>>>> Best regards,
>>>>>> Suraf
>>>>>>
>>>>>>
>>>>>>
>>>>>> Claus Ibsen-2 wrote:
>>>>>>>
>>>>>>> On Wed, Dec 3, 2008 at 9:37 AM, Suraf wrote:
>>>>>>>>
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> #1: TCP server expects plain XML so I removed transferExchange=true
>>>>>>>> option.
>>>>>>>> Thanks for that.
>>>>>>>>
>>>>>>>>
>>>>>>>> #2: My In message from 2nd processor looks like a sum of In message
>>>>>>>> from
>>>>>>>> 1st
>>>>>>>> processor and Out message (which is a processed In message) from 1st
>>>>>>>> processor. So it looks like in below example:
>>>>>>>>
>>>>>>>> Processor I - In message: <AAA><BBB/></AAA>
>>>>>>>> Processor I - Out message (after processing In message):
>>>>>>>> <AAA><BBB><CCC/></BBB></AAA>
>>>>>>>> Processor II - In message:
>>>>>>>> <AAA><BBB/></AAA><AAA><BBB><CCC/></BBB></AAA>
>>>>>>>> Processor II - Out message: null
>>>>>>>>
>>>>>>>> Maybe I'm wrong but it doesn't seem that Out from TCP is In for 2nd
>>>>>>>> processor...
>>>>>>> What is the OUT from the TCP? Maybe you can invoke the TCP directly
>>>>>>> and see what it actually returns.
>>>>>>>
>>>>>>> You could also try with a mock of the TCP server to return a fixed
>>>>>>> response so you know what the OUT is and thus better can find out what
>>>>>>> is wrong.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> I turned on tracing but it doesn't say anything more than
>>>>>>>> java.lang.NullPointerException :(
>>>>>>> Ah that could be the bug in Camel if a body is null. You need to turn
>>>>>>> showBodyType=false to avoid this NPE:
>>>>>>> http://activemq.apache.org/camel/tracer.html
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>> Any suggestions on that, please?
>>>>>>>>
>>>>>>>>
>>>>>>>> Best regards,
>>>>>>>> Suraf
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Claus Ibsen-2 wrote:
>>>>>>>>>
>>>>>>>>> Hi
>>>>>>>>>
>>>>>>>>> #1
>>>>>>>>> What format does the TCP server expect?
>>>>>>>>> If it should be the exchange body as plain XML then you should not
>>>>>>>>> use
>>>>>>>>> transferExchange=true.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> #2
>>>>>>>>> In the last processor could you try getting the IN body instead.
>>>>>>>>> The processor is part of a new route where the OUT from the TCP
>>>>>>>>> server
>>>>>>>>> is used as IN in the next node.
>>>>>>>>>
>>>>>>>>> BTW: You can use the tracer to see the messages being passed in the
>>>>>>>>> log
>>>>>>>>> http://activemq.apache.org/camel/tracer.html
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> /Claus Ibsen
>>>>>>>>> Apache Camel Committer
>>>>>>>>> Blog: http://davsclaus.blogspot.com/
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Tue, Dec 2, 2008 at 5:35 PM, Suraf wrote:
>>>>>>>>>>
>>>>>>>>>> All,
>>>>>>>>>>
>>>>>>>>>> I'm trying to execute a few steps using Camel-Mina TCP component in
>>>>>>>>>> servicemix:
>>>>>>>>>> - get InOut message from ServiceMix component
>>>>>>>>>> - process message (processed message is still an XML)
>>>>>>>>>> - send it to TCP server (via Mina)
>>>>>>>>>> - get response from TCP server (response is an XML)
>>>>>>>>>> - process response and send it back to ServiceMix component
>>>>>>>>>>
>>>>>>>>>> Here is my code:
>>>>>>>>>>
>>>>>>>>>> public class TcpRouteBuilder extends RouteBuilder {
>>>>>>>>>>
>>>>>>>>>>    public void configure() throws Exception {
>>>>>>>>>>
>>>>>>>>>>        String fullAddress = new StringBuilder()
>>>>>>>>>>                .append("mina:tcp://")
>>>>>>>>>>                .append(serverAddress)
>>>>>>>>>>                .append(":")
>>>>>>>>>>                .append(serverPort)
>>>>>>>>>>
>>>>>>>>>> .append("?textline=true&sync=true&transferExchange=true").toString();
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> from("jbi:endpoint:http://namespace/tcpService/tcpEndpoint").process(
>>>>>>>>>>                new Processor() {
>>>>>>>>>>                    public void process(Exchange exchange) throws
>>>>>>>>>> Exception
>>>>>>>>>> {
>>>>>>>>>>                        String xmlString =
>>>>>>>>>> convertToString((DOMSource)
>>>>>>>>>> exchange.getIn().getBody());
>>>>>>>>>>                        xmlString = prepareMessage(xmlString);
>>>>>>>>>>                        exchange.getIn().setBody(xmlString);
>>>>>>>>>>                    }
>>>>>>>>>>                }
>>>>>>>>>>        ).to(fullAddress).process(
>>>>>>>>>>                new Processor() {
>>>>>>>>>>                    public void process(Exchange exchange) throws
>>>>>>>>>> Exception
>>>>>>>>>> {
>>>>>>>>>>                        // here some additional processing of
>>>>>>>>>> response
>>>>>>>>>> is
>>>>>>>>>> required but body seems to be null
>>>>>>>>>>                        Object body = exchange.getOut().getBody();
>>>>>>>>>>                        body = processBody( body );
>>>>>>>>>>                        exchange.getOut().setBody(body);
>>>>>>>>>>                    }
>>>>>>>>>>                }
>>>>>>>>>>        );
>>>>>>>>>>    }
>>>>>>>>>> }
>>>>>>>>>>
>>>>>>>>>> In the second processor I get null from
>>>>>>>>>> exchange.getOut().getBody().
>>>>>>>>>>
>>>>>>>>>> What am I doing wrong? How should I get valid XML response from TCP
>>>>>>>>>> and
>>>>>>>>>> process it somehow?
>>>>>>>>>> Could you please advice something?
>>>>>>>>>>
>>>>>>>>>> I'm using FuseESB 3.3.1.11 with Camel 1.5.0
>>>>>>>>>> (camel-core-1.5.0.0-fuse.jar
>>>>>>>>>> and
>>>>>>>>>> camel-mina-1.5.0.jar) and Mina 1.1.7 (mina-core-1.1.7.jar).
>>>>>>>>>>
>>>>>>>>>> Thanks in advance for your help.
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> View this message in context:
>>>>>>>>>> http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20794416.html
>>>>>>>>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> View this message in context:
>>>>>>>> http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20808827.html
>>>>>>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> --
>>>>>> View this message in context:
>>>>>> http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20809061.html
>>>>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>> --
>>>> View this message in context:
>>>> http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20810015.html
>>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>>
>>>>
>>>
>>>
>>
>> --
>> View this message in context: http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20810700.html
>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>
>>
>

Re: camel-mina in servicemix - how to process TCP response?

Posted by Claus Ibsen <cl...@gmail.com>.
Hi

What do you mean with TCP headers?

You need to determine what the TCP server protocol is using. If you
send raw bytes/text you need to determine
- encoding (charset)
- if using special start byte marker
- if using special end byte marker
- or using \n, \r or \n\r as end marker

For instance the HL7 protocol over TCP uses special start and end byte markers.
We have implemented this as a mina protocol. So you can check the
source code in camel-hl7 how this is done.

http://activemq.apache.org/camel/hl7.html


/Claus Ibsen
Apache Camel Committer
Blog: http://davsclaus.blogspot.com/



On Wed, Dec 3, 2008 at 11:53 AM, Suraf <ra...@sabre.com> wrote:
>
> Hi,
>
> I changed message to plain type, but I've just found out that TCP server is
> not really "TCP" server. It requires some additional headers in standard TCP
> request, so this is probably the issue of this exception:
>
>
> DEBUG - MinaProducer                   - Waiting for response
> ERROR - MinaProducer                   - Exception on receiving message from
> address: /123.123.123.123:12345 using connector:
> org.apache.mina.transport.socket.nio.SocketConnector@b9979b
> java.io.IOException: An existing connection was forcibly closed by the
> remote host
>        at sun.nio.ch.SocketDispatcher.read0(Native Method)
>        at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:25)
>        at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:233)
>        at sun.nio.ch.IOUtil.read(IOUtil.java:200)
>        at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:207)
>        at
> org.apache.mina.transport.socket.nio.SocketIoProcessor.read(SocketIoProcessor.java:218)
>        at
> org.apache.mina.transport.socket.nio.SocketIoProcessor.process(SocketIoProcessor.java:198
> )
>        at
> org.apache.mina.transport.socket.nio.SocketIoProcessor.access$400(SocketIoProcessor.java:
> 45)
>        at
> org.apache.mina.transport.socket.nio.SocketIoProcessor$Worker.run(SocketIoProcessor.java:
> 485)
>        at
> org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:51)
>        at java.lang.Thread.run(Thread.java:595)
>
> DEBUG - MinaProducer                   - Session closed but no message
> received from address: /123.123.123.123:12345
>
>
> Thank you very much for your explanations and sorry for confusion.
> I'll need to use some other - non standard - solution.
>
> (BTW: Is there any method to modify/add TCP headers in Mina using my flow
> defined in the first post?)
>
>
> Best regards,
> Suraf
>
>
>
> Claus Ibsen-2 wrote:
>>
>> Hi
>>
>> Mina have some delimiters that can be configued to UNIX or what else
>> format. By default it runs in some auto format where it tries to guess
>> it.
>> http://mina.apache.org/report/1.1/apidocs/org/apache/mina/filter/codec/textline/LineDelimiter.html
>>
>> You could try plain mina and assemble the encoder/decode yourself to
>> use the right line delimiter.
>>
>> Browsing the javadoc it doesn't look like it's easy to set a new line
>> delimiter.
>> But I guess we should support this in Camel as a URI option. I will
>> create a ticket for this.
>>
>> But try with plain mina to see if you can get it working.
>> We can use this work as a help for adding this feature directly into
>> camel.
>>
>>
>> /Claus Ibsen
>> Apache Camel Committer
>> Blog: http://davsclaus.blogspot.com/
>>
>>
>>
>> On Wed, Dec 3, 2008 at 11:06 AM, Suraf <ra...@sabre.com> wrote:
>>>
>>> TCP server returns an answer in less than 1 second, so it might not be
>>> related to timeout.
>>>
>>> What else protocol can I use to be sure that Mina will correctly handle
>>> XML
>>> response from server?
>>> Is there anything like "xmlline" that I can use to let Mina know how to
>>> indicate an end of message?
>>>
>>>
>>> Best regards,
>>> Suraf
>>>
>>>
>>>
>>> Claus Ibsen-2 wrote:
>>>>
>>>> Hi
>>>>
>>>> Ah that could be it the TCP server newer returns a response and
>>>> camel-mina with timeout after 30 seconds.
>>>> And then it continues the routing, so you kinda get the input concatted.
>>>>
>>>> In this situation camel-mina doesn't properly report that there is an
>>>> issue, that the remote server didn't return a response.
>>>> It should throw an IOException indicating this error.
>>>>
>>>> I will create a ticket in JIRA for this.
>>>>
>>>> Since you are using textline as the protocol the remote TCP server
>>>> must send some kind of \n to indicate end of data.
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> /Claus Ibsen
>>>> Apache Camel Committer
>>>> Blog: http://davsclaus.blogspot.com/
>>>>
>>>>
>>>>
>>>> On Wed, Dec 3, 2008 at 9:56 AM, Suraf wrote:
>>>>>
>>>>> TCP server returns plain XML message and it is working for sure (if I'm
>>>>> using
>>>>> some other TCP component it is working fine and gets message from
>>>>> server).
>>>>>
>>>>> Probably the problem is in connection definition. I found sth like that
>>>>> in
>>>>> log:
>>>>>
>>>>> DEBUG - MinaProducer - Waiting for response
>>>>> DEBUG - MinaProducer - Session closed but no message received from
>>>>> address:
>>>>> /123.123.123.123:12345
>>>>>
>>>>>
>>>>> Best regards,
>>>>> Suraf
>>>>>
>>>>>
>>>>>
>>>>> Claus Ibsen-2 wrote:
>>>>>>
>>>>>> On Wed, Dec 3, 2008 at 9:37 AM, Suraf wrote:
>>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> #1: TCP server expects plain XML so I removed transferExchange=true
>>>>>>> option.
>>>>>>> Thanks for that.
>>>>>>>
>>>>>>>
>>>>>>> #2: My In message from 2nd processor looks like a sum of In message
>>>>>>> from
>>>>>>> 1st
>>>>>>> processor and Out message (which is a processed In message) from 1st
>>>>>>> processor. So it looks like in below example:
>>>>>>>
>>>>>>> Processor I - In message: <AAA><BBB/></AAA>
>>>>>>> Processor I - Out message (after processing In message):
>>>>>>> <AAA><BBB><CCC/></BBB></AAA>
>>>>>>> Processor II - In message:
>>>>>>> <AAA><BBB/></AAA><AAA><BBB><CCC/></BBB></AAA>
>>>>>>> Processor II - Out message: null
>>>>>>>
>>>>>>> Maybe I'm wrong but it doesn't seem that Out from TCP is In for 2nd
>>>>>>> processor...
>>>>>> What is the OUT from the TCP? Maybe you can invoke the TCP directly
>>>>>> and see what it actually returns.
>>>>>>
>>>>>> You could also try with a mock of the TCP server to return a fixed
>>>>>> response so you know what the OUT is and thus better can find out what
>>>>>> is wrong.
>>>>>>
>>>>>>
>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> I turned on tracing but it doesn't say anything more than
>>>>>>> java.lang.NullPointerException :(
>>>>>> Ah that could be the bug in Camel if a body is null. You need to turn
>>>>>> showBodyType=false to avoid this NPE:
>>>>>> http://activemq.apache.org/camel/tracer.html
>>>>>>
>>>>>>
>>>>>>
>>>>>>>
>>>>>>> Any suggestions on that, please?
>>>>>>>
>>>>>>>
>>>>>>> Best regards,
>>>>>>> Suraf
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Claus Ibsen-2 wrote:
>>>>>>>>
>>>>>>>> Hi
>>>>>>>>
>>>>>>>> #1
>>>>>>>> What format does the TCP server expect?
>>>>>>>> If it should be the exchange body as plain XML then you should not
>>>>>>>> use
>>>>>>>> transferExchange=true.
>>>>>>>>
>>>>>>>>
>>>>>>>> #2
>>>>>>>> In the last processor could you try getting the IN body instead.
>>>>>>>> The processor is part of a new route where the OUT from the TCP
>>>>>>>> server
>>>>>>>> is used as IN in the next node.
>>>>>>>>
>>>>>>>> BTW: You can use the tracer to see the messages being passed in the
>>>>>>>> log
>>>>>>>> http://activemq.apache.org/camel/tracer.html
>>>>>>>>
>>>>>>>>
>>>>>>>> /Claus Ibsen
>>>>>>>> Apache Camel Committer
>>>>>>>> Blog: http://davsclaus.blogspot.com/
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Tue, Dec 2, 2008 at 5:35 PM, Suraf wrote:
>>>>>>>>>
>>>>>>>>> All,
>>>>>>>>>
>>>>>>>>> I'm trying to execute a few steps using Camel-Mina TCP component in
>>>>>>>>> servicemix:
>>>>>>>>> - get InOut message from ServiceMix component
>>>>>>>>> - process message (processed message is still an XML)
>>>>>>>>> - send it to TCP server (via Mina)
>>>>>>>>> - get response from TCP server (response is an XML)
>>>>>>>>> - process response and send it back to ServiceMix component
>>>>>>>>>
>>>>>>>>> Here is my code:
>>>>>>>>>
>>>>>>>>> public class TcpRouteBuilder extends RouteBuilder {
>>>>>>>>>
>>>>>>>>>    public void configure() throws Exception {
>>>>>>>>>
>>>>>>>>>        String fullAddress = new StringBuilder()
>>>>>>>>>                .append("mina:tcp://")
>>>>>>>>>                .append(serverAddress)
>>>>>>>>>                .append(":")
>>>>>>>>>                .append(serverPort)
>>>>>>>>>
>>>>>>>>> .append("?textline=true&sync=true&transferExchange=true").toString();
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> from("jbi:endpoint:http://namespace/tcpService/tcpEndpoint").process(
>>>>>>>>>                new Processor() {
>>>>>>>>>                    public void process(Exchange exchange) throws
>>>>>>>>> Exception
>>>>>>>>> {
>>>>>>>>>                        String xmlString =
>>>>>>>>> convertToString((DOMSource)
>>>>>>>>> exchange.getIn().getBody());
>>>>>>>>>                        xmlString = prepareMessage(xmlString);
>>>>>>>>>                        exchange.getIn().setBody(xmlString);
>>>>>>>>>                    }
>>>>>>>>>                }
>>>>>>>>>        ).to(fullAddress).process(
>>>>>>>>>                new Processor() {
>>>>>>>>>                    public void process(Exchange exchange) throws
>>>>>>>>> Exception
>>>>>>>>> {
>>>>>>>>>                        // here some additional processing of
>>>>>>>>> response
>>>>>>>>> is
>>>>>>>>> required but body seems to be null
>>>>>>>>>                        Object body = exchange.getOut().getBody();
>>>>>>>>>                        body = processBody( body );
>>>>>>>>>                        exchange.getOut().setBody(body);
>>>>>>>>>                    }
>>>>>>>>>                }
>>>>>>>>>        );
>>>>>>>>>    }
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> In the second processor I get null from
>>>>>>>>> exchange.getOut().getBody().
>>>>>>>>>
>>>>>>>>> What am I doing wrong? How should I get valid XML response from TCP
>>>>>>>>> and
>>>>>>>>> process it somehow?
>>>>>>>>> Could you please advice something?
>>>>>>>>>
>>>>>>>>> I'm using FuseESB 3.3.1.11 with Camel 1.5.0
>>>>>>>>> (camel-core-1.5.0.0-fuse.jar
>>>>>>>>> and
>>>>>>>>> camel-mina-1.5.0.jar) and Mina 1.1.7 (mina-core-1.1.7.jar).
>>>>>>>>>
>>>>>>>>> Thanks in advance for your help.
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> View this message in context:
>>>>>>>>> http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20794416.html
>>>>>>>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> View this message in context:
>>>>>>> http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20808827.html
>>>>>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>> --
>>>>> View this message in context:
>>>>> http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20809061.html
>>>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>>>
>>>>>
>>>>
>>>>
>>>
>>> --
>>> View this message in context:
>>> http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20810015.html
>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>
>>>
>>
>>
>
> --
> View this message in context: http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20810700.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>
>

Re: camel-mina in servicemix - how to process TCP response?

Posted by Suraf <ra...@sabre.com>.
Hi,

I changed message to plain type, but I've just found out that TCP server is
not really "TCP" server. It requires some additional headers in standard TCP
request, so this is probably the issue of this exception:


DEBUG - MinaProducer                   - Waiting for response
ERROR - MinaProducer                   - Exception on receiving message from
address: /123.123.123.123:12345 using connector:
org.apache.mina.transport.socket.nio.SocketConnector@b9979b
java.io.IOException: An existing connection was forcibly closed by the
remote host
        at sun.nio.ch.SocketDispatcher.read0(Native Method)
        at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:25)
        at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:233)
        at sun.nio.ch.IOUtil.read(IOUtil.java:200)
        at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:207)
        at
org.apache.mina.transport.socket.nio.SocketIoProcessor.read(SocketIoProcessor.java:218)
        at
org.apache.mina.transport.socket.nio.SocketIoProcessor.process(SocketIoProcessor.java:198
)
        at
org.apache.mina.transport.socket.nio.SocketIoProcessor.access$400(SocketIoProcessor.java:
45)
        at
org.apache.mina.transport.socket.nio.SocketIoProcessor$Worker.run(SocketIoProcessor.java:
485)
        at
org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:51)
        at java.lang.Thread.run(Thread.java:595)

DEBUG - MinaProducer                   - Session closed but no message
received from address: /123.123.123.123:12345


Thank you very much for your explanations and sorry for confusion. 
I'll need to use some other - non standard - solution. 

(BTW: Is there any method to modify/add TCP headers in Mina using my flow
defined in the first post?)


Best regards,
Suraf



Claus Ibsen-2 wrote:
> 
> Hi
> 
> Mina have some delimiters that can be configued to UNIX or what else
> format. By default it runs in some auto format where it tries to guess
> it.
> http://mina.apache.org/report/1.1/apidocs/org/apache/mina/filter/codec/textline/LineDelimiter.html
> 
> You could try plain mina and assemble the encoder/decode yourself to
> use the right line delimiter.
> 
> Browsing the javadoc it doesn't look like it's easy to set a new line
> delimiter.
> But I guess we should support this in Camel as a URI option. I will
> create a ticket for this.
> 
> But try with plain mina to see if you can get it working.
> We can use this work as a help for adding this feature directly into
> camel.
> 
> 
> /Claus Ibsen
> Apache Camel Committer
> Blog: http://davsclaus.blogspot.com/
> 
> 
> 
> On Wed, Dec 3, 2008 at 11:06 AM, Suraf <ra...@sabre.com> wrote:
>>
>> TCP server returns an answer in less than 1 second, so it might not be
>> related to timeout.
>>
>> What else protocol can I use to be sure that Mina will correctly handle
>> XML
>> response from server?
>> Is there anything like "xmlline" that I can use to let Mina know how to
>> indicate an end of message?
>>
>>
>> Best regards,
>> Suraf
>>
>>
>>
>> Claus Ibsen-2 wrote:
>>>
>>> Hi
>>>
>>> Ah that could be it the TCP server newer returns a response and
>>> camel-mina with timeout after 30 seconds.
>>> And then it continues the routing, so you kinda get the input concatted.
>>>
>>> In this situation camel-mina doesn't properly report that there is an
>>> issue, that the remote server didn't return a response.
>>> It should throw an IOException indicating this error.
>>>
>>> I will create a ticket in JIRA for this.
>>>
>>> Since you are using textline as the protocol the remote TCP server
>>> must send some kind of \n to indicate end of data.
>>>
>>>
>>>
>>>
>>>
>>> /Claus Ibsen
>>> Apache Camel Committer
>>> Blog: http://davsclaus.blogspot.com/
>>>
>>>
>>>
>>> On Wed, Dec 3, 2008 at 9:56 AM, Suraf wrote:
>>>>
>>>> TCP server returns plain XML message and it is working for sure (if I'm
>>>> using
>>>> some other TCP component it is working fine and gets message from
>>>> server).
>>>>
>>>> Probably the problem is in connection definition. I found sth like that
>>>> in
>>>> log:
>>>>
>>>> DEBUG - MinaProducer - Waiting for response
>>>> DEBUG - MinaProducer - Session closed but no message received from
>>>> address:
>>>> /123.123.123.123:12345
>>>>
>>>>
>>>> Best regards,
>>>> Suraf
>>>>
>>>>
>>>>
>>>> Claus Ibsen-2 wrote:
>>>>>
>>>>> On Wed, Dec 3, 2008 at 9:37 AM, Suraf wrote:
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> #1: TCP server expects plain XML so I removed transferExchange=true
>>>>>> option.
>>>>>> Thanks for that.
>>>>>>
>>>>>>
>>>>>> #2: My In message from 2nd processor looks like a sum of In message
>>>>>> from
>>>>>> 1st
>>>>>> processor and Out message (which is a processed In message) from 1st
>>>>>> processor. So it looks like in below example:
>>>>>>
>>>>>> Processor I - In message: <AAA><BBB/></AAA>
>>>>>> Processor I - Out message (after processing In message):
>>>>>> <AAA><BBB><CCC/></BBB></AAA>
>>>>>> Processor II - In message:
>>>>>> <AAA><BBB/></AAA><AAA><BBB><CCC/></BBB></AAA>
>>>>>> Processor II - Out message: null
>>>>>>
>>>>>> Maybe I'm wrong but it doesn't seem that Out from TCP is In for 2nd
>>>>>> processor...
>>>>> What is the OUT from the TCP? Maybe you can invoke the TCP directly
>>>>> and see what it actually returns.
>>>>>
>>>>> You could also try with a mock of the TCP server to return a fixed
>>>>> response so you know what the OUT is and thus better can find out what
>>>>> is wrong.
>>>>>
>>>>>
>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> I turned on tracing but it doesn't say anything more than
>>>>>> java.lang.NullPointerException :(
>>>>> Ah that could be the bug in Camel if a body is null. You need to turn
>>>>> showBodyType=false to avoid this NPE:
>>>>> http://activemq.apache.org/camel/tracer.html
>>>>>
>>>>>
>>>>>
>>>>>>
>>>>>> Any suggestions on that, please?
>>>>>>
>>>>>>
>>>>>> Best regards,
>>>>>> Suraf
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> Claus Ibsen-2 wrote:
>>>>>>>
>>>>>>> Hi
>>>>>>>
>>>>>>> #1
>>>>>>> What format does the TCP server expect?
>>>>>>> If it should be the exchange body as plain XML then you should not
>>>>>>> use
>>>>>>> transferExchange=true.
>>>>>>>
>>>>>>>
>>>>>>> #2
>>>>>>> In the last processor could you try getting the IN body instead.
>>>>>>> The processor is part of a new route where the OUT from the TCP
>>>>>>> server
>>>>>>> is used as IN in the next node.
>>>>>>>
>>>>>>> BTW: You can use the tracer to see the messages being passed in the
>>>>>>> log
>>>>>>> http://activemq.apache.org/camel/tracer.html
>>>>>>>
>>>>>>>
>>>>>>> /Claus Ibsen
>>>>>>> Apache Camel Committer
>>>>>>> Blog: http://davsclaus.blogspot.com/
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Tue, Dec 2, 2008 at 5:35 PM, Suraf wrote:
>>>>>>>>
>>>>>>>> All,
>>>>>>>>
>>>>>>>> I'm trying to execute a few steps using Camel-Mina TCP component in
>>>>>>>> servicemix:
>>>>>>>> - get InOut message from ServiceMix component
>>>>>>>> - process message (processed message is still an XML)
>>>>>>>> - send it to TCP server (via Mina)
>>>>>>>> - get response from TCP server (response is an XML)
>>>>>>>> - process response and send it back to ServiceMix component
>>>>>>>>
>>>>>>>> Here is my code:
>>>>>>>>
>>>>>>>> public class TcpRouteBuilder extends RouteBuilder {
>>>>>>>>
>>>>>>>>    public void configure() throws Exception {
>>>>>>>>
>>>>>>>>        String fullAddress = new StringBuilder()
>>>>>>>>                .append("mina:tcp://")
>>>>>>>>                .append(serverAddress)
>>>>>>>>                .append(":")
>>>>>>>>                .append(serverPort)
>>>>>>>>
>>>>>>>> .append("?textline=true&sync=true&transferExchange=true").toString();
>>>>>>>>
>>>>>>>>
>>>>>>>> from("jbi:endpoint:http://namespace/tcpService/tcpEndpoint").process(
>>>>>>>>                new Processor() {
>>>>>>>>                    public void process(Exchange exchange) throws
>>>>>>>> Exception
>>>>>>>> {
>>>>>>>>                        String xmlString =
>>>>>>>> convertToString((DOMSource)
>>>>>>>> exchange.getIn().getBody());
>>>>>>>>                        xmlString = prepareMessage(xmlString);
>>>>>>>>                        exchange.getIn().setBody(xmlString);
>>>>>>>>                    }
>>>>>>>>                }
>>>>>>>>        ).to(fullAddress).process(
>>>>>>>>                new Processor() {
>>>>>>>>                    public void process(Exchange exchange) throws
>>>>>>>> Exception
>>>>>>>> {
>>>>>>>>                        // here some additional processing of
>>>>>>>> response
>>>>>>>> is
>>>>>>>> required but body seems to be null
>>>>>>>>                        Object body = exchange.getOut().getBody();
>>>>>>>>                        body = processBody( body );
>>>>>>>>                        exchange.getOut().setBody(body);
>>>>>>>>                    }
>>>>>>>>                }
>>>>>>>>        );
>>>>>>>>    }
>>>>>>>> }
>>>>>>>>
>>>>>>>> In the second processor I get null from
>>>>>>>> exchange.getOut().getBody().
>>>>>>>>
>>>>>>>> What am I doing wrong? How should I get valid XML response from TCP
>>>>>>>> and
>>>>>>>> process it somehow?
>>>>>>>> Could you please advice something?
>>>>>>>>
>>>>>>>> I'm using FuseESB 3.3.1.11 with Camel 1.5.0
>>>>>>>> (camel-core-1.5.0.0-fuse.jar
>>>>>>>> and
>>>>>>>> camel-mina-1.5.0.jar) and Mina 1.1.7 (mina-core-1.1.7.jar).
>>>>>>>>
>>>>>>>> Thanks in advance for your help.
>>>>>>>>
>>>>>>>> --
>>>>>>>> View this message in context:
>>>>>>>> http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20794416.html
>>>>>>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> --
>>>>>> View this message in context:
>>>>>> http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20808827.html
>>>>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>> --
>>>> View this message in context:
>>>> http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20809061.html
>>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>>
>>>>
>>>
>>>
>>
>> --
>> View this message in context:
>> http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20810015.html
>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>
>>
> 
> 

-- 
View this message in context: http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20810700.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Re: camel-mina in servicemix - how to process TCP response?

Posted by Claus Ibsen <cl...@gmail.com>.
Hi

Mina have some delimiters that can be configued to UNIX or what else
format. By default it runs in some auto format where it tries to guess
it.
http://mina.apache.org/report/1.1/apidocs/org/apache/mina/filter/codec/textline/LineDelimiter.html

You could try plain mina and assemble the encoder/decode yourself to
use the right line delimiter.

Browsing the javadoc it doesn't look like it's easy to set a new line delimiter.
But I guess we should support this in Camel as a URI option. I will
create a ticket for this.

But try with plain mina to see if you can get it working.
We can use this work as a help for adding this feature directly into camel.


/Claus Ibsen
Apache Camel Committer
Blog: http://davsclaus.blogspot.com/



On Wed, Dec 3, 2008 at 11:06 AM, Suraf <ra...@sabre.com> wrote:
>
> TCP server returns an answer in less than 1 second, so it might not be
> related to timeout.
>
> What else protocol can I use to be sure that Mina will correctly handle XML
> response from server?
> Is there anything like "xmlline" that I can use to let Mina know how to
> indicate an end of message?
>
>
> Best regards,
> Suraf
>
>
>
> Claus Ibsen-2 wrote:
>>
>> Hi
>>
>> Ah that could be it the TCP server newer returns a response and
>> camel-mina with timeout after 30 seconds.
>> And then it continues the routing, so you kinda get the input concatted.
>>
>> In this situation camel-mina doesn't properly report that there is an
>> issue, that the remote server didn't return a response.
>> It should throw an IOException indicating this error.
>>
>> I will create a ticket in JIRA for this.
>>
>> Since you are using textline as the protocol the remote TCP server
>> must send some kind of \n to indicate end of data.
>>
>>
>>
>>
>>
>> /Claus Ibsen
>> Apache Camel Committer
>> Blog: http://davsclaus.blogspot.com/
>>
>>
>>
>> On Wed, Dec 3, 2008 at 9:56 AM, Suraf wrote:
>>>
>>> TCP server returns plain XML message and it is working for sure (if I'm
>>> using
>>> some other TCP component it is working fine and gets message from
>>> server).
>>>
>>> Probably the problem is in connection definition. I found sth like that
>>> in
>>> log:
>>>
>>> DEBUG - MinaProducer - Waiting for response
>>> DEBUG - MinaProducer - Session closed but no message received from
>>> address:
>>> /123.123.123.123:12345
>>>
>>>
>>> Best regards,
>>> Suraf
>>>
>>>
>>>
>>> Claus Ibsen-2 wrote:
>>>>
>>>> On Wed, Dec 3, 2008 at 9:37 AM, Suraf wrote:
>>>>>
>>>>> Hi,
>>>>>
>>>>> #1: TCP server expects plain XML so I removed transferExchange=true
>>>>> option.
>>>>> Thanks for that.
>>>>>
>>>>>
>>>>> #2: My In message from 2nd processor looks like a sum of In message
>>>>> from
>>>>> 1st
>>>>> processor and Out message (which is a processed In message) from 1st
>>>>> processor. So it looks like in below example:
>>>>>
>>>>> Processor I - In message: <AAA><BBB/></AAA>
>>>>> Processor I - Out message (after processing In message):
>>>>> <AAA><BBB><CCC/></BBB></AAA>
>>>>> Processor II - In message:
>>>>> <AAA><BBB/></AAA><AAA><BBB><CCC/></BBB></AAA>
>>>>> Processor II - Out message: null
>>>>>
>>>>> Maybe I'm wrong but it doesn't seem that Out from TCP is In for 2nd
>>>>> processor...
>>>> What is the OUT from the TCP? Maybe you can invoke the TCP directly
>>>> and see what it actually returns.
>>>>
>>>> You could also try with a mock of the TCP server to return a fixed
>>>> response so you know what the OUT is and thus better can find out what
>>>> is wrong.
>>>>
>>>>
>>>>
>>>>>
>>>>>
>>>>>
>>>>> I turned on tracing but it doesn't say anything more than
>>>>> java.lang.NullPointerException :(
>>>> Ah that could be the bug in Camel if a body is null. You need to turn
>>>> showBodyType=false to avoid this NPE:
>>>> http://activemq.apache.org/camel/tracer.html
>>>>
>>>>
>>>>
>>>>>
>>>>> Any suggestions on that, please?
>>>>>
>>>>>
>>>>> Best regards,
>>>>> Suraf
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Claus Ibsen-2 wrote:
>>>>>>
>>>>>> Hi
>>>>>>
>>>>>> #1
>>>>>> What format does the TCP server expect?
>>>>>> If it should be the exchange body as plain XML then you should not use
>>>>>> transferExchange=true.
>>>>>>
>>>>>>
>>>>>> #2
>>>>>> In the last processor could you try getting the IN body instead.
>>>>>> The processor is part of a new route where the OUT from the TCP server
>>>>>> is used as IN in the next node.
>>>>>>
>>>>>> BTW: You can use the tracer to see the messages being passed in the
>>>>>> log
>>>>>> http://activemq.apache.org/camel/tracer.html
>>>>>>
>>>>>>
>>>>>> /Claus Ibsen
>>>>>> Apache Camel Committer
>>>>>> Blog: http://davsclaus.blogspot.com/
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Tue, Dec 2, 2008 at 5:35 PM, Suraf wrote:
>>>>>>>
>>>>>>> All,
>>>>>>>
>>>>>>> I'm trying to execute a few steps using Camel-Mina TCP component in
>>>>>>> servicemix:
>>>>>>> - get InOut message from ServiceMix component
>>>>>>> - process message (processed message is still an XML)
>>>>>>> - send it to TCP server (via Mina)
>>>>>>> - get response from TCP server (response is an XML)
>>>>>>> - process response and send it back to ServiceMix component
>>>>>>>
>>>>>>> Here is my code:
>>>>>>>
>>>>>>> public class TcpRouteBuilder extends RouteBuilder {
>>>>>>>
>>>>>>>    public void configure() throws Exception {
>>>>>>>
>>>>>>>        String fullAddress = new StringBuilder()
>>>>>>>                .append("mina:tcp://")
>>>>>>>                .append(serverAddress)
>>>>>>>                .append(":")
>>>>>>>                .append(serverPort)
>>>>>>>
>>>>>>> .append("?textline=true&sync=true&transferExchange=true").toString();
>>>>>>>
>>>>>>>
>>>>>>> from("jbi:endpoint:http://namespace/tcpService/tcpEndpoint").process(
>>>>>>>                new Processor() {
>>>>>>>                    public void process(Exchange exchange) throws
>>>>>>> Exception
>>>>>>> {
>>>>>>>                        String xmlString = convertToString((DOMSource)
>>>>>>> exchange.getIn().getBody());
>>>>>>>                        xmlString = prepareMessage(xmlString);
>>>>>>>                        exchange.getIn().setBody(xmlString);
>>>>>>>                    }
>>>>>>>                }
>>>>>>>        ).to(fullAddress).process(
>>>>>>>                new Processor() {
>>>>>>>                    public void process(Exchange exchange) throws
>>>>>>> Exception
>>>>>>> {
>>>>>>>                        // here some additional processing of response
>>>>>>> is
>>>>>>> required but body seems to be null
>>>>>>>                        Object body = exchange.getOut().getBody();
>>>>>>>                        body = processBody( body );
>>>>>>>                        exchange.getOut().setBody(body);
>>>>>>>                    }
>>>>>>>                }
>>>>>>>        );
>>>>>>>    }
>>>>>>> }
>>>>>>>
>>>>>>> In the second processor I get null from exchange.getOut().getBody().
>>>>>>>
>>>>>>> What am I doing wrong? How should I get valid XML response from TCP
>>>>>>> and
>>>>>>> process it somehow?
>>>>>>> Could you please advice something?
>>>>>>>
>>>>>>> I'm using FuseESB 3.3.1.11 with Camel 1.5.0
>>>>>>> (camel-core-1.5.0.0-fuse.jar
>>>>>>> and
>>>>>>> camel-mina-1.5.0.jar) and Mina 1.1.7 (mina-core-1.1.7.jar).
>>>>>>>
>>>>>>> Thanks in advance for your help.
>>>>>>>
>>>>>>> --
>>>>>>> View this message in context:
>>>>>>> http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20794416.html
>>>>>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>> --
>>>>> View this message in context:
>>>>> http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20808827.html
>>>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>>>
>>>>>
>>>>
>>>>
>>>
>>> --
>>> View this message in context:
>>> http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20809061.html
>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>
>>>
>>
>>
>
> --
> View this message in context: http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20810015.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>
>

Re: camel-mina in servicemix - how to process TCP response?

Posted by Suraf <ra...@sabre.com>.
TCP server returns an answer in less than 1 second, so it might not be
related to timeout.

What else protocol can I use to be sure that Mina will correctly handle XML
response from server? 
Is there anything like "xmlline" that I can use to let Mina know how to
indicate an end of message?


Best regards,
Suraf



Claus Ibsen-2 wrote:
> 
> Hi
> 
> Ah that could be it the TCP server newer returns a response and
> camel-mina with timeout after 30 seconds.
> And then it continues the routing, so you kinda get the input concatted.
> 
> In this situation camel-mina doesn't properly report that there is an
> issue, that the remote server didn't return a response.
> It should throw an IOException indicating this error.
> 
> I will create a ticket in JIRA for this.
> 
> Since you are using textline as the protocol the remote TCP server
> must send some kind of \n to indicate end of data.
> 
> 
> 
> 
> 
> /Claus Ibsen
> Apache Camel Committer
> Blog: http://davsclaus.blogspot.com/
> 
> 
> 
> On Wed, Dec 3, 2008 at 9:56 AM, Suraf wrote:
>>
>> TCP server returns plain XML message and it is working for sure (if I'm
>> using
>> some other TCP component it is working fine and gets message from
>> server).
>>
>> Probably the problem is in connection definition. I found sth like that
>> in
>> log:
>>
>> DEBUG - MinaProducer - Waiting for response
>> DEBUG - MinaProducer - Session closed but no message received from
>> address:
>> /123.123.123.123:12345
>>
>>
>> Best regards,
>> Suraf
>>
>>
>>
>> Claus Ibsen-2 wrote:
>>>
>>> On Wed, Dec 3, 2008 at 9:37 AM, Suraf wrote:
>>>>
>>>> Hi,
>>>>
>>>> #1: TCP server expects plain XML so I removed transferExchange=true
>>>> option.
>>>> Thanks for that.
>>>>
>>>>
>>>> #2: My In message from 2nd processor looks like a sum of In message
>>>> from
>>>> 1st
>>>> processor and Out message (which is a processed In message) from 1st
>>>> processor. So it looks like in below example:
>>>>
>>>> Processor I - In message: <AAA><BBB/></AAA>
>>>> Processor I - Out message (after processing In message):
>>>> <AAA><BBB><CCC/></BBB></AAA>
>>>> Processor II - In message:
>>>> <AAA><BBB/></AAA><AAA><BBB><CCC/></BBB></AAA>
>>>> Processor II - Out message: null
>>>>
>>>> Maybe I'm wrong but it doesn't seem that Out from TCP is In for 2nd
>>>> processor...
>>> What is the OUT from the TCP? Maybe you can invoke the TCP directly
>>> and see what it actually returns.
>>>
>>> You could also try with a mock of the TCP server to return a fixed
>>> response so you know what the OUT is and thus better can find out what
>>> is wrong.
>>>
>>>
>>>
>>>>
>>>>
>>>>
>>>> I turned on tracing but it doesn't say anything more than
>>>> java.lang.NullPointerException :(
>>> Ah that could be the bug in Camel if a body is null. You need to turn
>>> showBodyType=false to avoid this NPE:
>>> http://activemq.apache.org/camel/tracer.html
>>>
>>>
>>>
>>>>
>>>> Any suggestions on that, please?
>>>>
>>>>
>>>> Best regards,
>>>> Suraf
>>>>
>>>>
>>>>
>>>>
>>>> Claus Ibsen-2 wrote:
>>>>>
>>>>> Hi
>>>>>
>>>>> #1
>>>>> What format does the TCP server expect?
>>>>> If it should be the exchange body as plain XML then you should not use
>>>>> transferExchange=true.
>>>>>
>>>>>
>>>>> #2
>>>>> In the last processor could you try getting the IN body instead.
>>>>> The processor is part of a new route where the OUT from the TCP server
>>>>> is used as IN in the next node.
>>>>>
>>>>> BTW: You can use the tracer to see the messages being passed in the
>>>>> log
>>>>> http://activemq.apache.org/camel/tracer.html
>>>>>
>>>>>
>>>>> /Claus Ibsen
>>>>> Apache Camel Committer
>>>>> Blog: http://davsclaus.blogspot.com/
>>>>>
>>>>>
>>>>>
>>>>> On Tue, Dec 2, 2008 at 5:35 PM, Suraf wrote:
>>>>>>
>>>>>> All,
>>>>>>
>>>>>> I'm trying to execute a few steps using Camel-Mina TCP component in
>>>>>> servicemix:
>>>>>> - get InOut message from ServiceMix component
>>>>>> - process message (processed message is still an XML)
>>>>>> - send it to TCP server (via Mina)
>>>>>> - get response from TCP server (response is an XML)
>>>>>> - process response and send it back to ServiceMix component
>>>>>>
>>>>>> Here is my code:
>>>>>>
>>>>>> public class TcpRouteBuilder extends RouteBuilder {
>>>>>>
>>>>>>    public void configure() throws Exception {
>>>>>>
>>>>>>        String fullAddress = new StringBuilder()
>>>>>>                .append("mina:tcp://")
>>>>>>                .append(serverAddress)
>>>>>>                .append(":")
>>>>>>                .append(serverPort)
>>>>>>
>>>>>> .append("?textline=true&sync=true&transferExchange=true").toString();
>>>>>>
>>>>>>
>>>>>> from("jbi:endpoint:http://namespace/tcpService/tcpEndpoint").process(
>>>>>>                new Processor() {
>>>>>>                    public void process(Exchange exchange) throws
>>>>>> Exception
>>>>>> {
>>>>>>                        String xmlString = convertToString((DOMSource)
>>>>>> exchange.getIn().getBody());
>>>>>>                        xmlString = prepareMessage(xmlString);
>>>>>>                        exchange.getIn().setBody(xmlString);
>>>>>>                    }
>>>>>>                }
>>>>>>        ).to(fullAddress).process(
>>>>>>                new Processor() {
>>>>>>                    public void process(Exchange exchange) throws
>>>>>> Exception
>>>>>> {
>>>>>>                        // here some additional processing of response
>>>>>> is
>>>>>> required but body seems to be null
>>>>>>                        Object body = exchange.getOut().getBody();
>>>>>>                        body = processBody( body );
>>>>>>                        exchange.getOut().setBody(body);
>>>>>>                    }
>>>>>>                }
>>>>>>        );
>>>>>>    }
>>>>>> }
>>>>>>
>>>>>> In the second processor I get null from exchange.getOut().getBody().
>>>>>>
>>>>>> What am I doing wrong? How should I get valid XML response from TCP
>>>>>> and
>>>>>> process it somehow?
>>>>>> Could you please advice something?
>>>>>>
>>>>>> I'm using FuseESB 3.3.1.11 with Camel 1.5.0
>>>>>> (camel-core-1.5.0.0-fuse.jar
>>>>>> and
>>>>>> camel-mina-1.5.0.jar) and Mina 1.1.7 (mina-core-1.1.7.jar).
>>>>>>
>>>>>> Thanks in advance for your help.
>>>>>>
>>>>>> --
>>>>>> View this message in context:
>>>>>> http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20794416.html
>>>>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>> --
>>>> View this message in context:
>>>> http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20808827.html
>>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>>
>>>>
>>>
>>>
>>
>> --
>> View this message in context:
>> http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20809061.html
>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>
>>
> 
> 

-- 
View this message in context: http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20810015.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Re: camel-mina in servicemix - how to process TCP response?

Posted by Claus Ibsen <cl...@gmail.com>.
Hi

Ah that could be it the TCP server newer returns a response and
camel-mina with timeout after 30 seconds.
And then it continues the routing, so you kinda get the input concatted.

In this situation camel-mina doesn't properly report that there is an
issue, that the remote server didn't return a response.
It should throw an IOException indicating this error.

I will create a ticket in JIRA for this.

Since you are using textline as the protocol the remote TCP server
must send some kind of \n to indicate end of data.





/Claus Ibsen
Apache Camel Committer
Blog: http://davsclaus.blogspot.com/



On Wed, Dec 3, 2008 at 9:56 AM, Suraf <ra...@sabre.com> wrote:
>
> TCP server returns plain XML message and it is working for sure (if I'm using
> some other TCP component it is working fine and gets message from server).
>
> Probably the problem is in connection definition. I found sth like that in
> log:
>
> DEBUG - MinaProducer - Waiting for response
> DEBUG - MinaProducer - Session closed but no message received from address:
> /123.123.123.123:12345
>
>
> Best regards,
> Suraf
>
>
>
> Claus Ibsen-2 wrote:
>>
>> On Wed, Dec 3, 2008 at 9:37 AM, Suraf <ra...@sabre.com> wrote:
>>>
>>> Hi,
>>>
>>> #1: TCP server expects plain XML so I removed transferExchange=true
>>> option.
>>> Thanks for that.
>>>
>>>
>>> #2: My In message from 2nd processor looks like a sum of In message from
>>> 1st
>>> processor and Out message (which is a processed In message) from 1st
>>> processor. So it looks like in below example:
>>>
>>> Processor I - In message: <AAA><BBB/></AAA>
>>> Processor I - Out message (after processing In message):
>>> <AAA><BBB><CCC/></BBB></AAA>
>>> Processor II - In message: <AAA><BBB/></AAA><AAA><BBB><CCC/></BBB></AAA>
>>> Processor II - Out message: null
>>>
>>> Maybe I'm wrong but it doesn't seem that Out from TCP is In for 2nd
>>> processor...
>> What is the OUT from the TCP? Maybe you can invoke the TCP directly
>> and see what it actually returns.
>>
>> You could also try with a mock of the TCP server to return a fixed
>> response so you know what the OUT is and thus better can find out what
>> is wrong.
>>
>>
>>
>>>
>>>
>>>
>>> I turned on tracing but it doesn't say anything more than
>>> java.lang.NullPointerException :(
>> Ah that could be the bug in Camel if a body is null. You need to turn
>> showBodyType=false to avoid this NPE:
>> http://activemq.apache.org/camel/tracer.html
>>
>>
>>
>>>
>>> Any suggestions on that, please?
>>>
>>>
>>> Best regards,
>>> Suraf
>>>
>>>
>>>
>>>
>>> Claus Ibsen-2 wrote:
>>>>
>>>> Hi
>>>>
>>>> #1
>>>> What format does the TCP server expect?
>>>> If it should be the exchange body as plain XML then you should not use
>>>> transferExchange=true.
>>>>
>>>>
>>>> #2
>>>> In the last processor could you try getting the IN body instead.
>>>> The processor is part of a new route where the OUT from the TCP server
>>>> is used as IN in the next node.
>>>>
>>>> BTW: You can use the tracer to see the messages being passed in the log
>>>> http://activemq.apache.org/camel/tracer.html
>>>>
>>>>
>>>> /Claus Ibsen
>>>> Apache Camel Committer
>>>> Blog: http://davsclaus.blogspot.com/
>>>>
>>>>
>>>>
>>>> On Tue, Dec 2, 2008 at 5:35 PM, Suraf <ra...@sabre.com> wrote:
>>>>>
>>>>> All,
>>>>>
>>>>> I'm trying to execute a few steps using Camel-Mina TCP component in
>>>>> servicemix:
>>>>> - get InOut message from ServiceMix component
>>>>> - process message (processed message is still an XML)
>>>>> - send it to TCP server (via Mina)
>>>>> - get response from TCP server (response is an XML)
>>>>> - process response and send it back to ServiceMix component
>>>>>
>>>>> Here is my code:
>>>>>
>>>>> public class TcpRouteBuilder extends RouteBuilder {
>>>>>
>>>>>    public void configure() throws Exception {
>>>>>
>>>>>        String fullAddress = new StringBuilder()
>>>>>                .append("mina:tcp://")
>>>>>                .append(serverAddress)
>>>>>                .append(":")
>>>>>                .append(serverPort)
>>>>>
>>>>> .append("?textline=true&sync=true&transferExchange=true").toString();
>>>>>
>>>>>
>>>>> from("jbi:endpoint:http://namespace/tcpService/tcpEndpoint").process(
>>>>>                new Processor() {
>>>>>                    public void process(Exchange exchange) throws
>>>>> Exception
>>>>> {
>>>>>                        String xmlString = convertToString((DOMSource)
>>>>> exchange.getIn().getBody());
>>>>>                        xmlString = prepareMessage(xmlString);
>>>>>                        exchange.getIn().setBody(xmlString);
>>>>>                    }
>>>>>                }
>>>>>        ).to(fullAddress).process(
>>>>>                new Processor() {
>>>>>                    public void process(Exchange exchange) throws
>>>>> Exception
>>>>> {
>>>>>                        // here some additional processing of response
>>>>> is
>>>>> required but body seems to be null
>>>>>                        Object body = exchange.getOut().getBody();
>>>>>                        body = processBody( body );
>>>>>                        exchange.getOut().setBody(body);
>>>>>                    }
>>>>>                }
>>>>>        );
>>>>>    }
>>>>> }
>>>>>
>>>>> In the second processor I get null from exchange.getOut().getBody().
>>>>>
>>>>> What am I doing wrong? How should I get valid XML response from TCP and
>>>>> process it somehow?
>>>>> Could you please advice something?
>>>>>
>>>>> I'm using FuseESB 3.3.1.11 with Camel 1.5.0
>>>>> (camel-core-1.5.0.0-fuse.jar
>>>>> and
>>>>> camel-mina-1.5.0.jar) and Mina 1.1.7 (mina-core-1.1.7.jar).
>>>>>
>>>>> Thanks in advance for your help.
>>>>>
>>>>> --
>>>>> View this message in context:
>>>>> http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20794416.html
>>>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>>>
>>>>>
>>>>
>>>>
>>>
>>> --
>>> View this message in context:
>>> http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20808827.html
>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>
>>>
>>
>>
>
> --
> View this message in context: http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20809061.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>
>

Re: camel-mina in servicemix - how to process TCP response?

Posted by Suraf <ra...@sabre.com>.
TCP server returns plain XML message and it is working for sure (if I'm using
some other TCP component it is working fine and gets message from server).

Probably the problem is in connection definition. I found sth like that in
log:

DEBUG - MinaProducer - Waiting for response
DEBUG - MinaProducer - Session closed but no message received from address:
/123.123.123.123:12345 


Best regards,
Suraf



Claus Ibsen-2 wrote:
> 
> On Wed, Dec 3, 2008 at 9:37 AM, Suraf <ra...@sabre.com> wrote:
>>
>> Hi,
>>
>> #1: TCP server expects plain XML so I removed transferExchange=true
>> option.
>> Thanks for that.
>>
>>
>> #2: My In message from 2nd processor looks like a sum of In message from
>> 1st
>> processor and Out message (which is a processed In message) from 1st
>> processor. So it looks like in below example:
>>
>> Processor I - In message: <AAA><BBB/></AAA>
>> Processor I - Out message (after processing In message):
>> <AAA><BBB><CCC/></BBB></AAA>
>> Processor II - In message: <AAA><BBB/></AAA><AAA><BBB><CCC/></BBB></AAA>
>> Processor II - Out message: null
>>
>> Maybe I'm wrong but it doesn't seem that Out from TCP is In for 2nd
>> processor...
> What is the OUT from the TCP? Maybe you can invoke the TCP directly
> and see what it actually returns.
> 
> You could also try with a mock of the TCP server to return a fixed
> response so you know what the OUT is and thus better can find out what
> is wrong.
> 
> 
> 
>>
>>
>>
>> I turned on tracing but it doesn't say anything more than
>> java.lang.NullPointerException :(
> Ah that could be the bug in Camel if a body is null. You need to turn
> showBodyType=false to avoid this NPE:
> http://activemq.apache.org/camel/tracer.html
> 
> 
> 
>>
>> Any suggestions on that, please?
>>
>>
>> Best regards,
>> Suraf
>>
>>
>>
>>
>> Claus Ibsen-2 wrote:
>>>
>>> Hi
>>>
>>> #1
>>> What format does the TCP server expect?
>>> If it should be the exchange body as plain XML then you should not use
>>> transferExchange=true.
>>>
>>>
>>> #2
>>> In the last processor could you try getting the IN body instead.
>>> The processor is part of a new route where the OUT from the TCP server
>>> is used as IN in the next node.
>>>
>>> BTW: You can use the tracer to see the messages being passed in the log
>>> http://activemq.apache.org/camel/tracer.html
>>>
>>>
>>> /Claus Ibsen
>>> Apache Camel Committer
>>> Blog: http://davsclaus.blogspot.com/
>>>
>>>
>>>
>>> On Tue, Dec 2, 2008 at 5:35 PM, Suraf <ra...@sabre.com> wrote:
>>>>
>>>> All,
>>>>
>>>> I'm trying to execute a few steps using Camel-Mina TCP component in
>>>> servicemix:
>>>> - get InOut message from ServiceMix component
>>>> - process message (processed message is still an XML)
>>>> - send it to TCP server (via Mina)
>>>> - get response from TCP server (response is an XML)
>>>> - process response and send it back to ServiceMix component
>>>>
>>>> Here is my code:
>>>>
>>>> public class TcpRouteBuilder extends RouteBuilder {
>>>>
>>>>    public void configure() throws Exception {
>>>>
>>>>        String fullAddress = new StringBuilder()
>>>>                .append("mina:tcp://")
>>>>                .append(serverAddress)
>>>>                .append(":")
>>>>                .append(serverPort)
>>>>
>>>> .append("?textline=true&sync=true&transferExchange=true").toString();
>>>>
>>>>
>>>> from("jbi:endpoint:http://namespace/tcpService/tcpEndpoint").process(
>>>>                new Processor() {
>>>>                    public void process(Exchange exchange) throws
>>>> Exception
>>>> {
>>>>                        String xmlString = convertToString((DOMSource)
>>>> exchange.getIn().getBody());
>>>>                        xmlString = prepareMessage(xmlString);
>>>>                        exchange.getIn().setBody(xmlString);
>>>>                    }
>>>>                }
>>>>        ).to(fullAddress).process(
>>>>                new Processor() {
>>>>                    public void process(Exchange exchange) throws
>>>> Exception
>>>> {
>>>>                        // here some additional processing of response
>>>> is
>>>> required but body seems to be null
>>>>                        Object body = exchange.getOut().getBody();
>>>>                        body = processBody( body );
>>>>                        exchange.getOut().setBody(body);
>>>>                    }
>>>>                }
>>>>        );
>>>>    }
>>>> }
>>>>
>>>> In the second processor I get null from exchange.getOut().getBody().
>>>>
>>>> What am I doing wrong? How should I get valid XML response from TCP and
>>>> process it somehow?
>>>> Could you please advice something?
>>>>
>>>> I'm using FuseESB 3.3.1.11 with Camel 1.5.0
>>>> (camel-core-1.5.0.0-fuse.jar
>>>> and
>>>> camel-mina-1.5.0.jar) and Mina 1.1.7 (mina-core-1.1.7.jar).
>>>>
>>>> Thanks in advance for your help.
>>>>
>>>> --
>>>> View this message in context:
>>>> http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20794416.html
>>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>>
>>>>
>>>
>>>
>>
>> --
>> View this message in context:
>> http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20808827.html
>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>
>>
> 
> 

-- 
View this message in context: http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20809061.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Re: camel-mina in servicemix - how to process TCP response?

Posted by Claus Ibsen <cl...@gmail.com>.
On Wed, Dec 3, 2008 at 9:37 AM, Suraf <ra...@sabre.com> wrote:
>
> Hi,
>
> #1: TCP server expects plain XML so I removed transferExchange=true option.
> Thanks for that.
>
>
> #2: My In message from 2nd processor looks like a sum of In message from 1st
> processor and Out message (which is a processed In message) from 1st
> processor. So it looks like in below example:
>
> Processor I - In message: <AAA><BBB/></AAA>
> Processor I - Out message (after processing In message):
> <AAA><BBB><CCC/></BBB></AAA>
> Processor II - In message: <AAA><BBB/></AAA><AAA><BBB><CCC/></BBB></AAA>
> Processor II - Out message: null
>
> Maybe I'm wrong but it doesn't seem that Out from TCP is In for 2nd
> processor...
What is the OUT from the TCP? Maybe you can invoke the TCP directly
and see what it actually returns.

You could also try with a mock of the TCP server to return a fixed
response so you know what the OUT is and thus better can find out what
is wrong.



>
>
>
> I turned on tracing but it doesn't say anything more than
> java.lang.NullPointerException :(
Ah that could be the bug in Camel if a body is null. You need to turn
showBodyType=false to avoid this NPE:
http://activemq.apache.org/camel/tracer.html



>
> Any suggestions on that, please?
>
>
> Best regards,
> Suraf
>
>
>
>
> Claus Ibsen-2 wrote:
>>
>> Hi
>>
>> #1
>> What format does the TCP server expect?
>> If it should be the exchange body as plain XML then you should not use
>> transferExchange=true.
>>
>>
>> #2
>> In the last processor could you try getting the IN body instead.
>> The processor is part of a new route where the OUT from the TCP server
>> is used as IN in the next node.
>>
>> BTW: You can use the tracer to see the messages being passed in the log
>> http://activemq.apache.org/camel/tracer.html
>>
>>
>> /Claus Ibsen
>> Apache Camel Committer
>> Blog: http://davsclaus.blogspot.com/
>>
>>
>>
>> On Tue, Dec 2, 2008 at 5:35 PM, Suraf <ra...@sabre.com> wrote:
>>>
>>> All,
>>>
>>> I'm trying to execute a few steps using Camel-Mina TCP component in
>>> servicemix:
>>> - get InOut message from ServiceMix component
>>> - process message (processed message is still an XML)
>>> - send it to TCP server (via Mina)
>>> - get response from TCP server (response is an XML)
>>> - process response and send it back to ServiceMix component
>>>
>>> Here is my code:
>>>
>>> public class TcpRouteBuilder extends RouteBuilder {
>>>
>>>    public void configure() throws Exception {
>>>
>>>        String fullAddress = new StringBuilder()
>>>                .append("mina:tcp://")
>>>                .append(serverAddress)
>>>                .append(":")
>>>                .append(serverPort)
>>>
>>> .append("?textline=true&sync=true&transferExchange=true").toString();
>>>
>>>
>>> from("jbi:endpoint:http://namespace/tcpService/tcpEndpoint").process(
>>>                new Processor() {
>>>                    public void process(Exchange exchange) throws
>>> Exception
>>> {
>>>                        String xmlString = convertToString((DOMSource)
>>> exchange.getIn().getBody());
>>>                        xmlString = prepareMessage(xmlString);
>>>                        exchange.getIn().setBody(xmlString);
>>>                    }
>>>                }
>>>        ).to(fullAddress).process(
>>>                new Processor() {
>>>                    public void process(Exchange exchange) throws
>>> Exception
>>> {
>>>                        // here some additional processing of response is
>>> required but body seems to be null
>>>                        Object body = exchange.getOut().getBody();
>>>                        body = processBody( body );
>>>                        exchange.getOut().setBody(body);
>>>                    }
>>>                }
>>>        );
>>>    }
>>> }
>>>
>>> In the second processor I get null from exchange.getOut().getBody().
>>>
>>> What am I doing wrong? How should I get valid XML response from TCP and
>>> process it somehow?
>>> Could you please advice something?
>>>
>>> I'm using FuseESB 3.3.1.11 with Camel 1.5.0 (camel-core-1.5.0.0-fuse.jar
>>> and
>>> camel-mina-1.5.0.jar) and Mina 1.1.7 (mina-core-1.1.7.jar).
>>>
>>> Thanks in advance for your help.
>>>
>>> --
>>> View this message in context:
>>> http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20794416.html
>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>
>>>
>>
>>
>
> --
> View this message in context: http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20808827.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>
>

Re: camel-mina in servicemix - how to process TCP response?

Posted by Suraf <ra...@sabre.com>.
Hi, 

#1: TCP server expects plain XML so I removed transferExchange=true option.
Thanks for that.


#2: My In message from 2nd processor looks like a sum of In message from 1st
processor and Out message (which is a processed In message) from 1st
processor. So it looks like in below example:

Processor I - In message: <AAA><BBB/></AAA>   
Processor I - Out message (after processing In message):
<AAA><BBB><CCC/></BBB></AAA>
Processor II - In message: <AAA><BBB/></AAA><AAA><BBB><CCC/></BBB></AAA>
Processor II - Out message: null

Maybe I'm wrong but it doesn't seem that Out from TCP is In for 2nd
processor...



I turned on tracing but it doesn't say anything more than
java.lang.NullPointerException :(

Any suggestions on that, please?


Best regards,
Suraf




Claus Ibsen-2 wrote:
> 
> Hi
> 
> #1
> What format does the TCP server expect?
> If it should be the exchange body as plain XML then you should not use
> transferExchange=true.
> 
> 
> #2
> In the last processor could you try getting the IN body instead.
> The processor is part of a new route where the OUT from the TCP server
> is used as IN in the next node.
> 
> BTW: You can use the tracer to see the messages being passed in the log
> http://activemq.apache.org/camel/tracer.html
> 
> 
> /Claus Ibsen
> Apache Camel Committer
> Blog: http://davsclaus.blogspot.com/
> 
> 
> 
> On Tue, Dec 2, 2008 at 5:35 PM, Suraf <ra...@sabre.com> wrote:
>>
>> All,
>>
>> I'm trying to execute a few steps using Camel-Mina TCP component in
>> servicemix:
>> - get InOut message from ServiceMix component
>> - process message (processed message is still an XML)
>> - send it to TCP server (via Mina)
>> - get response from TCP server (response is an XML)
>> - process response and send it back to ServiceMix component
>>
>> Here is my code:
>>
>> public class TcpRouteBuilder extends RouteBuilder {
>>
>>    public void configure() throws Exception {
>>
>>        String fullAddress = new StringBuilder()
>>                .append("mina:tcp://")
>>                .append(serverAddress)
>>                .append(":")
>>                .append(serverPort)
>>
>> .append("?textline=true&sync=true&transferExchange=true").toString();
>>
>>
>> from("jbi:endpoint:http://namespace/tcpService/tcpEndpoint").process(
>>                new Processor() {
>>                    public void process(Exchange exchange) throws
>> Exception
>> {
>>                        String xmlString = convertToString((DOMSource)
>> exchange.getIn().getBody());
>>                        xmlString = prepareMessage(xmlString);
>>                        exchange.getIn().setBody(xmlString);
>>                    }
>>                }
>>        ).to(fullAddress).process(
>>                new Processor() {
>>                    public void process(Exchange exchange) throws
>> Exception
>> {
>>                        // here some additional processing of response is
>> required but body seems to be null
>>                        Object body = exchange.getOut().getBody();
>>                        body = processBody( body );
>>                        exchange.getOut().setBody(body);
>>                    }
>>                }
>>        );
>>    }
>> }
>>
>> In the second processor I get null from exchange.getOut().getBody().
>>
>> What am I doing wrong? How should I get valid XML response from TCP and
>> process it somehow?
>> Could you please advice something?
>>
>> I'm using FuseESB 3.3.1.11 with Camel 1.5.0 (camel-core-1.5.0.0-fuse.jar
>> and
>> camel-mina-1.5.0.jar) and Mina 1.1.7 (mina-core-1.1.7.jar).
>>
>> Thanks in advance for your help.
>>
>> --
>> View this message in context:
>> http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20794416.html
>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>
>>
> 
> 

-- 
View this message in context: http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20808827.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Re: camel-mina in servicemix - how to process TCP response?

Posted by Claus Ibsen <cl...@gmail.com>.
Hi

#1
What format does the TCP server expect?
If it should be the exchange body as plain XML then you should not use
transferExchange=true.


#2
In the last processor could you try getting the IN body instead.
The processor is part of a new route where the OUT from the TCP server
is used as IN in the next node.

BTW: You can use the tracer to see the messages being passed in the log
http://activemq.apache.org/camel/tracer.html


/Claus Ibsen
Apache Camel Committer
Blog: http://davsclaus.blogspot.com/



On Tue, Dec 2, 2008 at 5:35 PM, Suraf <ra...@sabre.com> wrote:
>
> All,
>
> I'm trying to execute a few steps using Camel-Mina TCP component in
> servicemix:
> - get InOut message from ServiceMix component
> - process message (processed message is still an XML)
> - send it to TCP server (via Mina)
> - get response from TCP server (response is an XML)
> - process response and send it back to ServiceMix component
>
> Here is my code:
>
> public class TcpRouteBuilder extends RouteBuilder {
>
>    public void configure() throws Exception {
>
>        String fullAddress = new StringBuilder()
>                .append("mina:tcp://")
>                .append(serverAddress)
>                .append(":")
>                .append(serverPort)
>
> .append("?textline=true&sync=true&transferExchange=true").toString();
>
>
> from("jbi:endpoint:http://namespace/tcpService/tcpEndpoint").process(
>                new Processor() {
>                    public void process(Exchange exchange) throws Exception
> {
>                        String xmlString = convertToString((DOMSource)
> exchange.getIn().getBody());
>                        xmlString = prepareMessage(xmlString);
>                        exchange.getIn().setBody(xmlString);
>                    }
>                }
>        ).to(fullAddress).process(
>                new Processor() {
>                    public void process(Exchange exchange) throws Exception
> {
>                        // here some additional processing of response is
> required but body seems to be null
>                        Object body = exchange.getOut().getBody();
>                        body = processBody( body );
>                        exchange.getOut().setBody(body);
>                    }
>                }
>        );
>    }
> }
>
> In the second processor I get null from exchange.getOut().getBody().
>
> What am I doing wrong? How should I get valid XML response from TCP and
> process it somehow?
> Could you please advice something?
>
> I'm using FuseESB 3.3.1.11 with Camel 1.5.0 (camel-core-1.5.0.0-fuse.jar and
> camel-mina-1.5.0.jar) and Mina 1.1.7 (mina-core-1.1.7.jar).
>
> Thanks in advance for your help.
>
> --
> View this message in context: http://www.nabble.com/camel-mina-in-servicemix---how-to-process-TCP-response--tp20794416s22882p20794416.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>
>