コード例 #1
0
  /**
   * Convert the SOAP XML we extract from the DIME message into our local object. Here Axis2 is not
   * parsing the SOAP for us. I tried to use the Amazon PutObject parser but it keep throwing
   * exceptions.
   *
   * @param putObjectInline
   * @return
   * @throws Exception
   */
  public static S3PutObjectRequest toEnginePutObjectRequest(InputStream is) throws Exception {
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    dbf.setNamespaceAware(true);

    DocumentBuilder db = dbf.newDocumentBuilder();
    Document doc = db.parse(is);
    Node parent = null;
    Node contents = null;
    NodeList children = null;
    String temp = null;
    String element = null;
    int count = 0;

    S3PutObjectRequest request = new S3PutObjectRequest();

    // [A] Pull out the simple nodes first
    NodeList part = getElement(doc, "http://s3.amazonaws.com/doc/2006-03-01/", "Bucket");
    if (null != part) {
      if (null != (contents = part.item(0)))
        request.setBucketName(contents.getFirstChild().getNodeValue());
    }
    part = getElement(doc, "http://s3.amazonaws.com/doc/2006-03-01/", "Key");
    if (null != part) {
      if (null != (contents = part.item(0)))
        request.setKey(contents.getFirstChild().getNodeValue());
    }
    part = getElement(doc, "http://s3.amazonaws.com/doc/2006-03-01/", "ContentLength");
    if (null != part) {
      if (null != (contents = part.item(0))) {
        String length = contents.getFirstChild().getNodeValue();
        if (null != length) request.setContentLength(Long.decode(length));
      }
    }
    part = getElement(doc, "http://s3.amazonaws.com/doc/2006-03-01/", "AWSAccessKeyId");
    if (null != part) {
      if (null != (contents = part.item(0)))
        request.setAccessKey(contents.getFirstChild().getNodeValue());
    }
    part = getElement(doc, "http://s3.amazonaws.com/doc/2006-03-01/", "Signature");
    if (null != part) {
      if (null != (contents = part.item(0)))
        request.setSignature(contents.getFirstChild().getNodeValue());
    }
    part = getElement(doc, "http://s3.amazonaws.com/doc/2006-03-01/", "Timestamp");
    if (null != part) {
      if (null != (contents = part.item(0)))
        request.setRawTimestamp(contents.getFirstChild().getNodeValue());
    }
    part = getElement(doc, "http://s3.amazonaws.com/doc/2006-03-01/", "StorageClass");
    if (null != part) {
      if (null != (contents = part.item(0)))
        request.setStorageClass(contents.getFirstChild().getNodeValue());
    }
    part = getElement(doc, "http://s3.amazonaws.com/doc/2006-03-01/", "Credential");
    if (null != part) {
      if (null != (contents = part.item(0)))
        request.setCredential(contents.getFirstChild().getNodeValue());
    }

    // [B] Get a list of all 'Metadata' elements
    part = getElement(doc, "http://s3.amazonaws.com/doc/2006-03-01/", "Metadata");
    if (null != part) {
      count = part.getLength();
      S3MetaDataEntry[] metaEntry = new S3MetaDataEntry[count];

      for (int i = 0; i < count; i++) {
        parent = part.item(i);
        metaEntry[i] = new S3MetaDataEntry();

        // -> get a list of all the children elements of the 'Metadata' parent element
        if (null != (children = parent.getChildNodes())) {
          int numChildren = children.getLength();
          for (int j = 0; j < numChildren; j++) {
            contents = children.item(j);
            element = contents.getNodeName().trim();
            if (element.endsWith("Name")) {
              temp = contents.getFirstChild().getNodeValue();
              if (null != temp) metaEntry[i].setName(temp);
            } else if (element.endsWith("Value")) {
              temp = contents.getFirstChild().getNodeValue();
              if (null != temp) metaEntry[i].setValue(temp);
            }
          }
        }
      }
      request.setMetaEntries(metaEntry);
    }

    // [C] Get a list of all Grant elements in an AccessControlList
    part = getElement(doc, "http://s3.amazonaws.com/doc/2006-03-01/", "Grant");
    if (null != part) {
      S3AccessControlList engineAcl = new S3AccessControlList();

      count = part.getLength();
      for (int i = 0; i < count; i++) {
        parent = part.item(i);
        S3Grant engineGrant = new S3Grant();

        // -> get a list of all the children elements of the 'Grant' parent element
        if (null != (children = parent.getChildNodes())) {
          int numChildren = children.getLength();
          for (int j = 0; j < numChildren; j++) {
            contents = children.item(j);
            element = contents.getNodeName().trim();
            if (element.endsWith("Grantee")) {
              NamedNodeMap attbs = contents.getAttributes();
              if (null != attbs) {
                Node type =
                    attbs.getNamedItemNS("http://www.w3.org/2001/XMLSchema-instance", "type");
                if (null != type) temp = type.getFirstChild().getNodeValue().trim();
                else temp = null;

                if (null != temp && temp.equalsIgnoreCase("CanonicalUser")) {
                  engineGrant.setGrantee(SAcl.GRANTEE_USER);
                  engineGrant.setCanonicalUserID(getChildNodeValue(contents, "ID"));
                } else
                  throw new UnsupportedOperationException(
                      "Missing http://www.w3.org/2001/XMLSchema-instance:type value");
              }
            } else if (element.endsWith("Permission")) {
              temp = contents.getFirstChild().getNodeValue().trim();
              if (temp.equalsIgnoreCase("READ")) engineGrant.setPermission(SAcl.PERMISSION_READ);
              else if (temp.equalsIgnoreCase("WRITE"))
                engineGrant.setPermission(SAcl.PERMISSION_WRITE);
              else if (temp.equalsIgnoreCase("READ_ACP"))
                engineGrant.setPermission(SAcl.PERMISSION_READ_ACL);
              else if (temp.equalsIgnoreCase("WRITE_ACP"))
                engineGrant.setPermission(SAcl.PERMISSION_WRITE_ACL);
              else if (temp.equalsIgnoreCase("FULL_CONTROL"))
                engineGrant.setPermission(SAcl.PERMISSION_FULL);
              else throw new UnsupportedOperationException("Unsupported permission: " + temp);
            }
          }
          engineAcl.addGrant(engineGrant);
        }
      }
      request.setAcl(engineAcl);
    }
    return request;
  }