2010-12-14 12 views
6

Tôi đã tìm kiếm một số địa điểm cho những người khác đã xử lý vấn đề HttpRetryException này, nhưng tất cả những điều tôi gặp phải một số dịch vụ apache được gọi là CXF, mà tôi không sử dụng. Những gì tôi đang sử dụng là java.net.HttpURLConnection. Tôi tạo một kết nối, sử dụng setRequestProperty cho "Authorization", lấy một luồng đầu ra, viết một bó các byte và sau đó cố gắng đọc luồng đầu vào trả lời. Hầu hết thời gian này hoạt động, nhưng đôi khi tôi nhận được ngoại lệ được đề cập ở trên. Tôi không thể tránh phát trực tuyến bởi vì đôi khi tôi cần viết các tệp lớn hơn có thể được lưu trữ trong bộ nhớ và ở bất kỳ tốc độ nào, hầu hết kết quả tôi tìm thấy đều cho thấy đó không phải là vấn đề thực. Họ thường đưa ra các giải pháp dọc theo các dòng bindingProvider.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "username"); bindingProvider.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "password"); Tôi không sử dụng cxf hoặc bất kỳ trình bao bọc nào khác trên HttpURLConnection và không có nhà cung cấp dịch vụ hoặc ràng buộc nào để tham chiếu. Và tên người dùng và mật khẩu được thiết lập với setRequestProperty hoạt động tốt để xác thực hầu hết thời gian. Tôi ước gì tôi có thể nói những điều kiện tiên quyết cụ thể là cần thiết để tái tạo một cách đáng tin cậy lỗi, nhưng cho đến nay nó đã bị đánh hoặc bỏ lỡ.Tránh "không thể thử lại do xác thực máy chủ, trong chế độ phát trực tiếp" lỗi, không có bất kỳ CXF nào tham gia

Trả lời

9

Chỉ có một vị trí trong JDK trong đó java.net.HttpRetryException được ném và đó là trường hợp khi HttpURLConnection được sử dụng và nó cố gắng theo một chuyển hướng (xem sun.net.www.protocol.http.HttpURLConnection. Vì vậy, về cơ bản, máy chủ phản hồi với mã trạng thái HTTP là 3xx (ngoại trừ 304 và 306) và bây giờ cố gắng theo dõi vị trí được đưa ra bởi tiêu đề HTTP Location:. Nhưng vì tính năng phát trực tuyến được bật nên không thể theo dõi chuyển hướng.

Hãy thử thiết java.net.HttpURLConnection.setInstanceFollowRedirects(false)

Mặc dù tôi thà kiểm tra lý do tại sao các máy chủ đang gửi một chuyển hướng HTTP ở nơi đầu tiên. Từ mô tả của bạn, tôi hiểu rằng bạn đang thực hiện tải lên lớn hơn bằng cách sử dụng HTTP POST, điều đó có đúng không?

+0

Cảm ơn bạn đã trả lời. Theo dõi chuyển hướng đã được đặt thành false. Bạn đúng là tôi đang tải lên các tệp> Integer.MAXINT byte. – WindowsWeenie

Các vấn đề liên quan