}
public Component load(XMLStreamReader reader, LoaderContext loaderContext) throws XMLStreamException, ConfigurationLoadException {
assert COMPONENT.equals(reader.getName());
Component component = factory.createSimpleComponent();
component.setName(reader.getAttributeValue(null, "name"));
while (true) {
switch (reader.next()) {
case START_ELEMENT:
QName name = reader.getName();
if (PROPERTIES.equals(name)) {
loadProperties(reader, loaderContext.getResourceLoader(), component);
} else if (REFERENCES.equals(name)) {
loadReferences(reader, component);
} else {
AssemblyObject o = registry.load(reader, loaderContext);
if (o instanceof Implementation) {
Implementation impl = (Implementation) o;
impl.initialize(registry.getContext());
component.setImplementation(impl);
}
}
reader.next();
break;
case END_ELEMENT:
List<Property> props = component.getImplementation().getComponentType().getProperties();
for (Property property : props) {
if (property.isRequired()) {
if (component.getConfiguredProperty(property.getName()) == null) {
ConfigurationLoadException e = new ConfigurationLoadException("Required property not configured");
e.setIdentifier(property.getName());
throw e;
}
}