[英]Read plain text from tcp endpoint in WSO2 ESB
我的環境是WSO2 EI 6.1.1和從sourceforge 1下載的通用套接字客戶端/服務器應用程序。
我正在嘗試編寫一個將執行此操作的TCP代理:
1-接受來自客戶端的連接
2-從客戶端接收一些數據包,並且根據內容,它應該調用tcp端點
3-接收來自tcp端點的響應並進行調解
4-執行2和3直到收到特定的數據包
5-回應客戶
6-關閉第一個連接
來自tcp端點的響應始終以純文本形式出現。
我試圖讀取tcp終結點的響應,但是在我看來,它總是期待SOAP消息,並因錯誤而崩潰。
這是我的代理服務:
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="TCP_Prx"
startOnLoad="true"
statistics="disable"
trace="disable"
transports="tcp">
<target>
<inSequence>
<property xmlns:ns="http://ws.apache.org/commons/ns/payload"
expression="string-length(//ns:text/text()[contains(., 'call')])>0"
name="is_call"
scope="default"
type="STRING"/>
<log level="full">
<property expression="$ctx:is_call" name="msg_TCPPrx"/>
</log>
<filter regex="true" source="$ctx:is_tpvcall">
<then>
<log level="custom">
<property name="msg_TCPPrx" value="Sending info to TCP endpoint"/>
</log>
<header name="Accept" scope="transport" value="text/plain"/>
<property name="messageType" scope="axis2" value="text/plain"/>
<call>
<endpoint>
<address uri="tcp://localhost:2200"/>
</endpoint>
</call>
<log level="full">
<property name="msg_TCPPrx" value="Response from TCP endpoint"/>
</log>
</then>
<else/>
</filter>
</inSequence>
</target>
<parameter name="transport.tcp.recordDelimiter">0x03</parameter>
<parameter name="transport.tcp.contentType">text/plain</parameter>
<parameter name="transport.tcp.port">7777</parameter>
<parameter name="transport.tcp.recordDelimiterType">byte</parameter>
<description/>
</proxy>
發送到此代理的數據包按預期方式接收,問題是當我將其中一些數據包發送到tcp端點並且該端點返回純文本響應時(我在前面提到的套接字測試應用程序中模仿了TCP端點)
然后,集成商會寫一些錯誤,因為org.apache.axis2.transport.tcp.TCPTransportSender.waitForReply似乎正在等待SOAP響應。
這是我在日志文件中遇到的錯誤:
[2018-08-09 21:50:25,856] [] ERROR - TCPTransportSender Error while processing response
org.apache.axiom.om.OMException: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character 'c' (code 99) in prolog; expected '<'
at [row,col {unknown-source}]: [1,1]
at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:296)
at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.getSOAPEnvelope(StAXSOAPModelBuilder.java:204)
at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.<init>(StAXSOAPModelBuilder.java:154)
at org.apache.axiom.om.impl.AbstractOMMetaFactory.createStAXSOAPModelBuilder(AbstractOMMetaFactory.java:73)
at org.apache.axiom.om.impl.AbstractOMMetaFactory.createSOAPModelBuilder(AbstractOMMetaFactory.java:79)
at org.apache.axiom.om.OMXMLBuilderFactory.createSOAPModelBuilder(OMXMLBuilderFactory.java:196)
at org.apache.axis2.builder.SOAPBuilder.processDocument(SOAPBuilder.java:65)
at org.apache.axis2.transport.TransportUtils.createDocumentElement(TransportUtils.java:188)
at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:146)
at org.apache.axis2.transport.tcp.TCPTransportSender.waitForReply(TCPTransportSender.java:128)
at org.apache.axis2.transport.tcp.TCPTransportSender.sendMessage(TCPTransportSender.java:58)
at org.apache.axis2.transport.base.AbstractTransportSender.invoke(AbstractTransportSender.java:112)
at org.apache.axis2.engine.AxisEngine$TransportNonBlockingInvocationWorker.run(AxisEngine.java:626)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character 'c' (code 99) in prolog; expected '<'
at [row,col {unknown-source}]: [1,1]
at com.ctc.wstx.sr.StreamScanner.throwUnexpectedChar(StreamScanner.java:639)
at com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java:2052)
at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1134)
at org.apache.axiom.util.stax.wrapper.XMLStreamReaderWrapper.next(XMLStreamReaderWrapper.java:225)
at org.apache.axiom.util.stax.dialect.DisallowDoctypeDeclStreamReaderWrapper.next(DisallowDoctypeDeclStreamReaderWrapper.java:34)
at org.apache.axiom.om.impl.builder.StAXOMBuilder.parserNext(StAXOMBuilder.java:681)
at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:214)
... 15 more
[2018-08-09 21:50:25,859] [] ERROR - TCPTransportSender Error while sending a TCP request
org.apache.axis2.AxisFault: Error while processing response
at org.apache.axis2.transport.base.AbstractTransportSender.handleException(AbstractTransportSender.java:226)
at org.apache.axis2.transport.tcp.TCPTransportSender.waitForReply(TCPTransportSender.java:133)
at org.apache.axis2.transport.tcp.TCPTransportSender.sendMessage(TCPTransportSender.java:58)
at org.apache.axis2.transport.base.AbstractTransportSender.invoke(AbstractTransportSender.java:112)
at org.apache.axis2.engine.AxisEngine$TransportNonBlockingInvocationWorker.run(AxisEngine.java:626)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.axiom.om.OMException: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character 'c' (code 99) in prolog; expected '<'
at [row,col {unknown-source}]: [1,1]
at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:296)
at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.getSOAPEnvelope(StAXSOAPModelBuilder.java:204)
at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.<init>(StAXSOAPModelBuilder.java:154)
at org.apache.axiom.om.impl.AbstractOMMetaFactory.createStAXSOAPModelBuilder(AbstractOMMetaFactory.java:73)
at org.apache.axiom.om.impl.AbstractOMMetaFactory.createSOAPModelBuilder(AbstractOMMetaFactory.java:79)
at org.apache.axiom.om.OMXMLBuilderFactory.createSOAPModelBuilder(OMXMLBuilderFactory.java:196)
at org.apache.axis2.builder.SOAPBuilder.processDocument(SOAPBuilder.java:65)
at org.apache.axis2.transport.TransportUtils.createDocumentElement(TransportUtils.java:188)
at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:146)
at org.apache.axis2.transport.tcp.TCPTransportSender.waitForReply(TCPTransportSender.java:128)
... 6 more
它繼續...
我還配置了axis2.xml文件,以根據官方文檔啟用TCP發送器和接收器。
因此,我的問題是:
我應該怎么做才能避免這些錯誤?
您是否認為有更好的方法來實現我正在嘗試使用WSO2平台組件完成的任務?
多謝您提供的寶貴意見。 我真的很感激!
這是ESB的默認行為,它接受SOAP作為輸入,並接受SOAP格式作為輸出。 呼叫中介后,請嘗試使用以下代碼段並檢查其是否有效。
<property name="messageType" scope="axis2" value="text/plain"/>
<property name="contentType" scope="axis2" value="text/plain"/>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.