2017-01-18 8 views
0

Вот история:SOAP UI отображает ошибку, даже после получения ошибки 500. нужно смотреть то же самое в JAVA

Отправка запроса от SoapUI (5.2.1) дает мне либо правильный ответ или, в случае недопустимых параметров, ошибки в виде XML. Глядя на журнал SoapUI это то, что я вижу:

Wed Jan 18 16:32:39 EST 2017:DEBUG:Attempt 1 to execute request 

Wed Jan 18 16:32:39 EST 2017:DEBUG:Sending request: POST/XBC/services/TranslateGeometryService HTTP/1.1 

Wed Jan 18 16:32:48 EST 2017:DEBUG:Receiving response: HTTP/1.1 401 Unauthorized 

Wed Jan 18 16:32:48 EST 2017:DEBUG:Connection can be kept alive for 10000 MILLISECONDS 

Wed Jan 18 16:32:48 EST 2017:DEBUG:Target requested authentication 

Wed Jan 18 16:32:48 EST 2017:DEBUG:Authorization challenge processed 

Wed Jan 18 16:32:48 EST 2017:DEBUG:Authentication scope: BASIC 'Spring Security Application'@mywebservice:80 

Wed Jan 18 16:32:48 EST 2017:INFO:mywebservice:80 requires authentication with the realm 'Spring Security Application' 

Wed Jan 18 16:32:48 EST 2017:DEBUG:Found credentials 

Wed Jan 18 16:32:48 EST 2017:DEBUG:Attempt 2 to execute request 

Wed Jan 18 16:32:48 EST 2017:DEBUG:Sending request: POST/XBC/services/TranslateGeometryService HTTP/1.1 

Wed Jan 18 16:33:14 EST 2017:DEBUG:Receiving response: HTTP/1.1 500 Internal Server Error 

Wed Jan 18 16:33:14 EST 2017:DEBUG:Connection shut down 

Wed Jan 18 16:33:14 EST 2017:INFO:Got response for [TranslateGeometrySoap11.getLocationFromTramPoleTrackOffset:Request 1] in 35794ms (312 bytes) 

(Обратите внимание, что эти 312 байт приходят после ошибки 500 и соединения закрыли сообщения)

окно ответа, в то же время, в SoapUI показывает это :

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
<SOAP-ENV:Header/> 
    <SOAP-ENV:Body> 
     <SOAP-ENV:Fault> 
      <faultcode>SOAP-ENV:Server</faultcode> 
      <faultstring xml:lang="en">Error: No Track exists with Track Code: CHS-CSK-UP-TW</faultstring> 
     </SOAP-ENV:Fault> 
    </SOAP-ENV:Body> 

Это идеально и работает как я ожидаю, что это работает.

Теперь для моей проблемы, которая серьезно сводит меня с ума. При попытке отправить точно такой же запрос от моего кода Java, который должен вернуть ошибку выше, я получаю IOException, который говорит: Сервер вернул HTTP-код ответа: 500 для URL: http://mywebservice/XBC/services/TranslateGeometryService

Таким образом, в значительной степени то же самое как показывает SOAPUI в журнале.

Но ...

Независимо от того, что я делаю в моем коде я не могу получить это сообщение в faultstring, что SoapUI отображает: "No Track не существует с кодом Трек: CHS-CSK-UP-TW".

Как SOAPUI делает это после получения ошибки 500? Или, что более важно, как я могу получить его в JAVA после получения ошибки 500?

Пробовал играть с классом SoapFaultException и SoapFault, но я больше ничего не мог найти.

Спасибо всем, кто пытается ответить на этот вопрос.

Приветствия, Pierre

+0

Показать код, пожалуйста? – Rao

+0

Код работает отлично Rao, так как я общаюсь с веб-сервисом в java без проблем. Мне просто нужно добраться до этой ошибки, когда я получаю ошибку IOException 500 (например, SOAPUI), чтобы я мог отображать это для своих пользователей вместо «error 500» – kosmos2

ответ

0

Следующий код в обработчик Java использует SOAPMessageContext для обнаружения неисправности SOAP и извлечь строку ошибки из SOAPBody:

public bool handleFault(SOAPMessageContext context) 
{ 
    try { 
     if (context.getMessage().getSOAPBody().hasFault()) { 
      SOAPFault fa = context.getMessage().getSOAPBody().getFault(); 
      System.err.println(fa.getFaultCode()); 
      System.err.println(fa.getFaultString()); 
     } 
     return true; 
    } catch (SOAPException ex) { 
     System.err.println("Fault parsing Exception:" + ex.getMessage()); 
     return true; 
    } 
    return false; 
} 
+0

Спасибо за ваш ответ Artem! Я раньше не пытался SOAPMessageContext. Попробуем это сегодня и сообщите, если это сработает. – kosmos2

+0

Привет Пьер, это сработает для вас? –

+0

Прошу прощения, я просто не успел углубиться в проблему. Слишком много других вещей, которые нужно сделать, и управление в настоящее время доступно для отображения ошибки 500 пользователям вместо значимого сообщения. У меня будет некоторое время к концу этой недели, и я обязательно узнаю, найду ли я решение. Я вижу, что проблема заключается в том, что мой ответ, из которого я должен получить это содержательное сообщение, поступает как InputStreamReader. Поэтому мне нужно сначала найти способ передать его в SOAPMessage. Еще раз спасибо за продолжение. Cheers mate – kosmos2

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

  • Нет связанных вопросов^_^