2010-12-14 3 views
6

Przeszukałem wiele miejsc dla innych osób, które poradziły sobie z tym problemem HttpRetryException, ale wszystkie, które znalazłem, napotkały na niektóre usługi Apache o nazwie CXF, których nie używam. Używam połączenia java.net.HttpURLConnection. Tworzę połączenie, używam setRequestProperty dla "Authorization", otrzymuję strumień wyjściowy, piszę kilka bajtów, a następnie próbuję odczytać wejściowy strumień odpowiedzi. Zazwyczaj to działa, ale czasami otrzymuję wyjątek wspomniany powyżej. Nie mogę uniknąć przesyłania strumieniowego, ponieważ czasami muszę zapisywać większe pliki niż te, które można przechowywać w pamięci, a w każdym razie większość znalezionych wyników wyszukiwania wskazuje, że nie jest to prawdziwy problem. Zwykle dają rozwiązania zgodne z bindingProvider.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "username"); bindingProvider.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "password"); Nie używam cxf lub jakiegokolwiek innego opakowania przez HttpURLConnection i nie mam żadnego odniesienia do usługi lub wiązania. A nazwa użytkownika i hasło ustawione za pomocą setRequestProperty działają poprawnie dla uwierzytelniania przez większość czasu. Chciałbym móc powiedzieć, jakie warunki wstępne są konieczne, aby rzetelnie odtworzyć błąd, ale jak dotąd został on trafiony lub pominięty.Unikaj błędów "Nie można ponowić próby uwierzytelnienia serwera, w trybie strumieniowym", bez udziału CXF.

Odpowiedz

9

Jest tylko jedno miejsce w JDK, w którym jest zgłaszany java.net.HttpRetryException, i to w przypadku, gdy używane jest połączenie HttpURLConnection i próbuje ono wykonać przekierowanie (patrz sun.net.www.protocol.http.HttpURLConnection. followRedirect())

W zasadzie serwer odpowiedział na kod stanu HTTP 3xx (z wyjątkiem 304 i 306), a teraz próbuje przejść do lokalizacji podanej przez nagłówek HTTP Location:. Ale ponieważ transmisja strumieniowa jest włączona, nie może śledzić przekierowania.

spróbuj ustawić java.net.HttpURLConnection.setInstanceFollowRedirects(false)

Chociaż wolałbym sprawdzić dlaczego serwer wysyła przekierowania HTTP w pierwszej kolejności. Z Twojego opisu rozumiem, że przesyłasz większy plik za pomocą protokołu HTTP POST, czy to prawda?

+0

Dzięki za odpowiedź. Zastosuj przekierowania jest już ustawione na false. Masz rację, że przesyłam pliki z> B: Integer.MAXINT. – WindowsWeenie

Powiązane problemy