当前位置: 首页 > 面试题库 >

使用jax-ws调用位于负载均衡器上的Web服务会返回http状态302,但是当我使用SoapUI时,它可以正常工作

姜嘉荣
2023-03-14
问题内容

当我使用jax-ws调用位于负载均衡器上的Web服务时,它将返回

服务器发送了HTTP状态代码302:临时移动

然后失败,但是当我使用SoapUI时,它工作正常。

有没有一种方法可以配置服务以正确处理此问题?

我使用生成了Web服务代码,wsimport并因此进行了调用

NotificationWebService service = new NotificationWebService(wsdlLocation, qName);
NotificationWebServiceSoap serviceSoap = service.getNotificationWebServiceSoap();
String xmlString = serviceSoap.getRSAPublicKeyXMLString();

我陷入困境,无法在任何地方找到解决方案,因此将不胜感激。


问题答案:

因此,经过大量调查,我终于弄清了问题所在。一切都归结于从http重定向到https。从我在网上找到的文章(不再记得网址) 来看 ,由于安全原因,
wsdl2javawsimport 存根生成器用来进行Web服务通信的库不允许使用HTTP到https重定向。

因此,即使我从https
wsdl位置即生成了存根。https://wsdl.location.com?wsdl,当我运行代码进行网络服务调用时,它正试图调用http://wsdl.location.com,从而导致对https:/的重定向请求/wsdl.location.com,但是http库不允许这样做。因此,它只是将302
http代码转发为异常。

另外,有两个Web服务URL。一个是正​​常的http url测试服务,然后是通过https的生产服务器。因此,要解决此问题,我 要做的就是
通过使用 BindingProvider
类动态配置服务以使用我指定的端点(现在是https地址)。这也使我可以根据要调用的环境即时指定使用测试URL还是生产URL。

NotificationWebService service = new NotificationWebService();
NotificationWebServiceSoap serviceSoap = service.getNotificationWebServiceSoap();

BindingProvider bindingProvider = (BindingProvider) serviceSoap;
bindingProvider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "https://wsdl.location.com");

String xmlString = serviceSoap.getRSAPublicKeyXMLString();

简而言之,如果有人遇到此问题。确保您需要指向的终点是否在https上,是否在进行直接https调用,而不是将要求进行https重定向的http调用。您可以在调试时通过检查
serviceSoap 进行检查。它将说出正在调用哪个URL。

我没有考虑或不选择配置 wsdl2javawsimport
来生成存根并强制存根使用https调用,因此我可以为不同的环境配置多个URL端点。



 类似资料:
  • The inside of a computer is as dumb as hell but it goes like mad! — Richard Feynman 曾几何时,为缓慢的 Web 服务器加速的方式就是增加更多的 CPU 核心。 我记得一个老板买了一台 24核的 Sun 工作站,它是个尺寸接近悍马的怪物, 以至于我们不得不扩修数据中心的大门才能将其放入。 时至今日,扩展 Web 站点

  • 我需要调用WildFly 8上可用的JAX-WS Web服务。我从一个简单的例子开始。这是我的网络服务: WSDL 可在以下网址获得: http://localhost:8080/DemoWS/HelloWorld?wsdl 看看Tomcat-CXF的例子,我编写了以下路由: 通过在 Camel 上下文中运行上述代码,将返回以下错误: serviceClass=com.sample。HelloWo

  • 我计划在谷歌云平台上为1700多个域(不同的网站)设置HTTP/HTTPS负载平衡(https://cloud.google.com/compute/docs/load-balancing/http/);所有人都将拥有TLS/SSL。但是,每个负载均衡器最多只能添加10个SSL证书,如下所示:https://cloud.google.com/compute/docs/load-balancing/

  • 我一直在尝试使用Zuul和Eureka连接微服务,除了通过基于ServiceID的Zuul重新路由之外,大部分都成功了。我拥有的是Spring Boot Zuul和Eureka应用程序,以及一个在Eureka注册的基于节点的微服务。Zuul和微服务都在Eureka注册,并显示在Eureka控制面板上,但是,当我试图通过Zuul路由到微服务时,我会遇到以下异常: 通过IP路由似乎有效,但我不需要它。

  • 你好,我曾与JAX-WS合作开发基于SOAP的网络服务。现在我想使用REST,因为正如我从这里学习的那样,REST比SOAP有优势。 但从不同的文章中,我知道我们也可以从JAX-WS创建RESTful Web服务。但是大多数人说我们应该使用JAX-RS而不是JAX-WS。 我的问题是JAX-WS RESTful webservice和JAX-RS(泽西)之间有什么区别。JAX-RS相对于JAX-W

  • 使用AWS,我想: 通过多个不同的IP发送http请求 不使用代理发送此请求 使用弹性负载平衡器和自动校准组发送 将这些请求从一个实例发送到自动缩放组中的多个实例 这几个实例中的每一个都将不同的IP分配给传入的请求,以便在其IP中输出请求 我该怎么做?是否需要设置负载平衡器,以便通过http请求发送?我希望每个http请求都有不同的IP地址。