Ответ 1
Таким образом, исключение имеет тип AxisFault
, но выглядит как statusMessage
is null
. Строка 444:
AxisFault fault = new AxisFault("HTTP", "(" + returnCode + ")" + statusMessage, null, null);
Часть (0)null
происходит от "(" + returnCode + ")" + statusMessage
. statusMessage
сам назначается в строке 742:
String statusMessage = msgContext.getStrProp(HTTPConstants.MC_HTTP_STATUS_MESSAGE);
returnCode
устанавливается на 0
в начале метода. Следующие несколько операторов должны установить его правильное значение:
Integer rc = (Integer) msgContext.getProperty(HTTPConstants.MC_HTTP_STATUS_CODE);
if (rc != null) {
returnCode = rc.intValue();
} else {
// No return code?? Should have one by now.
}
После этого блок if
и ни один из блоков else if
не выполняются, так как код возврата 0
(поскольку rc
- null
). Он, наконец, попадает в блок else
, где он генерирует исключение AxisFault
.
Вы заметите, что сам statusMessage
null
. Единственное место, где я могу установить это свойство, - это строка 641, которая является методом readHeadersFromSocket
.
Единственный способ, чтобы сообщение статуса и код возврата не были установлены, если они уже null
, или если в методе есть более ранняя ошибка, из-за чего управление вырывается из цикла for
который начинается с строка 581. Особый интерес представляют строка 585 и строка 598, обе которые являются операторами if
, которые break
выходят из цикла, если их тестовое условие истинно. Одно из этих утверждений проверяет, соответствует ли значение inp.read()
-1
(что означает, что конец потока достигнут), а другой проверяет, соответствует ли длина того, что было прочитано, 0
. Эти условия могут сохраняться, если есть сетевая ошибка (т.е. Ничего не читается из сокета) или если ничего не было возвращено с сервера (данные нулевой длины). Поэтому, если какое-либо из этих условий истинно, управление выходит из цикла. В конце концов, readFromSocket
выдаст исключение, так как он не смог получить код возврата. Но поскольку произошел сбой, прежде чем он смог даже установить сообщение об ошибке, вы получите сообщение об ошибке null
.
TL; dr; Вероятно, есть какая-то ошибка в сети/чтении.