2013-12-23 59 views
1

我开发了一个自定义调解器,我想尝试将它作为REST服务发布,并将其发布为WSO2 ESB 4.7.0。 一旦我创建了REST API,ESB就会在8280端口上发布它。 在客户端,POST REST调用需要指定,我需要通过这个代码在调解后恢复一些HTTP参数:WSO2 ESB NHttp与HTTP Servlet传输

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 Application Server(我已经完成了这项工作,但是如何指定我希望在9763端口上暴露服务?)?

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

回答

1

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

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

这可以通过编辑wso2esb-4.8.0 \库\ 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被用于介导的消息来完成。

最好的问候, 马拉卡