我开发了一个自定义中介,我想尝试将其作为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性能是否会降低?
答案 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用于调解消息。
最诚挚的问候, 马六甲