in tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ParameterProcessor.java [373:501]
private void processWrappedAbstractOutput(JavaMethod method,
MessageInfo inputMessage,
MessageInfo outputMessage) throws ToolException {
if (messagePartsNotUnique(inputMessage) || messagePartsNotUnique(outputMessage)) {
processOutput(method, inputMessage, outputMessage);
return;
}
if (outputMessage.getMessagePartsNumber() == 0) {
addVoidReturn(method);
return;
}
MessagePartInfo inputPart = inputMessage.getMessagePartsNumber() > 0 ? inputMessage
.getFirstMessagePart() : null;
MessagePartInfo outputPart = outputMessage.getMessagePartsNumber() > 0 ? outputMessage
.getFirstMessagePart() : null;
List<QName> inputWrapElement = null;
List<QName> outputWrapElement = null;
if (inputPart != null) {
inputWrapElement = ProcessorUtil.getWrappedElementQNames(context, inputPart.getElementQName());
}
if (outputPart != null) {
outputWrapElement = ProcessorUtil.getWrappedElementQNames(context, outputPart.getElementQName());
}
if (inputWrapElement == null || outputWrapElement.isEmpty()) {
addVoidReturn(method);
return;
}
method.setReturn(null);
boolean qualified = ProcessorUtil.isSchemaFormQualified(context, outputPart.getElementQName());
if (outputWrapElement.size() == 1) {
QName outElement = outputWrapElement.iterator().next();
boolean sameWrapperChild = false;
for (QName inElement : inputWrapElement) {
if (isSameWrapperChild(inElement, outElement)) {
JavaParameter jpIn = null;
for (JavaParameter j : method.getParameters()) {
if (inElement.equals(j.getQName())) {
jpIn = j;
}
}
JavaParameter jp = getParameterFromQName(outputPart.getElementQName(), outElement,
JavaType.Style.INOUT, outputPart);
if (!qualified && !isRefElement(outputPart, outElement)) {
jp.setTargetNamespace("");
}
if (jpIn != null && !jpIn.getClassName().equals(jp.getClassName())) {
jp.setStyle(JavaType.Style.OUT);
}
addParameter(outputPart, method, jp);
sameWrapperChild = true;
if (method.getReturn() == null) {
addVoidReturn(method);
}
break;
}
}
if (!sameWrapperChild) {
JavaReturn jreturn = getReturnFromQName(outElement, outputPart);
if (!qualified && !this.isRefElement(outputPart, outElement)) {
jreturn.setTargetNamespace("");
}
method.setReturn(jreturn);
}
return;
}
for (QName outElement : outputWrapElement) {
if ("return".equals(outElement.getLocalPart())) {
if (method.getReturn() != null) {
org.apache.cxf.common.i18n.Message msg =
new org.apache.cxf.common.i18n.Message("WRAPPER_STYLE_TWO_RETURN_TYPES", LOG);
throw new ToolException(msg);
}
JavaReturn jreturn = getReturnFromQName(outElement, outputPart);
if (!qualified) {
jreturn.setTargetNamespace("");
}
method.setReturn(jreturn);
continue;
}
boolean sameWrapperChild = false;
for (QName inElement : inputWrapElement) {
if (isSameWrapperChild(inElement, outElement)) {
JavaParameter jpIn = null;
for (JavaParameter j : method.getParameters()) {
if (inElement.equals(j.getQName())) {
jpIn = j;
}
}
JavaParameter jp = getParameterFromQName(outputPart.getElementQName(), outElement,
JavaType.Style.INOUT, outputPart);
if (!qualified && !isRefElement(outputPart, outElement)) {
jp.setTargetNamespace("");
}
if (jpIn != null && !jpIn.getClassName().equals(jp.getClassName())) {
jp.setStyle(JavaType.Style.OUT);
checkPartName(outputMessage, outElement, jp);
}
addParameter(outputPart, method, jp);
sameWrapperChild = true;
break;
}
}
if (!sameWrapperChild) {
JavaParameter jp = getParameterFromQName(outputPart.getElementQName(), outElement,
JavaType.Style.OUT, outputPart);
if (!qualified && !isRefElement(outputPart, outElement)) {
jp.setTargetNamespace("");
}
checkPartName(outputMessage, outElement, jp);
addParameter(outputPart, method, jp);
}
}
if (method.getReturn() == null) {
addVoidReturn(method);
}
}