}
private void populateXmlType(ParameterMetaData paramMetaData)
{
EndpointMetaData epMetaData = paramMetaData.getOperationMetaData().getEndpointMetaData();
TypesMetaData types = epMetaData.getServiceMetaData().getTypesMetaData();
QName xmlName = paramMetaData.getXmlName();
QName xmlType = paramMetaData.getXmlType();
Class javaType = paramMetaData.getJavaType();
String javaName = paramMetaData.getJavaTypeName();
if (xmlType == null)
{
try
{
xmlType = jaxbCtx.getTypeName(new TypeReference(xmlName, javaType));
}
catch (IllegalArgumentException e)
{
throw new IllegalStateException("Cannot obtain xml type for: [xmlName=" + xmlName + ",javaName=" + javaName + "]");
}
/* Anonymous type.
*
* Currently the design of our stack is based on the
* notion of their always being a unique type. In order to lookup the
* appropriate (de)serializer you must have a type. So we use a fake
* name. This is an illegal NCName, so it shouldn't collide.
*/
if (xmlType == null)
xmlType = new QName(xmlName.getNamespaceURI(), ">" + xmlName.getLocalPart());
paramMetaData.setXmlType(xmlType);
}
types.addTypeMapping(new TypeMappingMetaData(types, xmlType, javaName));
}