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. > >
