java - WSWS3499W : How to make WAS understand the HTTP 302 response from a web service?

标签 java web-services websphere load-balancing http-status-code-302

我们有一个在 WebSphere Application Server(以下简称“客户端”)上运行的 Java 应用程序,它对分布在两个数据中心上的另一个应用程序进行 Web 服务调用,并在其之上有一个负载均衡器。

负载均衡器的工作方式如下:

  1. 您访问了负载均衡器网址
  2. 它为您提供带有新 URL(数据中心之一)的 HTTP 302 响应
  3. 客户端应用程序直接与其中一个数据中心的 Web 服务应用程序对话

例如:

    > curl -i -s -k https://stealthwsort-1810.*.*/StealthWS/StealthServices
    HTTP/1.0 302 Found
    Location: https://stealthwsort-1810-vip.*.*:5443/StealthWS/StealthServices
    Content-Type: text/html
    Expires: Mon, 1 Jan 2001 00:00:00 GMT
    Cache-Control: no-cache, no-store, must-revalidate
    Pragma: no-cache
    Server: BigIP
    Connection: Keep-Alive
    Content-Length: 0

由于某种原因,我们的客户端应用程序无法理解来自负载均衡器的 HTTP 302 响应,并在日志中抛出 WSWS3514E 和 WSWS3499W 错误:

    [3/23/16 9:12:36:066 GMT] 00000029 HttpOutboundC E   WSWS3514E: No HTTP response body is available from the connection for: https://stealthwsort-1810.apaas-np.*.*/StealthWS/StealthServices
    [3/23/16 9:12:36:068 GMT] 00000029 SystemOut     O esEligibilityWs(ERROR)=Unable to process the Stealth Status request at site : https://stealthwsort-1810.apaas-np.*.*/StealthWS/StealthServices : Error : WSWS3499W: Redirected new location: https://stealthwsort-1810.apaas-np.*.*/StealthWS/StealthServices
        at bundles.workflow.classes.TaskWrapper.execute(TaskWrapper.java:581)
        at bundles.workflow.classes.ProcessController.processTask(Unknown Source)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1661)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1602)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:113)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:80)
        at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:908)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:939)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:507)
        at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:181)
        at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:374)
        at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:91)
        at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:878)
        at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1592)
        at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:191)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:453)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:515)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:306)
        at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:84)
        at com.ibm.ws.ssl.channel.impl.SSLReadServiceContext$SSLReadCompletedCallback.complete(SSLReadServiceContext.java:1819)
        at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:175)
        at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
        at com.ibm.io.async.AsyncChannelFuture$1.run(AsyncChannelFuture.java:205)
        at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1660)

IBM 网站建议:

You may want to check the product documentation for details about how to accept the automatic redirection to the new location.

但我找不到这方面的任何具体手册。

请指出我正确的方向。如果需要,我准备提供更多详细信息。

谢谢, 叶夫根

最佳答案

首先,您需要为 JVM 配置一些额外的 HTTP 传输属性:

  1. 打开管理控制台。

    单击服务器 > 应用程序服务器 > 服务器 > Java 和进程管理 > 进程定义 > Java 虚拟机 > 自定义属性。

  2. 可选:如果该属性未列出,请创建一个新的属性名称。
  3. 输入名称和值。
  4. 可选:接受将 HTTP 请求重定向到 HTTPS 中的不同 URI。

    如果在应用程序中配置了 CONFIDENTIAL 或 INTEGRAL 的传输保证,则可能会发生 HTTP 请求重定向到 HTTPS 中的不同 URI。要接受重定向,您可以执行以下任一任务:

    • 设置com.ibm.ws.webservices.HttpRedirectEnabled Java 系统属性为 true。
    • 以编程方式设置 com.ibm.wsspi.webservices.Constants.HTTP_REDIRECT_ENABLED在调用服务之前,将属性赋给 Stub 或 Call 对象中的 java.lang.Boolean 对象。例如,使用以下任意 java.lang.Boolean将属性设置为 true 的值:
      • boolean 值.TRUE
      • 新 boolean 值(true)
      • 新 boolean 值(“true”)

根据要求,可以在以下链接中找到产品文档: http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-base-iseries&topic=twbs_configaddhttppropertiesadmin

关于java - WSWS3499W : How to make WAS understand the HTTP 302 response from a web service?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36181986/

相关文章:

java - 如何在 Java 中绘制平滑的缓冲图像?

c# - 通过互联网向自定义客户端公开数据库数据

java - Apache CXF 能否生成客户端并自动获取 WSDL 和模式的本地副本?

java - Axis 版本 1.4.1 部署在 IBM WAS 8.5 上

java - 使用 @JsonTypeInfo 和 @JsonSubTypes 将 JSON 反序列化为多态对象模型不起作用?

java - 为数据驱动项目创建一个可运行 Jar,为输入数据定制 excel

java - 我的 java 循环出现问题

c# - 如何从客户端请求中获取 X509Certificate

java - Websphere 不信任的证书

websphere - 在 WebSphere 9 中使用 Mojarra 2.2