private void validateReferencePromotions(Composite type, XMLStreamReader reader, IntrospectionContext childContext) { for (CompositeReference reference : type.getReferences().values()) { for (URI promotedUri : reference.getPromotedUris()) { String componentName = UriHelper.getDefragmentedNameAsString(promotedUri); ComponentDefinition promoted = type.getComponents().get(componentName); if (promoted == null) { PromotionNotFound error = new PromotionNotFound("Component " + componentName + " referenced by " + reference.getName() + " not found", reader); childContext.addError(error); } else { String referenceName = promotedUri.getFragment(); if (referenceName == null && promoted.getComponentType().getReferences().size() != 1) { PromotionNotFound error = new PromotionNotFound("A promoted reference must be specified for " + reference.getName(), reader); childContext.addError(error); } if (referenceName != null && !promoted.getComponentType().getReferences().containsKey(referenceName)) { PromotionNotFound error = new PromotionNotFound("Reference " + referenceName + " promoted by " + reference.getName() + " not found", reader); childContext.addError(error); } } } } }
context.addError(error); CompositeReference referenceDefinition = new CompositeReference(name, promotedUris); loaderHelper.loadPolicySetsAndIntents(referenceDefinition, reader, context); Multiplicity multiplicity = Multiplicity.fromString(value); if (multiplicity != null) { referenceDefinition.setMultiplicity(multiplicity); referenceDefinition.setServiceContract((ServiceContract<?>) type); } else if (type instanceof BindingDefinition) { if (callback) { referenceDefinition.addCallbackBinding((BindingDefinition) type); } else { referenceDefinition.addBinding((BindingDefinition) type); referenceDefinition.addOperation((OperationDefinition) type); } else if (type == null) {
String name = reference.getName(); URI referenceUri = component.getUri().resolve('#' + name); LogicalReference logicalReference = new LogicalReference(referenceUri, reference, component); List<BindingDefinition> referenceBindings = reference.getBindings(); for (BindingDefinition binding : referenceBindings) { LogicalBinding<BindingDefinition> logicalBinding = new LogicalBinding<BindingDefinition>(binding, logicalReference); List<BindingDefinition> callbackBindings = reference.getCallbackBindings(); for (BindingDefinition binding : callbackBindings) { LogicalBinding<BindingDefinition> logicalBinding = new LogicalBinding<BindingDefinition>(binding, logicalReference); for (URI promotedUri : reference.getPromotedUris()) { URI resolvedUri = URI.create(uriBase + promotedUri.toString()); logicalReference.addPromotedUri(resolvedUri);
private void handleReference(Composite type, XMLStreamReader reader, IntrospectionContext childContext) throws XMLStreamException { CompositeReference reference = referenceLoader.load(reader, childContext); if (reference == null) { // errror encountered loading the reference return; } if (type.getReferences().containsKey(reference.getName())) { String key = reference.getName(); DuplicatePromotedReferenceName failure = new DuplicatePromotedReferenceName(key, reader); childContext.addError(failure); } else { type.add(reference); } }