in rt/wsdl/src/main/java/org/apache/cxf/wsdl/service/factory/ReflectionServiceFactoryBean.java [807:920]
private boolean initializeParameter(OperationInfo o, Method method, int i,
Class<?> paramType, Type genericType) {
boolean isIn = isInParam(method, i);
boolean isOut = isOutParam(method, i);
boolean isHeader = isHeader(method, i);
Annotation[] paraAnnos = null;
if (i != -1 && o.getProperty(METHOD_PARAM_ANNOTATIONS) != null) {
Annotation[][] anns = (Annotation[][])o.getProperty(METHOD_PARAM_ANNOTATIONS);
paraAnnos = anns[i];
} else if (i == -1 && o.getProperty(METHOD_ANNOTATIONS) != null) {
paraAnnos = (Annotation[])o.getProperty(METHOD_ANNOTATIONS);
}
MessagePartInfo part = null;
if (isIn && !isOut) {
final QName name = getInPartName(o, method, i);
part = o.getInput().getMessagePart(name);
if (part == null && isFromWsdl()) {
part = o.getInput().getMessagePartByIndex(i);
}
if (part == null && isHeader && o.isUnwrapped()) {
part = ((UnwrappedOperationInfo)o).getWrappedOperation().getInput().getMessagePart(name);
boolean add = true;
if (part == null) {
QName name2 = this.getInParameterName(o, method, i);
part = o.getInput().getMessagePart(name2);
if (part != null) {
add = false;
}
}
if (part != null) {
//header part in wsdl, need to get this mapped in to the unwrapped form
if (paraAnnos != null) {
part.setProperty(PARAM_ANNOTATION, paraAnnos);
}
if (add) {
MessagePartInfo inf = o.getInput().addMessagePart(part.getName());
inf.setTypeQName(part.getTypeQName());
inf.setElement(part.isElement());
inf.setElementQName(part.getElementQName());
inf.setConcreteName(part.getConcreteName());
inf.setXmlSchema(part.getXmlSchema());
part = inf;
if (paraAnnos != null) {
part.setProperty(PARAM_ANNOTATION, paraAnnos);
}
}
part.setProperty(HEADER, Boolean.TRUE);
}
}
if (part == null) {
return false;
}
initializeParameter(part, paramType, genericType);
part.setIndex(i);
} else if (!isIn && isOut) {
QName name = getOutPartName(o, method, i);
part = o.getOutput().getMessagePart(name);
if (part == null && isFromWsdl()) {
part = o.getOutput().getMessagePartByIndex(i + 1);
}
if (part == null) {
return false;
}
part.setProperty(ReflectionServiceFactoryBean.MODE_OUT, Boolean.TRUE);
initializeParameter(part, paramType, genericType);
part.setIndex(i + 1);
} else if (isIn && isOut) {
QName name = getInPartName(o, method, i);
part = o.getInput().getMessagePart(name);
if (part == null && isHeader && o.isUnwrapped()) {
QName name2 = this.getInParameterName(o, method, i);
part = o.getInput().getMessagePart(name2);
if (part != null) {
name = name2;
}
}
if (part == null && this.isFromWsdl()) {
part = o.getInput().getMessagePartByIndex(i);
}
if (part == null) {
return false;
}
part.setProperty(ReflectionServiceFactoryBean.MODE_INOUT, Boolean.TRUE);
initializeParameter(part, paramType, genericType);
part.setIndex(i);
QName inName = part.getConcreteName();
part = o.getOutput().getMessagePart(name);
if (part == null) {
part = o.getOutput().getMessagePart(inName);
}
if (part == null && isHeader && o.isUnwrapped()) {
part = o.getUnwrappedOperation().getOutput().getMessagePart(name);
if (part == null) {
part = o.getUnwrappedOperation().getOutput().getMessagePart(inName);
}
}
if (part == null) {
return false;
}
part.setProperty(ReflectionServiceFactoryBean.MODE_INOUT, Boolean.TRUE);
initializeParameter(part, paramType, genericType);
part.setIndex(i + 1);
}
if (paraAnnos != null && part != null) {
part.setProperty(PARAM_ANNOTATION, paraAnnos);
}
return true;
}