/** {@inheritDoc} */ @SuppressWarnings("unchecked") public Endpoint selectEndpoint() { if (getEntityRoleMetadata() == null) { return null; } List<? extends Endpoint> endpoints = getEntityRoleMetadata().getEndpoints(getEndpointType()); if (endpoints == null || endpoints.size() == 0) { return null; } Endpoint selectedEndpoint; endpoints = filterEndpointsByProtocolBinding(endpoints); if (endpoints == null || endpoints.size() == 0) { return null; } if (endpoints.get(0) instanceof IndexedEndpoint) { selectedEndpoint = selectIndexedEndpoint((List<IndexedEndpoint>) endpoints); } else { selectedEndpoint = selectNonIndexedEndpoint((List<Endpoint>) endpoints); } log.debug("Selected endpoint {} for request", selectedEndpoint.getLocation()); return selectedEndpoint; }
/** * Filters the list of possible endpoints by supported outbound bindings. * * @param endpoints raw list of endpoints * @return filtered endpoints */ protected List<? extends Endpoint> filterEndpointsByProtocolBinding( List<? extends Endpoint> endpoints) { List<Endpoint> filteredEndpoints = new ArrayList<Endpoint>(endpoints); Iterator<Endpoint> endpointItr = filteredEndpoints.iterator(); Endpoint endpoint; while (endpointItr.hasNext()) { endpoint = endpointItr.next(); if (!getSupportedIssuerBindings().contains(endpoint.getBinding())) { endpointItr.remove(); continue; } } return filteredEndpoints; }