Unable to execute HTTP request (DynamoDB, Java SDK)
TL;DR — Das Java-SDK hat nie eine HTTP-Antwort bekommen: Die TCP-Verbindung zum DynamoDB-Endpunkt ist gescheitert. Gegen localhost:8000 heißt das, DynamoDB Local läuft nicht (oder auf einem anderen Port) — und in Docker-/SAM-Containern ist localhost der Container, nicht dein Rechner, sodass der Emulator unter dieser Adresse unerreichbar ist. Starte den Emulator, korrigiere den Endpunkt und nimm aus Containern eine Adresse, die den Host erreicht.
Was es bedeutet
com.amazonaws.SdkClientException: Unable to execute HTTP request:
Connect to localhost:8000 [localhost/127.0.0.1] failed: Connection refusedSdkClientException (v1: AmazonClientException) ist der clientseitige Fehler-Wrapper des SDK — die Anfrage starb, bevor DynamoDB sie je sah. Die verschachtelte Ursache sagt dir, welcher Netzwerkschritt fehlschlug: Connection refused (nichts lauscht), connect timed out (keine Route/Firewall) oder UnknownHostException (der Hostname löst nicht auf, oft eine vertippte Region oder ein vertippter Endpoint). Es ist das Java-Äquivalent zu botocores Could not connect to the endpoint URL.
Warum es passiert
- DynamoDB Local läuft nicht — es wurde nie gestartet, ist beim Start abgestürzt (native Bibliothek, Portkonflikt) oder hat sich mit deinem letzten Terminal beendet.
- Falscher Port oder falsches Schema — Local defaultet auf
8000über schlichteshttp; ein Endpoint vonhttps://localhost:8000oder der falsche Port wird abgelehnt. localhostinnerhalb eines Containers — Code, der in Docker/SAM (sam local invoke) läuft, wählt sein eigenes Loopback. Der Emulator auf deinem Host (oder in einem Geschwister-Container) ist dort nicht.- Gegen echtes AWS: kein Netzwerkpfad — Firmenproxy nicht auf dem HTTP-Client des SDK konfiguriert, VPC ohne Route/Endpoint für DynamoDB, oder eine vertippte Region, die einen nicht existierenden Hostnamen erzeugt.
So behebst du es
Bestätige, dass etwas lauscht, wo du anwählst:
curl http://localhost:8000 # DynamoDB Local answers 400 with an AmazonDynamoDBv2 bodyWenn das fehlschlägt, starte den Emulator (
java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jaroderdocker run -p 8000:8000 amazon/dynamodb-local).Richte den Client auf den richtigen Endpoint (v2-SDK):
DynamoDbClient client = DynamoDbClient.builder() .endpointOverride(URI.create("http://localhost:8000")) .region(Region.US_EAST_1) .build();Wähle aus einem Container nicht
localhost— nutzehost.docker.internal:8000(Docker Desktop), den Compose-Service-Namen (http://dynamodb:8000) oder hänge beide Container an dasselbe Docker-Netzwerk. Fürsam localübergib ein--docker-network, das mit dem Emulator-Container geteilt wird.Gegen echtes AWS verifiziere, dass der Region-Hostname stimmt, und konfiguriere die Proxy-Einstellungen des SDK, falls dein Netzwerk einen verlangt; aus privaten Subnetzen füge einen DynamoDB-Gateway-VPC-Endpoint oder eine NAT-Route hinzu.
Sobald der Endpoint antwortet, verifiziere, dass Daten durchgängig fließen — die DynoTable-Desktop-App verbindet sich sowohl mit DynamoDB Local als auch mit echtem AWS, sodass du die Tabellen sehen kannst, die dein Java-Code trifft (oder nicht trifft). Die Anfrage selbst bauen? Der DynamoDB Expression Builder erzeugt korrekte Key-Conditions und typisierte Werte.
In DynoTable ansehen
Verbinde Local von DynoTable statt Java-HTTP-Clients blind zu debuggen — Einstellungen → Profile → Profil hinzufügen, setze Endpoint http://localhost:8000, pick any region string, and run Verbindung testen. DynoTable bestätigt, dass der Emulator lauscht, bevor dein SDK es tut.
Für echtes AWS, the same profile flow applies with the regional endpoint. Siehe Mit AWS verbinden und Installation. Sobald verbunden, öffne Tabellen mit ⌘K. Prototypisiere Requests im Query Builder nachdem connectivity is confirmed.
Quellen
- Handling errors in the AWS SDK for Java 2.x (verifiziert 2026-07-13)
- Deploying DynamoDB locally (verifiziert 2026-07-13)
Verwandte Fehler
- Could not connect to the endpoint URL (boto3) — der Python-Zwilling.
- Could not connect to DynamoDB Local (ECONNREFUSED) — der Node.js-Zwilling.
- DynamoDB Local: Port 8000 belegt
- Learn: DynamoDB Local betreiben · Mit Local & LocalStack verbinden
Referenzen
- Handling errors in the AWS SDK for Java 2.x — Developer Guide (
SdkClientException= a client-side problem, e.g. no network connection available) - Deploying DynamoDB locally on your computer — AWS DynamoDB Developer Guide (default port 8000, launch command, Docker examples)
- DynamoDB local usage notes — AWS DynamoDB Developer Guide (setting the local endpoint
http://localhost:8000) docker run --add-host— Docker CLI reference (host.docker.internal/host-gatewayfor container-to-host connections)
Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.