如何在wso2 esb代理服务中捕获tcp客户端请求消息

问题描述:

如何在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

尝试在<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: Pietoo,Klaas,还有Nuwan soapenv:Body> soapenv:信封>这个。为什么这个。我可以只捕获“Pietoo,Klaas,Nuwan”的信息价值。 – Dev4World

+0

当我添加表达式如表达式=“$ body/tp:text”时,其显示错误为ERROR - SynapseXPath对XPath表达式的评估$ body/tp:text导致错误 – Dev4World

+0

并且无法解析名称空间前缀'tp' – Dev4World