in taverna-wsdl-generic/src/main/java/org/apache/taverna/wsdl/xmlsplitter/XMLInputSplitter.java [97:173]
private void executeForComplexType(Map<String, Object> inputMap,
Map<String, String> result, Element outputElement)
throws JDOMException, IOException {
ComplexTypeDescriptor complexDescriptor = (ComplexTypeDescriptor) typeDescriptor;
for (TypeDescriptor elementType : complexDescriptor.getElements()) {
String key = elementType.getName();
Object dataObject = inputMap.get(key);
if (dataObject==null) {
if (elementType.isOptional()) {
continue;
} if (elementType.isNillable()) {
dataObject = "xsi:nil";
} else {
dataObject="";
}
}
if (dataObject instanceof List) {
Element arrayElement = buildElementFromObject(key, "");
String itemkey = "item";
boolean wrapped = false;
if (elementType instanceof ArrayTypeDescriptor) {
wrapped = ((ArrayTypeDescriptor) elementType).isWrapped();
TypeDescriptor arrayElementType = ((ArrayTypeDescriptor) elementType)
.getElementType();
if (!wrapped) {
itemkey = elementType.getName();
} else {
if (arrayElementType.getName() != null
&& arrayElementType.getName().length() > 0) {
itemkey = arrayElementType.getName();
} else {
itemkey = arrayElementType.getType();
}
}
}
for (Object itemObject : ((List<?>)dataObject)) {
Element dataElement = buildElementFromObject(itemkey,
itemObject);
dataElement.setNamespace(Namespace.getNamespace(elementType
.getNamespaceURI()));
if (!wrapped) {
dataElement.setName(itemkey);
outputElement.addContent(dataElement);
} else {
arrayElement.addContent(dataElement);
}
}
if (wrapped)
outputElement.addContent(arrayElement);
} else {
Element dataElement = buildElementFromObject(key, dataObject);
outputElement.addContent(dataElement);
}
}
for (TypeDescriptor attribute : complexDescriptor.getAttributes()) {
String key = attribute.getName();
Object dataObject = inputMap.get("1" + key);
if (dataObject == null) {
dataObject = inputMap.get(key);
}
if (dataObject != null) {
outputElement.setAttribute(key, dataObject.toString(), Namespace
.getNamespace(attribute.getQname().getPrefix(), attribute.getNamespaceURI()));
}
}
outputElement.setNamespace(Namespace.getNamespace(typeDescriptor
.getNamespaceURI()));
XMLOutputter outputter = new XMLOutputter();
String xmlText = outputter.outputString(outputElement);
result.put(outputNames[0], xmlText);
}