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; и это работало нормально.

надеюсь, что это может помочь кому-то в будущем.

Спасибо

Другие вопросы по тегам