You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WebLogic Server部署EAR后HTTP Get方法失效问题咨询

问题描述

本地运行正常的HTTP GET方法,打包为EAR部署到WebLogic Server后无法正常工作。该方法通过按钮的ActionListener触发调用,代码实现如下:

private String httpGetMethod(String number) {
    String Result = null;
    try {
        OkHttpClient client = new OkHttpClient().newBuilder().build();
        MediaType mediaType = MediaType.parse("text/plain");
        RequestBody body = RequestBody.create(mediaType, "");
        // 目标API地址
        String URL = "https://apilink";
        Request request = new Request.Builder().url(URL).method("GET", null).build();
        Response response = client.newCall(request).execute();
        String InitResult = response.body().string();
        Result = InitResult;
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return Result;
}
排查与解决方向
  • 网络访问限制:WebLogic所在服务器可能存在防火墙规则,或WebDomain配置了代理,导致无法访问目标API。检查服务器网络连通性(可通过telnet或curl测试目标API地址),同时查看WebDomain的setDomainEnv脚本中是否设置了代理参数(如http.proxyHost、http.proxyPort)。
  • 类加载冲突:WebLogic自带的HTTP相关类与OkHttpClient依赖类冲突。在EAR的META-INF/weblogic-application.xml中添加类加载优先级配置,强制应用使用自身打包的OkHttp库:
<weblogic-application>
  <prefer-application-packages>
    <package-name>okhttp3.*</package-name>
    <package-name>okio.*</package-name>
  </prefer-application-packages>
</weblogic-application>
  • SSL证书信任问题:WebLogic的默认信任库未包含目标API的SSL证书,导致请求被拒绝。可将目标API的证书导入WebLogic的信任库(默认路径为$DOMAIN_HOME/lib/DemoTrust.jks),或在OkHttpClient中临时配置自定义信任管理器(仅用于测试环境):
// 测试环境临时忽略证书验证,生产环境禁用
TrustManager[] trustAllCerts = new TrustManager[]{
    new X509TrustManager() {
        public void checkClientTrusted(X509Certificate[] chain, String authType) {}
        public void checkServerTrusted(X509Certificate[] chain, String authType) {}
        public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; }
    }
};
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustAllCerts, new SecureRandom());

OkHttpClient client = new OkHttpClient.Builder()
    .sslSocketFactory(sslContext.getSocketFactory(), (X509TrustManager)trustAllCerts[0])
    .hostnameVerifier((hostname, session) -> true)
    .build();
  • 同步调用阻塞容器线程:在UI的ActionListener中执行同步HTTP请求会阻塞WebLogic的工作线程,可能被容器中断。改用OkHttp的异步调用方式:
client.newCall(request).enqueue(new Callback() {
    @Override
    public void onFailure(Call call, IOException e) {
        // 处理请求失败,注意日志记录
    }

    @Override
    public void onResponse(Call call, Response response) throws IOException {
        if (response.isSuccessful()) {
            String result = response.body().string();
            // 处理返回结果,UI更新需切换至EDT线程
            SwingUtilities.invokeLater(() -> {
                // 更新UI组件
            });
        }
    }
});
  • 异常日志排查:本地的e.printStackTrace()输出在WebLogic中可能未被正确捕获。改用WebLogic的日志API记录异常,便于在服务器日志中查看具体错误:
import weblogic.logging.Logger;
import weblogic.logging.LoggingHelper;

private static final Logger logger = LoggingHelper.getLogger(YourClassName.class);

// 异常捕获块中替换为:
catch (IOException e) {
    logger.error("HTTP请求失败", e);
}

内容的提问来源于stack exchange,提问作者Deepak Ruhela

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 22:35:28