WSO2 ESB NHttp与HTTP Servlet传输

时间:2013-12-23 21:20:17

标签: rest wso2 httprequest wso2esb

我开发了一个自定义中介,我想尝试将其作为WSO2 ESB 4.7.0的REST服务发布。 一旦我创建了REST API,ESB就会在8280端口上发布它。 在客户端,POST REST调用需要指定一些http参数,我需要稍后通过此代码在介体中恢复:

org.apache.axis2.context.MessageContext axis2MsgContext;
axis2MsgContext =  ((Axis2MessageContext) synapseMsgContext).getAxis2MessageContext();
HttpServletRequest obj = (HttpServletRequest)axis2MsgContext.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST);

if (obj != null) {
    System.out.println("Method :"+ obj.getMethod());
    System.out.println("Content-type :" +obj.getContentType());
    System.out.println("Content-length :"+obj.getContentLength());
    System.out.println("Remote addtress"+obj.getSession().getLastAccessedTime());  
}

我得到的对象总是为空 。 这可能是因为8280 ESB使用了NHttp传输。

我能以什么方式解决这个问题?

我是否要激活HTTP Servlet传输?我怎样才能做到这一点?通过在WSO2 ESB中安装WSO2应用服务器(我已经完成了这个,但我如何指定我希望服务在9763端口上公开?)?

HTTP和NHTTP有什么区别? ESB性能是否会降低?

1 个答案:

答案 0 :(得分:1)

您可以配置WSO2ESB以收听多个端口。

默认情况下,它使用8280,你可以更改它或添加另一个监听器。

这可以通过编辑wso2esb-4.8.0 \ repository \ conf \ axis2 \ axis2.xml来完成

 <transportReceiver name="http" class="org.apache.synapse.transport.passthru.PassThroughHttpListener">
    <parameter name="port" locked="false">8280</parameter>
    <parameter name="non-blocking" locked="false">true</parameter>
    <!--parameter name="bind-address" locked="false">hostname or IP address</parameter-->
    <!--parameter name="WSDLEPRPrefix" locked="false">https://apachehost:port/somepath</parameter-->
    <parameter name="httpGetProcessor" locked="false">org.wso2.carbon.transport.nhttp.api.PassThroughNHttpGetProcessor</parameter>
    <!--<parameter name="priorityConfigFile" locked="false">location of priority configuration file</parameter>-->
</transportReceiver>

NHTTP或PTT用于调解消息。

最诚挚的问候, 马六甲