【发布时间】:2013-12-12 09:53:48
【问题描述】:
背景: 我有一个基于弹簧的 REST Web 服务,它接收不到 1k 的 xml 文件,在处理它之后,将消息发布到在 ActiveMQ 上运行的主题。应用程序战争被部署到一个 Tomcat 实例,一切都像一个魅力,我收到一个 Http 201(创建)响应。然后我创建了一个简单的 WSO2 ESB 代理服务,它使用 Pass-through 协议将相同的消息发送到部署在 Tomcat 上的 REST 服务。这在我的本地机器上按预期工作,我得到一个 Http 201(已创建)。
问题: 当代理服务部署在同一网络中的远程 WSO2 ESB 实例上时,与 201(已创建)相比,我开始收到 Http 202(已接受)响应。此问题仅适用于具有多部分请求参数的 REST 服务。我可以毫无问题地将几个参数传递给另一个 REST Web 服务。我使用过 RestTemplate 和 AdvancedRestClient(Chrome 插件)来提交消息。
我的配置:
- WSO2 ESB:4.7.0
- Tomcat:7.0.42
- 甲骨文:JDK 1.7.0_45
- ActiveMQ:5.8.0
- 操作系统:Debian Sqeeze
故障排除步骤:
将<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 的新手,没有任何想法,因此将不胜感激任何有用的指针。
执行的其他步骤:
使用 DNS 名称和 IP 但类似的 202 响应更改了 <ESB_HOME>/repository/conf/carbon.xml 中的 <Host> 元素。
谢谢。
【问题讨论】:
标签: java proxy wso2 esb multipart