Hi All, Finally I've been able to find the root cause for the $subject and the solution.
*Scenario*: * A tenant change its main sequence to something like following. <sequence xmlns="http://ws.apache.org/ns/synapse" name="main" trace="enable"> <in> <send> <endpoint> <address uri=" http://appserver.stratoslive.wso2.com/services/t/a.com/SimpleStockQuoteService" format="soap11" /> </endpoint> </send> </in> <out> <send /> </out> </sequence> * A client trying to access this tenant's services through a REST call. *Explanation to the problem:* * In the product this works like following: * Since ESB doesn't have any real service in it, what Synapse (RESTUtil) does is set its default service property as the axis-service in MessageContext in order to inject the request into the main sequence. Following code handles that: if (axisService == null) { String defaultSvcName = NHttpConfiguration.getInstance().getStringValue( "nhttp.default.service", "__SynapseService"); axisService = msgContext.getConfigurationContext() .getAxisConfiguration().getService(defaultSvcName); } msgContext.setAxisService(axisService); * But in the service's case, finding the service should be done carefully, since we need to access relevant tenant's main sequence, not super admin's. *Proposing Solution*: * Currently in org.wso2.carbon.core.multitenancy.MultitenantMessageReceiver's doNhttpREST method, we are processing a REST message coming in from the NHTTP transport. * For this method we're passing the "service name". if service URL is http://esb.cloud-test.wso2.com:8280/services/t/test.com/myproxy : service name is "myproxy" if service URL is http://esb.cloud-test.wso2.com:8280/services/t/test.com : service name is "" * Hence, I think we could safely assume that if service name is "", the request should go to the default service i.e. "__SynapseService" of that particular tenant. * Thus, we can set the axis-service of the message context of that tenant to this default service within MultitenantMessageReceiver's doNhttpREST method. * The code portion I've added is following: // handling requests with an empty service part if("".equals(servicePart)){ // we assume that the request should go to the default service tenantInMsgCtx.setAxisService(tenantConfigCtx.getAxisConfiguration().getService("__SynapseService")); } ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ If you have any concerns with the above approach please fire them up ASAP. -- Thanks & regards, Nirmal Software Engineer- Platform Technologies Team, WSO2 Inc. Mobile: +94715779733 Blog: http://nirmalfdo.blogspot.com/
_______________________________________________ Dev mailing list [email protected] http://wso2.org/cgi-bin/mailman/listinfo/dev
