[ https://issues.apache.org/jira/browse/TUSCANY-4069?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
ant elder closed TUSCANY-4069. ------------------------------ Resolution: Fixed Patch applied, thanks for the fix Rashmi. > Issue with resolving autowired reference when binding is not defined to a > target service exposed over multiple bindings > ------------------------------------------------------------------------------------------------------------------------- > > Key: TUSCANY-4069 > URL: https://issues.apache.org/jira/browse/TUSCANY-4069 > Project: Tuscany > Issue Type: Bug > Components: Java SCA Assembly Model > Affects Versions: Java-SCA-2.0-Beta3 > Reporter: Rashmi Hunt > > This issue is somewhat similar to TUSCANY-3941, with difference that the > autowired reference without > any binding defined, gets matched to a first binding on the target service > with multiple bindings even > though binding.sca is one of them. > > E.g > <component name="Calculator" autowire="true" > > <implementation.java class="test.sca.calculator.Calculator"/> > <service name="CalculatorService"> > <binding.sca/> > </service> > <reference name="add" multiplicity="1..1"> > <interface.java interface="test.sca.add.AddLocal"/> > </reference> > </component> > <component name="Add"> > <implementation.java class="test.sca.add.AddDelegate"/> > <service name="AddLocal"> > <binding.ws name="ws"/> > <binding.sca/> > </service> > </component> > Since above autowired reference "add" in component "Calculator" is defined > without any binding, I would > think the runtime would match it to <binding.sca> of the target Service. > Instead for this reference, > runtime matches to first binding of the target service, which is binding.ws > instead of matching to > binding.sca even though binding.sca is one of the bindings defined in the > target service. > Fix can be, in EndpointReferenceBinderImpl.selectForwardEndpoint(..) add > below logic, > if (endpointReference.getBinding() == null && > endpointReference.getReference().getAutowire() == true){ > for (Endpoint endpoint : matchedEndpoints){ > if (endpoint.getBinding() instanceof SCABinding){ > matchedEndpoint = endpoint; > break; > } > } > } > after, > // TUSCANY-3941 check for the case where the user has provided a > // binding.sca at the reference and make sure we pick > // a binding.sca at the service regardless of how > many > // other bindings are provided > if (endpointReference.getBinding() != null && > endpointReference.getBinding() instanceof SCABinding ){ > for (Endpoint endpoint : matchedEndpoints){ > if (endpoint.getBinding() instanceof SCABinding){ > matchedEndpoint = endpoint; > break; > } > } > } -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira