2013-12-23 55 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被用於介導的消息來完成。

最好的問候, 馬拉卡