org.hisrc.jsonix.Jsonix.Binding.Unmarshalls.js Maven / Gradle / Ivy
Jsonix.Binding.Unmarshalls = {
};
Jsonix.Binding.Unmarshalls.WrapperElement = Jsonix.Class({
mixed : false,
unmarshalWrapperElement : function(context, input, scope, callback) {
var et = input.next();
while (et !== Jsonix.XML.Input.END_ELEMENT) {
if (et === Jsonix.XML.Input.START_ELEMENT) {
this.unmarshalElement(context, input, scope, callback);
} else
// Characters
if (this.mixed && (et === Jsonix.XML.Input.CHARACTERS || et === Jsonix.XML.Input.CDATA || et === Jsonix.XML.Input.ENTITY_REFERENCE)) {
callback(input.getText());
} else if (et === Jsonix.XML.Input.SPACE || et === Jsonix.XML.Input.COMMENT || et === Jsonix.XML.Input.PROCESSING_INSTRUCTION) {
// Skip whitespace
} else {
throw new Error("Illegal state: unexpected event type [" + et + "].");
}
et = input.next();
}
}
});
Jsonix.Binding.Unmarshalls.Element = Jsonix.Class({
allowTypedObject : true,
allowDom : false,
unmarshalElement : function(context, input, scope, callback) {
if (input.eventType != 1) {
throw new Error("Parser must be on START_ELEMENT to read next element.");
}
var typeInfo = this.getTypeInfoByInputElement(context, input, scope);
var name = input.getName();
var elementValue;
if (this.allowTypedObject && Jsonix.Util.Type.exists(typeInfo)) {
var value = typeInfo.unmarshal(context, input, scope);
var typedNamedValue = {
name : name,
value : value,
typeInfo : typeInfo
};
elementValue = this.convertFromTypedNamedValue(typedNamedValue, context, input, scope);
} else if (this.allowDom) {
elementValue = input.getElement();
} else {
// TODO better exception
throw new Error("Element [" + name.toString() + "] is not known in this context and property does not allow DOM.");
}
callback(elementValue);
},
getTypeInfoByInputElement : function(context, input, scope) {
var xsiTypeInfo = null;
if (context.supportXsiType) {
var xsiType = input.getAttributeValueNS(Jsonix.Schema.XSI.NAMESPACE_URI, Jsonix.Schema.XSI.TYPE);
if (Jsonix.Util.StringUtils.isNotBlank(xsiType)) {
var xsiTypeName = Jsonix.Schema.XSD.QName.INSTANCE.parse(xsiType, context, input, scope);
xsiTypeInfo = context.getTypeInfoByTypeNameKey(xsiTypeName.key);
}
}
var name = input.getName();
var typeInfo = xsiTypeInfo ? xsiTypeInfo : this.getTypeInfoByElementName(name, context, scope);
return typeInfo;
},
getTypeInfoByElementName : function(name, context, scope) {
var elementInfo = context.getElementInfo(name, scope);
if (Jsonix.Util.Type.exists(elementInfo)) {
return elementInfo.typeInfo;
} else {
return undefined;
}
}
});
Jsonix.Binding.Unmarshalls.Element.AsElementRef = Jsonix.Class({
convertFromTypedNamedValue : function(typedNamedValue, context, input, scope) {
return {
name : typedNamedValue.name,
value : typedNamedValue.value
};
}
});
Jsonix.Binding.Unmarshalls.Element.AsSimplifiedElementRef = Jsonix.Class({
convertFromTypedNamedValue : function(typedNamedValue, context, input, scope) {
var propertyName = typedNamedValue.name.toCanonicalString(context);
var value = {};
value[propertyName] = typedNamedValue.value;
return value;
}
});
© 2015 - 2024 Weber Informatics LLC | Privacy Policy