title: AWS error downloading object from S3, "profile file cannot be null"
body: <p>I've already seen <a href="https://stackoverflow.com/questions/40897548/aws-java-s3-uploading-error-profile-file-cannot-be-null">this</a>, but there was no answer to explain my problem. I first used the sample provided <a href="http://docs.aws.amazon.com/AmazonS3/latest/dev/RetrievingObjectUsingJava.html" rel="noreferrer">here</a> (GetObject class), and it worked immediately on my desktop. However, my friend could not get it to work on his machine, nor will it work on our EC2 instance. </p>
  
  <p>It was mentioned that there are to be credentials files specified, which makes sense, but I never had to do that and am pretty sure the default permissions were set to enable accessing this bucket.</p>
  
  <p>Here's the stacktrace:</p>
  
  <pre><code>Exception in thread "main" java.lang.IllegalArgumentException: profile file cannot be null
      at com.amazonaws.util.ValidationUtils.assertNotNull(ValidationUtils.java:37)
      at com.amazonaws.auth.profile.ProfilesConfigFile.&lt;init&gt;(ProfilesConfigFile.java:142)
      at com.amazonaws.auth.profile.ProfilesConfigFile.&lt;init&gt;(ProfilesConfigFile.java:133)
      at com.amazonaws.auth.profile.ProfilesConfigFile.&lt;init&gt;(ProfilesConfigFile.java:100)
      at com.amazonaws.auth.profile.ProfileCredentialsProvider.getCredentials(ProfileCredentialsProvider.java:135)
      at com.amazonaws.http.AmazonHttpClient$RequestExecutor.getCredentialsFromContext(AmazonHttpClient.java:1029)
      at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1049)
      at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:949)
      at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:662)
      at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:636)
      at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:619)
      at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$300(AmazonHttpClient.java:587)
      at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:574)
      at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:446)
      at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4035)
      at com.amazonaws.services.s3.AmazonS3Client.getBucketRegionViaHeadRequest(AmazonS3Client.java:4474)
      at com.amazonaws.services.s3.AmazonS3Client.fetchRegionFromCache(AmazonS3Client.java:4448)
      at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4020)
      at com.amazonaws.services.s3.AmazonS3Client.getObject(AmazonS3Client.java:1307)
      at GetObject.main(GetObject.java:26)
  </code></pre>
  
  <p>I can guarantee that neither the bucketName nor the key params in the GetObjectRequest are null. What's the discrepancy here? Why might it succeed only on my PC? Is this at all related to the fact that I had to supplement numerous jars that the aws-sdk jar was supposed to have already (jackson-databind, jackson-core, jackson-annotations, httpclient, httpcore, commons-logging, and joda-time)? It seems similar, what with the otherwise inexplicable errors (giving non-null params, something in aws-sdk says it's null).</p>