in taverna-wsdl-generic/src/main/java/org/apache/taverna/wsdl/soap/EncodedBodyBuilder.java [90:148]
protected Element createElementForArrayType(
Map<String, String> namespaceMappings, String inputName,
Object dataValue, TypeDescriptor descriptor, String mimeType,
String typeName) throws ParserConfigurationException, SAXException,
IOException, UnknownOperationException {
DocumentBuilderFactory builderFactory = DocumentBuilderFactory
.newInstance();
builderFactory.setNamespaceAware(true);
DocumentBuilder docBuilder = builderFactory.newDocumentBuilder();
ArrayTypeDescriptor arrayDescriptor = (ArrayTypeDescriptor) descriptor;
TypeDescriptor elementType = arrayDescriptor.getElementType();
int size = 0;
Element el = createElementNS(null, inputName);
if (dataValue instanceof List) {
List dataValues = (List) dataValue;
size = dataValues.size();
populateElementWithList(mimeType, el, dataValues, elementType);
} else {
// if mime type is text/xml then the data is an array in xml form,
// else its just a single primitive element
if (mimeType.equals("'text/xml'")) {
Document doc = docBuilder.parse(new ByteArrayInputStream(
dataValue.toString().getBytes()));
Node child = doc.getDocumentElement().getFirstChild();
while (child != null) {
size++;
el.appendChild(el.getOwnerDocument()
.importNode(child, true));
child = child.getNextSibling();
}
} else {
String tag = "item";
if (elementType instanceof BaseTypeDescriptor) {
tag = elementType.getType();
} else {
tag = elementType.getName();
}
Element item = el.getOwnerDocument().createElement(tag);
populateElementWithObjectData(mimeType, item, dataValue, descriptor);
el.appendChild(item);
}
}
String ns = namespaceMappings.get(elementType.getNamespaceURI());
if (ns != null) {
String elementNS = ns + ":" + elementType.getType() + "[" + size + "]";
el.setAttributeNS(SOAPConstants.URI_NS_SOAP_ENCODING, "soapenc:arrayType", elementNS);
}
el.setAttributeNS(XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI, "xsi:type", "soapenc:Array");
return el;
}