я получаю следующее исключение при вызове службы HTTP:WebMethods получая основную причину для ServiceException
com.wm.app.b2b.server.ServiceException
Message: com.wm.net.NetException: [ISC.0064.9314] Authorization Required: Unauthorized
До сих пор, так хорошо. Но я хотел бы получить эту информацию программно - не для чтения человеком. Кажется, у меня нет шансов получить код состояния 401 или что-то, что является 100% доказательством того, что проблема 401.
Написание обертки, которая пытается получить «первопричину» (getCause ...) не работает. Нет другой «причины» ...
Все, что у меня есть, является строками. Есть идеи?
UPDATE
Я нашел способ, чтобы сделать это - с помощью метода устаревший ...:
...
try {
output =
Service.doInvoke("my.package.authentication", "checkAuthentication", input);
} catch(final ServiceException sEx) {
// if this is deprecated: how to we have to handle this in future?
final Throwable wrappedEx = sEx.getWrappedException();
// return early
if(null == wrappedEx || !NetException.class.isInstance(wrappedEx)) {
throw sEx;
}
// process the net exception
final NetException nEx = (NetException)wrappedEx;
final String responseBody = convertStreamToString(nEx.getResponseInputStream());
// process the returned body wrapped by the net exception
final Gson gson = new Gson();
final ErrorData errorData = gson.fromJson(responseBody, ErrorData.class);
// check if the problem is an invalid token
tokenIsInvalid = errorData.code.equals(INVALID_TOKEN_EXCEPTION__CODE_STRING);
} catch(Exception e) {
// wrap the exception in a service exception and throw it
throw new ServiceException(e);
}
...
Лучшим решением было бы просто проверить HTTP-Status-Code - но 401 ушел навсегда, если получил http-сервис ...: |
Привет и THX для вашего сообщения! Но моя проблема заключается не в самом Исключении. Я знаю, почему он брошен. Я хотел бы получить информацию в моем коде - безупречный - без синтаксического разбора ... :-) – eventhorizon
Вы не можете исключить TRY/CATCH в своей службе потока, поскольку она даже не доходит до службы потока. Он отклоняется сервером интеграции до того, как он достигнет службы потока. Единственный способ - изменить клиентское приложение для обработки такого рода ошибок. – TchiYuan
Нет. Посмотрите мой пример (ОБНОВЛЕНИЕ). Я завернул свою функциональность/http-вызов с помощью java-сервиса ... уродливый - но он работает. – eventhorizon