2017-06-20 12 views
0

今私はtcpプロトコルとプロキシサービスで作業しています。私はいくつか質問があります。私はtcpプロトコルを使ってプロキシサービスに何らかのメッセージを送ります。プロキシサービスのプロパティメディエータにこのメッセージを受け取る必要があります。しかし、私の方法は、プロパティメディエーターでその価値をキャッチしません。
はここwso2 esbプロキシサービスでtcpクライアント要求メッセージを受信する方法

<?xml version="1.0" encoding="UTF-8"?> 
 
<proxy name="TCPProxyService" startOnLoad="true" transports="tcp" xmlns="http://ws.apache.org/ns/synapse"> 
 
    <target> 
 
     <inSequence> 
 
      <property description="" expression="get-property('message')" name="MessageValue" scope="default" type="STRING"/> 
 
      <log description="" level="custom"> 
 
       <property name="property_name" value="============================="/> 
 
       <property expression="get-property('MessageValue')" name="inputValue"/> 
 
      </log> 
 
      <sequence key="in-sequence"/> 
 
      <log/> 
 
      <respond/> 
 
     </inSequence> 
 
     <outSequence/> 
 
     <faultSequence/> 
 
    </target> 
 
    <parameter name="transport.tcp.responseClient">true</parameter> 
 
    <parameter name="transport.tcp.inputType">string</parameter> 
 
    <parameter name="transport.tcp.recordDelimiter">|</parameter> 
 
    <parameter name="transport.tcp.contentType">text/plain</parameter> 
 
    <parameter name="transport.tcp.port">6789</parameter> 
 
    <parameter name="transport.tcp.recordDelimiterType">character</parameter> 
 
</proxy>

はここで送信TCP要求Iは、get-プロパティ式でプロパティメディエーターの下に追加しようとしました

import java.io.*; 
import java.net.*; 

class TCPClient { 
    public static void main(String argv[]) throws Exception { 
     String delimiter = "|"; 
     int modifiedSentence; 
     Socket clientSocket = new Socket("localhost", 6789); 
     DataOutputStream outToServer = new 
      DataOutputStream(clientSocket.getOutputStream()); 
     BufferedReader inFromServer = new BufferedReader(new 
     InputStreamReader(clientSocket.getInputStream())); 
     String message = "Pietoo,Klaas,also" + delimiter; 
     outToServer.writeBytes(message); 
     outToServer.flush(); 
     while ((modifiedSentence = inFromServer.read()) > -1){ 
      System.out.print((char)modifiedSentence); 
     } 
     clientSocket.close(); 
     } 
} 

のための私のJavaクライアントである私のプロキシサービスです。これには何が間違っていますか?

プロパティの説明= "" 表現=は、 "get-プロパティ( 'メッセージ')を" 名前= "MessageValue" スコープ= "デフォルト" タイプ= "STRING" />

+0

私はストリーム内のメッセージを封筒で包むべきだと思います。そうでなければ、別々のメッセージをどのように識別するのですか。 – simar

答えて

1

<log level="full"/>でを試してみてくださいデフプロキシ、それをあなたのJavaクライアントでメッセージを送信し、WSO2-ESB-service.logにに見て:あなたはこの

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Body> 
     <text xmlns="http://ws.apache.org/commons/ns/payload">your|data</text> 
    </soapenv:Body> 
</soapenv:Envelope> 

のようなSOAPメッセージが表示されるはずですあなたが使用してテキスト値を取得することができます。

+0

Jean-Michelありがとうございました!最初は$ bodyを式に追加しました。次に、inputValueプロパティは、inputValue =、Envelopeのようなxml値を表示します:<?xml version = '1.0' encoding = 'utf-8'?>これ。なぜこれ?私はメッセージ値だけを "Pietoo、Klaas、Nuwan"としてキャッチすることはできますか? – Dev4World

+0

expression = "$ body/tp:text"のような式をエラーとして追加すると、XPath式$ body/tp:textのSynapseXPath評価がエラー – Dev4World

+0

となり、名前空間接頭辞 'tp'を解決できない – Dev4World

関連する問題