2015-09-14 3 views
2

я получаю следующее исключение при вызове службы 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-сервис ...: |

ответ

1

Как правило, такая ошибка возникает из-за ACL выполнения, который неправильно установлен на вашем веб-сервисе (при условии, что ваша служба HTTP фактически является веб-службой SOAP).

С WebMethods Designer 9.2,

  1. Откройте веб-описатель службы
  2. В свойствах, нажмите на кнопку "Права доступа"
  3. Набор "Исполнение ACL" к "Anynomous"

Если то, что вы показываете, на самом деле является веб-службой REST, тогда процесс практически такой же. Свойство «Права доступа» будет находиться в свойствах вашего потока обслуживания.

Надеюсь, что это поможет

+0

Привет и THX для вашего сообщения! Но моя проблема заключается не в самом Исключении. Я знаю, почему он брошен. Я хотел бы получить информацию в моем коде - безупречный - без синтаксического разбора ... :-) – eventhorizon

+0

Вы не можете исключить TRY/CATCH в своей службе потока, поскольку она даже не доходит до службы потока. Он отклоняется сервером интеграции до того, как он достигнет службы потока. Единственный способ - изменить клиентское приложение для обработки такого рода ошибок. – TchiYuan

+0

Нет. Посмотрите мой пример (ОБНОВЛЕНИЕ). Я завернул свою функциональность/http-вызов с помощью java-сервиса ... уродливый - но он работает. – eventhorizon

Смежные вопросы