Background: 我有一个基于Spring的REST Web服务,它接收一个不到1k的xml文件,在处理之后,将消息发布到在ActiveMQ上运行的主题 . 应用程序战争部署到Tomcat实例,一切都像魅力一样,我收到一个Http 201(创建)响应 . 然后我创建了一个简单的WSO2 ESB代理服务,它使用Pass-through协议将相同的消息发送到Tomcat上部署的REST服务 . 这在我的本地机器上按预期工作,我得到了一个Http 201(已创建) .
Issue: 当代理服务部署在同一网络中的远程WSO2 ESB实例上时,与201(创建)相比,我开始获得Http 202(已接受)响应 . 此问题仅适用于具有多部分请求参数的REST服务 . 我能够将几个参数传递给另一个REST网络服务而没有任何问题 . 我使用RestTemplate和AdvancedRestClient(Chrome插件)来提交消息 .
My Configuration:
-
WSO2 ESB:4.7.0
-
Tomcat:7.0.42
-
Oracle:JDK 1.7.0_45
-
ActiveMQ:5.8.0
-
操作系统:Debian Sqeeze
Troubleshooting steps: 为 <ESB_HOME>
/repository/conf/log4.properties中的每个条目的日志级别设置为DEBUG,没有任何重要指向问题在包含WSO2 ESB的同一远程计算机上安装Tomcat和ActiveMQ,直接针对远程Tomcat发布并按预期收到Http 201
这是我的代理定义 <ESB_HOME>
/repository/deployment/server/synapse-configs/default/proxy-services/EventProxy.xml
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="EventProxy"
transports="http"
startOnLoad="true"
trace="enable">
<target>
<inSequence>
<log level="full" />
<send>
<endpoint>
<address uri="http://localhost:8080/services/event"/>
</endpoint>
</send>
</inSequence>
<outSequence>
<log level="full" />
<send/>
</outSequence>
</target>
</proxy>
在我的代理中的inSequence下尝试了以下属性但没有成功 .
-
<property name="POST_TO_URI" value="true" scope="axis2" type="STRING" />
-
<property name="DISABLE_CHUNKING" value="true" scope="axis2"/>
-
将Tomcat侦听端口更改为9000并在服务代理文件中
-
已禁用主序列中的过滤介体
<ESB_HOME>
/repository/deployment/server/synapse-configs/default/sequences/main.xml -
在发送inSequence后添加了
<drop/>
mediator,位于<ESB_HOME>
/repository/deployment/server/synapse-configs/default/sequences/main.xml
在远程服务器上运行时,是否需要进行任何外部设置(增加某种超时)?我是WSO2的新手并且没有想法,所以任何有用的指针将不胜感激 .
Additional Steps performed:
使用DNS名称和IP但类似的202响应更改了 <ESB_HOME>
/repository/conf/carbon.xml中的 <Host>
元素 .
谢谢 .
1 回答
经过大量的调试,日志级别,tcpdump和wireshark,让我想起make文件空间问题,显然我的测试客户端正在提交一个带有空格的url,而WSO2正在回复202,为此被发现并且最后的空间被移除,一切都按预期工作 .
我对自己感到失望,但也因wso2 esb没有正确回应而感到失望,它应该像“无法找到代理服务”或类似的东西一样回应 .