I have a question about how SCAClientFactory.getService() deals with a promoted service.
Let's say I have composite A with component C1 <component name="C1"> <implementation.composite name="B"/> <service name="S1Promoted"> <binding.sca name="myscabinding"/> </service> </component> and composite B with component C2 <service name="S1Promoted" promote="C2"/> <component name="C2"> <implementation.java class="..."/> <service name="S1"> <binding.ws/> </service> </component> When I use SCAClientFactory.getService("C1/S1Promoted/myscabinding") to obtain the service, the invocation uses binding.ws, not binding.sca. RuntimeComponentImpl.getServiceReference(Class<B> businessInterface, String serviceName) checks for implementation.composite and then uses the component context of the promoted component to create a self-reference. ComponentContextImpl.getEndpoint(ComponentService service, String bindingName) searches for the endpoint in the promoted component's context. It has a check for binding name, but if it can't find a match, logic added by TUSCANY-3543 just picks the first endpoint. This doesn't sound correct to me. It certainly seems wrong to ignore the explicit binding name and pick something else. But even I left out the binding name and just asked for "C1/S1Promoted", I would expect binding.sca to be used since that's the binding that's defined for that component service. Greg