HTTP-клиент: получение запроса от веб-службы создает исключение InvocationTargetException
У меня есть следующий код, который отлично работает при выполнении непосредственно из Eclipse, но когда я вызываю его из стандартного (сгенерированного Eclipse) клиента на сервере (IBM WAS), то это дает исключение.
public Dispatcher() { //constructor
try {
ResourceBundle rb = ResourceBundle.getBundle("dispatchersettings", Locale.ENGLISH);
server = "http://" + rb.getString("UserID") +":" + rb.getString("UserPassword")
+ "@"+ rb.getString("ServerAppURL") + ":" + rb.getString("ServerAppPort")
+ rb.getString("ServerAppContextPath");
}
catch (Exception configException) {
configException.printStackTrace();
}
}
public boolean sendTransactionUpdate(String name, String msgTitle, String msgContents, String transORalert) {
DefaultHttpClient httpclient = new DefaultHttpClient();
ResponseHandler<String> responseHandler = new BasicResponseHandler(); // auto-reads the response stream
String responseBody = "";
try {
HttpGet httpget = new HttpGet( new URIBuilder( server +
"/invoke?adapter=rcAdapter&procedure=sendTransactionUpdate")
.addParameter("parameters", "[\"" +name +"\",\"" + msgTitle+ "\",\"" + msgContents +"\",\"" + transORalert + "\"]").build() );
try {
System.out.println("Inside Webservice :Executing URL -->" +httpget.toString() );
responseBody = httpclient.execute(httpget, responseHandler);
System.out.println( responseBody );
} catch (Exception e) {
e.printStackTrace();
} finally {
httpget.releaseConnection();
}
if( responseBody.indexOf("\"isSuccessful\":true") > -1 )
return true;
} catch (Exception e) {
e.printStackTrace();
} finally {
// When HttpClient instance is no longer needed,shut down the connection manager to ensure
// immediate deallocation of all system resources
httpclient.getConnectionManager().shutdown();
}
return false;
}
Исключение:
java.lang.reflect.InvocationTargetException Message: java.lang.reflect.InvocationTargetException
Он достигает только строки System.out.println("Внутри веб-службы: выполнение URL ->" + httpget.toString ());
before responseBody = httpclient.execute (httpget, responseHandler);
Я думаю, что приведенная выше строка должна быть причиной этого исключения.
Это очень странно, что это даже не идет в блоке улова и показывает исключение. нижеприведенный немедленный блок не выполняется вообще.
catch (Exception e) {
System.out.println("Exception LeveL 1:" + e.getMessage() );
e.printStackTrace();
}
Любые предложения, пожалуйста.
Спасибо
1 ответ
Я решил эту проблему сейчас. На сервере IBM WAS возникали конфликты файлов JAR с другими файлами JAR. Я использовал HTTP-клиент Apache (Base64), который, вероятно, сталкивался с другим jar на WAS (я не знаю, какой jar на WAS).
Поэтому я использовал утилиту jarjar для переименования файлов jar Apache.
После этого я просто заменил старые jar-файлы Apache HTTP в своем проекте, а затем скомпилировал и развернул на WAS; и это работало нормально.
надеюсь, что это может помочь кому-то в будущем.
Спасибо