private void executeForComplexType()

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);
	}