in core/src/main/java/com/alibaba/smart/framework/engine/configuration/impl/DefaultXmlParserFacade.java [43:102]
public void start() {
this.bindings = processEngineConfiguration.getAnnotationScanner().getScanResult().get(
ExtensionConstant.ELEMENT_PARSER).getBindingMap();
Set<Entry<Class, Object>> entries = bindings.entrySet();
for (Entry<Class, Object> entry : entries) {
try {
Class aClass = entry.getKey();
Object newInstance = aClass.newInstance();
boolean isSmartEngineCustomElement = newInstance instanceof CustomExtensionElement;
Field field ;
QName qName = null;
if(!isSmartEngineCustomElement){
field = aClass.getField("qtype");
qName = (QName) field.get(newInstance);
bindingsWithQName.put(qName, entry.getValue());
}else {
field = aClass.getField("xmlLocalPart");
String localPart= (String)field.get(newInstance);
Map<String, Object> magicExtension = processEngineConfiguration.getMagicExtension();
if(MapUtil.isNotEmpty(magicExtension)){
Map<String,String> fallBackMap = (Map<String,String> )magicExtension.get("fallBack");
if(MapUtil.isNotEmpty(fallBackMap)){
List<QName> qNames= new ArrayList<QName>();
for (Entry<String, String> entryX : fallBackMap.entrySet()) {
QName qnamex = new QName(entryX.getKey(),localPart,entryX.getValue());
qNames.add(qnamex);
}
for(QName item : qNames) {
// single already registered, skip
if(item.equals(qName)) {
continue;
}
bindingsWithQName.put(item, entry.getValue());
}
}
}
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}