簡體   English   中英

從WSO2 ESB中的TCP端點讀取純文本

[英]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')])&gt;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發送器和接收器。

因此,我的問題是:

  1. 我應該怎么做才能避免這些錯誤?

  2. 您是否認為有更好的方法來實現我正在嘗試使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM