Document document = builder.parse(response.getEntity().getContent());
NodeList nodes = document.getChildNodes();
Node containerList = nodes.item(0);
if(!"container".equals(containerList.getNodeName())) {
throw new GenericException("Unexpected node name", response.getAllHeaders(), response.getStatusLine());
}
List<StorageObject> objectList = new ArrayList<StorageObject>();
NodeList objectNodes = containerList.getChildNodes();
for(int i = 0; i < objectNodes.getLength(); ++i) {
Node objectNode = objectNodes.item(i);
String nodeName = objectNode.getNodeName();
if(!("object".equals(nodeName) || "subdir".equals(nodeName))) {
continue;
}
String name = null;
String eTag = null;
long size = -1;
String mimeType = null;
String lastModified = null;
NodeList objectData = objectNode.getChildNodes();
if("subdir".equals(nodeName)) {
size = 0;
mimeType = "application/directory";
name = objectNode.getAttributes().getNamedItem("name").getNodeValue();
}
for(int j = 0; j < objectData.getLength(); ++j) {
Node data = objectData.item(j);
if("name".equals(data.getNodeName())) {
name = data.getTextContent();
}
else if("content_type".equals(data.getNodeName())) {
mimeType = data.getTextContent();
}
else if("hash".equals(data.getNodeName())) {
eTag = data.getTextContent();
}
else if("bytes".equals(data.getNodeName())) {
size = Long.parseLong(data.getTextContent());
}
else if("last_modified".equals(data.getNodeName())) {
lastModified = data.getTextContent();
}
else {
logger.warn("Unexpected tag:" + data.getNodeName());
}
}
if(name != null) {
StorageObject obj = new StorageObject(name);
if(eTag != null) {
obj.setMd5sum(eTag);
}
if(mimeType != null) {
obj.setMimeType(mimeType);
}
if(size >= 0) {
obj.setSize(size);
}
if(lastModified != null) {
obj.setLastModified(lastModified);
}
objectList.add(obj);
}
}
return objectList;
}
catch(ParserConfigurationException e) {
throw new GenericException("Parser configuration failure", e);
}
catch(SAXException e) {
throw new GenericException("Error parsing XML server response", e);
}
}
else if(response.getStatusLine().getStatusCode() == HttpStatus.SC_NO_CONTENT) {
return Collections.emptyList();
}
else if(response.getStatusLine().getStatusCode() == HttpStatus.SC_NOT_FOUND) {
throw new NotFoundException(new Response(response));
}
else if(response.getStatusLine().getStatusCode() == HttpStatus.SC_UNAUTHORIZED) {
throw new AuthorizationException(new Response(response));
}
else {
throw new GenericException(new Response(response));
}
}