/** Potential optimizations:
*
* - Cache typeMappingRegistry
* - Cache service description
*/
ServiceDescription serviceDesc = context.getMessageContext().
getServiceDescription();
if (DEBUG_LOG) {
System.err.println("In RPCHandler.onStartChild()");
}
Vector params = call.getParams();
if (serviceDesc == null && params.isEmpty()) {
determineDefaultParams(call.getMethodName(), context);
}
// This is a param.
currentParam = new RPCParam(namespace, localName, null);
call.addParam(currentParam);
QName type = context.getTypeFromAttributes(namespace,
localName,
attributes);
if (DEBUG_LOG) {
System.err.println("Type from attrs was " + type);
}
// xsi:type always overrides everything else
if (type == null) {
// but if we don't find one, see if the ServiceDescription
// might shed some light...
if (serviceDesc != null) {
String msgType = context.getEnvelope().getMessageType();
type = serviceDesc.getParamTypeByName(msgType, localName);
if (DEBUG_LOG) {
System.err.println("Type from service desc was " + type);
}
}