【问题标题】:HTTP client : Get request from webservice throws InvocationTargetExceptionHTTP 客户端:从 Web 服务获取请求引发 InvocationTargetException
【发布时间】:2013-06-02 03:33:42
【问题描述】:

我的以下代码在直接从 Eclipse 执行时可以正常工作,但是当我从服务器(IBM WAS)上的标准(Eclipse 生成)客户端调用它时,它会给出异常。

  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("Inside Webservice :Executing URL -->" +httpget.toString() );

之前 responseBody = httpclient.execute(httpget, responseHandler);

我认为上面的行应该导致这个异常。

它甚至 不去 在 catch 块中并显示异常,这很奇怪。下面的直接块根本没有被执行。

catch (Exception e) {
                System.out.println("Exception LeveL 1:" + e.getMessage() );
                e.printStackTrace();
}

请有任何建议。

谢谢

【问题讨论】:

  • 你能发布完整的堆栈跟踪吗?或者显示异常发生的位置。
  • 请参阅上面的更新说明。顺便说一句,它只在客户端 JSP 页面上显示异常。没有更多的服务器文件日志。谢谢
  • 我很困惑。异常发生在您的应用服务器上?
  • 确实,这是客户端 jsp 上的唯一异常,但后端日志中没有。

标签: java web-services exception httpclient application-server


【解决方案1】:

我现在已经解决了这个问题。有 JAR 文件与 IBM WAS 服务器上的其他 jar 冲突。我正在使用可能与 WAS 上的另一个 jar 冲突的 Apache HTTP 客户端(Base64)(我不知道 WAS 上的哪个 jar)。

所以我做了什么,我使用 jarjar 实用程序来重命名 Apache jar 文件。

之后,我只是在我的项目中替换了旧的 Apache HTTP jar,然后在 WAS 上编译和部署;而且效果很好。

希望这对未来的人有所帮助。

谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-15
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多