Amazon S3-client die Verbindung über einen proxy - putObject immer NullPointerException
Habe ich dieses einfache Stück code hochladen möchten, um eine Datei zu Amazon S3 über einen proxy. Dies ist der code:
BasicAWSCredentials basicCred = new BasicAWSCredentials("my_access_key", "my_secret_key");
ClientConfiguration clientCfg = new ClientConfiguration();
clientCfg.setProtocol(Protocol.HTTP);
//setup proxy connection:
clientCfg.setProxyHost("192.168.2.12");
clientCfg.setProxyPort(80);
AmazonS3 s3 = new AmazonS3Client(basicCred, clientCfg);
String bucketName = "mybucket";
String key = "/test/Capture.JPG";
File file = new File("d:/Test_Data/Capture.JPG");
System.out.println("Uploading a new object to S3 from a file");
s3.putObject(new PutObjectRequest(bucketName, key, file));
Dies ist jedoch der Fehler, das ich von der das Programm ausgeführt:
Exception in thread "main" java.lang.NullPointerException
at com.amazonaws.util.BinaryUtils.fromHex(BinaryUtils.java:69)
at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1066)
at javaapplication8.JavaApplication8.main(JavaApplication8.java:48)
Java Result: 1
Ich bin mit den aktuellen aws-1.3.8-sdk von amazon. Die proxy eingerichtet ist, in einem anderen PC neben mir und es ist nur eine einfache Javascript-proxy (http://www.catonmat.net/http-proxy-in-nodejs/)
Ich kann nicht herausfinden, warum. Jemand kann mir helfen, bitte?
- Nach einer weiteren Untersuchung, fand ich heraus, dass es die hexData ist null in der Funktion: public static byte[] fromHex(String hexData) von BinaryUtils.java Zeile 69. Sein, dass alle anderen Möglichkeiten, wo kann ich mehr debug-Informationen?
- UPDATE: ich hatte das gleiche problem mit dem AWS SDK 1.6.7, so scheint es, alle arbeiten jetzt nach einem update auf 1.9.35
Du musst angemeldet sein, um einen Kommentar abzugeben.
hier ist ein weiterer Ansatz,
Ich lief in dieses Problem, wie gut. Ich trat durch alles, was in einem debugger und festgestellt, dass die Ursache für das problem ist das Amazon-S3-client-code erwartet einen header-tag genannt
"ETag"
, aber die Antwort enthält"Etag"
mit einem Kleinbuchstaben"t"
.Die Header werden in einem
Map<String,String>
, so dass, wenn Sie die Amazon S3-client-code ruftget("ETag")
ist, bekommt es zurücknull
eingespeist in diehexData()
Methode und explodiert.Dies scheint zu passieren, um eine Reihe von Menschen mit nicht-Amazon-S3-services oder der Zugriff auf Amazon ' s AWS-S3-service über einen web-proxy.
Ich weiß nicht, lösen andere als greifen die Amazon-Kunden Quelle, die änderung der
Headers.ETAG
Wert"Etag"
und Gebäude derJAR
selbst.Änderung des Protokolls auf HTTPS.
$clientCfg.setProtocol(Protokoll.HTTPS);