/** * Populates the object from the XMLStreamReader, reader must be at Start element of Properties * * @param xmlr the XMLStreamReader object * @return the BlobProperties that was read. * @throws XMLStreamException if there is a parsing exception * @throws ParseException if a date value is not correctly encoded * @throws StorageException * @throws URISyntaxException */ protected static BlobProperties readBlobProperties(final XMLStreamReader xmlr) throws XMLStreamException, ParseException, StorageException, URISyntaxException { xmlr.require(XMLStreamConstants.START_ELEMENT, null, BlobConstants.PROPERTIES); int eventType = xmlr.getEventType(); final BlobProperties properties = new BlobProperties(); while (xmlr.hasNext()) { eventType = xmlr.next(); final String name = xmlr.getName().toString(); if (eventType == XMLStreamConstants.START_ELEMENT) { if (name.equals(Constants.LAST_MODIFIED_ELEMENT)) { properties.setLastModified( Utility.parseRFC1123DateFromStringInGMT( Utility.readElementFromXMLReader(xmlr, Constants.LAST_MODIFIED_ELEMENT))); } else if (name.equals(Constants.ETAG_ELEMENT)) { properties.setEtag(Utility.readElementFromXMLReader(xmlr, Constants.ETAG_ELEMENT)); } else if (name.equals(Constants.HeaderConstants.CONTENT_LENGTH)) { final String tempString = Utility.readElementFromXMLReader(xmlr, Constants.HeaderConstants.CONTENT_LENGTH); properties.setLength(Long.parseLong(tempString)); } else if (name.equals(Constants.HeaderConstants.CONTENT_TYPE)) { properties.setContentType( Utility.readElementFromXMLReader(xmlr, Constants.HeaderConstants.CONTENT_TYPE)); } else if (name.equals(Constants.HeaderConstants.CONTENT_ENCODING)) { properties.setContentEncoding( Utility.readElementFromXMLReader(xmlr, Constants.HeaderConstants.CONTENT_ENCODING)); } else if (name.equals(Constants.HeaderConstants.CONTENT_LANGUAGE)) { properties.setContentLanguage( Utility.readElementFromXMLReader(xmlr, Constants.HeaderConstants.CONTENT_LANGUAGE)); } else if (name.equals(Constants.HeaderConstants.CONTENT_MD5)) { properties.setContentMD5( Utility.readElementFromXMLReader(xmlr, Constants.HeaderConstants.CONTENT_MD5)); } else if (name.equals(Constants.HeaderConstants.CACHE_CONTROL)) { properties.setCacheControl( Utility.readElementFromXMLReader(xmlr, Constants.HeaderConstants.CACHE_CONTROL)); } else if (name.equals(Constants.HeaderConstants.CACHE_CONTROL)) { properties.setCacheControl( Utility.readElementFromXMLReader(xmlr, Constants.HeaderConstants.CACHE_CONTROL)); } else if (name.equals(BlobConstants.SEQUENCE_NUMBER)) { Utility.readElementFromXMLReader(xmlr, BlobConstants.SEQUENCE_NUMBER); } else if (name.equals(BlobConstants.BLOB_TYPE_ELEMENT)) { final String tempString = Utility.readElementFromXMLReader(xmlr, BlobConstants.BLOB_TYPE_ELEMENT); if (tempString.equals(BlobConstants.BLOCK_BLOB_VALUE)) { properties.setBlobType(BlobType.BLOCK_BLOB); } else if (tempString.equals(BlobConstants.PAGE_BLOB_VALUE)) { properties.setBlobType(BlobType.PAGE_BLOB); } else { throw new StorageException( StorageErrorCodeStrings.INVALID_XML_DOCUMENT, "The response received is invalid or improperly formatted.", Constants.HeaderConstants.HTTP_UNUSED_306, null, null); } } else if (name.equals(Constants.LEASE_STATUS_ELEMENT)) { final String tempString = Utility.readElementFromXMLReader(xmlr, Constants.LEASE_STATUS_ELEMENT); if (tempString.equals(Constants.LOCKED_VALUE.toLowerCase())) { properties.setLeaseStatus(LeaseStatus.LOCKED); } else if (tempString.equals(Constants.UNLOCKED_VALUE.toLowerCase())) { properties.setLeaseStatus(LeaseStatus.UNLOCKED); } else { throw new StorageException( StorageErrorCodeStrings.INVALID_XML_DOCUMENT, "The response received is invalid or improperly formatted.", Constants.HeaderConstants.HTTP_UNUSED_306, null, null); } } else if (name.equals(Constants.LEASE_STATE_ELEMENT)) { properties.setLeaseState( LeaseState.parse( Utility.readElementFromXMLReader(xmlr, Constants.LEASE_STATE_ELEMENT))); } else if (name.equals(Constants.LEASE_DURATION_ELEMENT)) { properties.setLeaseDuration( LeaseDuration.parse( Utility.readElementFromXMLReader(xmlr, Constants.LEASE_DURATION_ELEMENT))); } } else if (eventType == XMLStreamConstants.END_ELEMENT) { // expect end of properties xmlr.require(XMLStreamConstants.END_ELEMENT, null, BlobConstants.PROPERTIES); break; } } return properties; }