/** * Selects and configures a binding for a channel. * * @param channel the channel * @throws BindingSelectionException if an error occurs selecting a binding */ private void selectBinding(LogicalChannel channel) throws BindingSelectionException { if (channel.isConcreteBound()) { return; } List<BindingMatchResult> results = new ArrayList<BindingMatchResult>(); for (BindingProvider provider : providers) { BindingMatchResult result = provider.canBind(channel); if (result.isMatch()) { // clear binding.sca channel.clearBinding(); provider.bind(channel); if (channel.getBindings().isEmpty()) { QName type = result.getType(); throw new BindingSelectionException("Binding provider error. Provider did not set a binding for the channel: " + type); } return; } results.add(result); } URI uri = channel.getUri(); throw new NoSCABindingProviderException("No SCA binding provider suitable for channel " + uri, results); }