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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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:
>> [EMAIL PROTECTED]
>> 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 <[EMAIL PROTECTED]> 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.
>>
>>
>

Reply via email to