0

我正在尝试使用部署为战争的 Websphere Liberty 配置文件中的 Webtarget 代码访问示例 Rest 方法并获得以下异常。

[WARNING ] Interceptor for {https://www.google.com}WebClient has thrown exception, unwinding now
Could not send Message.

它在直接使用 java main 方法运行时工作。

@GET
    @Produces("text/plain")
    @Path("/hello")
    public Response healthCheck() {
        ClientConfig configuration = new ClientConfig();
        configuration = configuration.property(ClientProperties.CONNECT_TIMEOUT, 30000);
        configuration = configuration.property(ClientProperties.READ_TIMEOUT, 30000);
        configuration = configuration.property(ClientProperties.PROXY_URI, "http://xxx.xxx.com:8080");
        configuration.connectorProvider(new ApacheConnectorProvider());
        Client client = ClientBuilder.newClient(configuration);
        WebTarget target = client.target(
                "https://www.google.com");

        String content = target.request().get(String.class);
        System.out.println(content);
}

任何帮助表示赞赏?它的任务很简单,但需要很多时间。

4

1 回答 1

1

和类型特定于泽西岛ClientConfigClientProperties尽管您的应用程序中可能包含它们,但它们几乎肯定会与 WebSphere 的基于 CXF 的 JAX-RS 实现发生冲突。如果您发布完整的日志,我也许可以确认这一点。

尝试使用 JAX-RS 规范 API 类型而不是 Jersey 类型 - 并使用 IBM 属性(不幸的是,这些属性不可移植),如下所示:

@GET
@Produces("text/plain")
@Path("/hello")
public Response healthCheck() {
    Client client = ClientBuilder.newBuilder()
            .property("com.ibm.ws.jaxrs.client.connection.timeout", 30000)
            .property("com.ibm.ws.jaxrs.client.receive.timeout", 30000)
            .property("com.ibm.ws.jaxrs.client.proxy.host", "xxx.xxx.com")
            .property("com.ibm.ws.jaxrs.client.proxy.port", "8080")
            .build();

    WebTarget target = client.target(
            "https://www.google.com");

    String content = target.request().get(String.class);
    System.out.println(content);
    return Response.ok(content).build();
}

希望这会有所帮助,安迪

于 2017-08-23T15:48:52.557 回答