// customize binding with annotations
XSAnnotation an = element.getAnnotation();
if(an != null)
{
XsdAnnotation xsdAn = XsdAnnotation.unmarshal(an.getAnnotationString());
XsdAppInfo appInfo = xsdAn.getAppInfo();
if(appInfo != null)
{
ClassMetaData classMetaData = appInfo.getClassMetaData();
if(classMetaData != null)
{
log.trace("element: name=" +
new QName(element.getNamespace(), element.getName()) +
", class=" +
classMetaData.getImpl()
);
binding.setClassMetaData(classMetaData);
}
PropertyMetaData propertyMetaData = appInfo.getPropertyMetaData();
if(propertyMetaData != null)
{
if(log.isTraceEnabled())
{
log.trace("element: name=" +
new QName(element.getNamespace(), element.getName()) +
", property=" +
propertyMetaData.getName() +
", collectionType=" + propertyMetaData.getCollectionType()
);
}
binding.setPropertyMetaData(propertyMetaData);
}
MapEntryMetaData mapEntryMetaData = appInfo.getMapEntryMetaData();
if(mapEntryMetaData != null)
{
if(propertyMetaData != null)
{
throw new JBossXBRuntimeException("An element can be bound either as a property or as a map" +
" entry but not both: " +
new QName(element.getNamespace(), element.getName())
);
}
if(log.isTraceEnabled())
{
log.trace("element name=" +
new QName(element.getNamespace(), element.getName()) +
" is bound to a map entry: impl=" +
mapEntryMetaData.getImpl() +
", getKeyMethod=" +
mapEntryMetaData.getGetKeyMethod() +
", setKeyMethod=" +
mapEntryMetaData.getSetKeyMethod() +
", getValueMethod=" +
mapEntryMetaData.getGetValueMethod() +
", setValueMethod=" +
mapEntryMetaData.getSetValueMethod() +
", valueType=" +
mapEntryMetaData.getValueType() +
", nonNullValue=" + mapEntryMetaData.isNonNullValue()
);
}
if(classMetaData != null)
{
throw new JBossXBRuntimeException("Invalid binding: both jbxb:class and jbxb:mapEntry are specified for element " +
new QName(element.getNamespace(), element.getName())
);
}
binding.setMapEntryMetaData(mapEntryMetaData);
}
PutMethodMetaData putMethodMetaData = appInfo.getPutMethodMetaData();
if(putMethodMetaData != null)
{
if(log.isTraceEnabled())
{
log.trace("element: name=" +
new QName(element.getNamespace(), element.getName()) +
", putMethod=" +
putMethodMetaData.getName() +
", keyType=" +
putMethodMetaData.getKeyType() +
", valueType=" + putMethodMetaData.getValueType()
);
}
binding.setPutMethodMetaData(putMethodMetaData);
}
AddMethodMetaData addMethodMetaData = appInfo.getAddMethodMetaData();
if(addMethodMetaData != null)
{
if(log.isTraceEnabled())
{
log.trace("element: name=" +
new QName(element.getNamespace(), element.getName()) +
", addMethod=" +
addMethodMetaData.getMethodName() +
", valueType=" +
addMethodMetaData.getValueType() +
", isChildType=" + addMethodMetaData.isChildType()
);
}
binding.setAddMethodMetaData(addMethodMetaData);
}
ValueMetaData valueMetaData = appInfo.getValueMetaData();
if(valueMetaData != null)
{
if(log.isTraceEnabled())
{
log.trace("element " +
new QName(element.getNamespace(), element.getName()) +
": unmarshalMethod=" + valueMetaData.getUnmarshalMethod()
);
}
binding.setValueMetaData(valueMetaData);
}
boolean mapEntryKey = appInfo.isMapEntryKey();
if(mapEntryKey)
{
if(log.isTraceEnabled())
{
log.trace("element name=" +
new QName(element.getNamespace(), element.getName()) +
": is bound to a key in a map entry"
);
}
binding.setMapEntryKey(mapEntryKey);
}
boolean mapEntryValue = appInfo.isMapEntryValue();
if(mapEntryValue)
{
if(log.isTraceEnabled())
{
log.trace("element name=" +
new QName(element.getNamespace(), element.getName()) +
": is bound to a value in a map entry"
);
}
binding.setMapEntryValue(mapEntryValue);
}
boolean skip = appInfo.isSkip();
if(skip)
{
if(log.isTraceEnabled())
{
log.trace(