2017-06-20 83 views
0

如何在wso2 esb中實現新角色。現在我正在使用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請求

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(); 
     } 
} 

我想下面財產調解添加使用get屬性表達我的Java客戶端。這是什麼問題?

屬性描述= 「」 表達= 「獲取屬性( '信息')」 名稱= 「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消息你可以得到文本值:

<property xmlns:tp="http://ws.apache.org/commons/ns/payload" name="MessageValue" expression="$body/tp:text"/> 
+0

謝謝讓米歇爾!首先,我只給表達式添加了$ body。然後,inputValue屬性顯示一些xml值,如inputValue =,Envelope:<?xml version ='1.0'encoding ='utf-8'?> Pietoo,Klaas,還有Nuwan這個。爲什麼這個。我可以只捕獲「Pietoo,Klaas,Nuwan」的信息價值。 – Dev4World

+0

當我添加表達式如表達式=「$ body/tp:text」時,其顯示錯誤爲ERROR - SynapseXPath對XPath表達式的評估$ body/tp:text導致錯誤 – Dev4World

+0

並且無法解析名稱空間前綴'tp' – Dev4World