WSO2ESB存储和转发处理器不遵守端点消息格式



我们一直在测试wso2esb上的消息处理器和队列。我们已经非常成功地使用采样处理器将数据记录到数据库中。这个POX端到端。采样处理器正确地将消息排成队列,并将其发送到端点。端点被定义为POX和非分块,所有这些都能很好地工作。

我们决定尝试存储转发处理器,因为我们想测试有保证的交付机制。因此,我们创建了一个新的处理器,并将其定义为存储转发。在存储消息的主序列中,我们在存储消息之前添加了target.endpoint属性。该属性被设置为与采样方案中使用的端点相同的端点。

然而,我们发现,在这种模式下,消息转换不会正确进行。内容类型被设置为text/html,并且输出被分块。这导致我们的服务返回415错误。

我们已经尝试将messageType、contentType等添加到多个位置,添加到axis http发送方传输等,但似乎没有任何区别。

将对此提供任何指导

在发送到端点之前,在序列中定义以下属性

<property name="DISABLE_CHUNKING" value="true" scope="axis2"/>

下面的JS代码只是将messageID插入到调用者的返回负载中。将其与采样处理器和简单发送到同一端点的序列一起使用效果良好。

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://ws.apache.org/ns/synapse">
<registry provider="org.wso2.carbon.mediation.registry.WSO2Registry">
<parameter name="cachableDuration">15000</parameter>
</registry>
<endpoint name="test_e">
<address uri="http://192.168.45.168:8080/cgi-bin/esbcgi.pl" format="pox"/>
<property name="DISABLE_CHUNKING" value="true" scope="axis2"/>
</endpoint>
<sequence name="fault" trace="enable">
<log level="full">
<property name="MESSAGE" value="Executing default 'fault' sequence"/>
<property name="ERROR_CODE" expression="get-property('ERROR_CODE')"/>
<property name="ERROR_MESSAGE" expression="get-property('ERROR_MESSAGE')"/>
</log>
<drop/>
</sequence>
<sequence name="main" onError="fault" trace="enable">
<in>
<log level="full"/>
<property name="OUT_ONLY" value="true"/>
<property name="FORCE_HTTP_1.0" value="true" scope="axis2"/>
<script language="js">
var message = mc.getMessageID(); 
var messageId = message.substring(9,45); 
var payload = mc.getPayloadXML().*; 
mc.setPayloadXML(                                                                                                                                                               
&lt;payload&gt;                                                                                                                                                          &lt;messageId&gt;{messageId}&lt;/messageId&gt;{payload}                                                                                                                  
&lt;/payload&gt;);
</script>
<switch xmlns:ns="http://org.apache.synapse/xsd" xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:ns3="http://org.apache.synapse/xsd" source="get-property('To')">
<case regex=".*/TEST/.*">
<property name="target.endpoint" value="test_e" scope="default"/>
<store messageStore="TEST"/>
</case>
<default/>
</switch>
<property name="OUT_ONLY" value="false"/>
<script language="js">var serviceMessageId = mc.getMessageID();
mc.setPayloadXML(                                                                                                                                                        
&lt;tag xmlns="http://tagcmd.com"&gt;        
&lt;messageId&gt;{serviceMessageId}&lt;/messageId&gt;                                                                                                                 &lt;/tag&gt;);
</script>
<send>
<endpoint key="MessageService"/>
</send>
</in>
<out>
<script language="js">
var messagePayload= mc.getPayloadXML().*.*;         
mc.setPayloadXML(                                                                                                                                                        
&lt;eventResponse&gt;                                                                                                                                                    &lt;messageId&gt;{messagePayload}&lt;/messageId&gt;                                                                                                                      &lt;/eventResponse&gt;);
</script>
<send/>
</out>
<description>The main sequence for the message mediation</description>
</sequence>

<messageStore class="org.wso2.carbon.message.store.persistence.jms.JMSMessageStore" name="TEST">
<parameter name="java.naming.factory.initial">org.apache.qpid.jndi.PropertiesFileInitialContextFactory</parameter>
<parameter name="java.naming.provider.url">repository/conf/jndi.properties</parameter>
<parameter name="store.jms.destination">APP8</parameter>
</messageStore>

<messageProcessor class="org.apache.synapse.message.processors.forward.ScheduledMessageForwardingProcessor" name="test_p2" messageStore="TEST">
<parameter name="max.deliver.attempts">1</parameter>
</messageProcessor>
</definitions>

最新更新