Cla*_*ton 1 java soap web-services load-balancing jax-ws
当我使用jax-ws调用位于负载均衡器上的Web服务时,它会返回
服务器发送HTTP状态码302:暂时移动
然后失败,但是当我使用SoapUI时它工作正常.
有没有办法可以配置服务来正确处理这个问题?
我使用wsimport并生成Web服务代码并进行调用
NotificationWebService service = new NotificationWebService(wsdlLocation, qName);
NotificationWebServiceSoap serviceSoap = service.getNotificationWebServiceSoap();
String xmlString = serviceSoap.getRSAPublicKeyXMLString();
Run Code Online (Sandbox Code Playgroud)
我被困住了,我无法在任何地方找到解决方案,所以任何帮助都会受到赞赏.
Cla*_*ton 14
经过大量调查后,我终于找到了问题所在.一切都归结为从http重定向到https.从我在网上找到的文章(不能再记住网址),wsdl2java和wsimport存根生成器用来进行网络服务通信的库是否由于安全原因不允许http到https重定向.
即使我是从https wsdl位置生成存根,即.https://wsdl.location.com?wsdl,当我运行代码进行webservice调用时,它试图调用http://wsdl.location.com,这导致了对https的重定向请求:/ /wsdl.location.com,但http库不允许这样做.所以它只是将302 http代码转发为异常.
此外,还有两个Web服务URL.一个是测试服务,它是普通的http url,然后有一个生产服务器通过https.因此,为了解决这个问题,我所做的就是通过使用BindingProvider类来动态配置服务以使用我指定的端点(现在是https地址).这也允许我根据正在调用的环境动态指定,使用测试URL或生产一个ie.
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();
Run Code Online (Sandbox Code Playgroud)
所以简而言之,如果有人遇到这个问题.确保您需要指向的终点是否在https上,您正在进行直接https呼叫,而不是要求进行https重定向的http呼叫.您可以通过在调试时检查serviceSoap来检查这一点.它会说它正在拨打哪个网址.
我没有调查或选择配置wsdl2java和wsimport来生成存根并强制存根使用https调用,这样我就可以为不同的环境配置多个url端点.
| 归档时间: |
|
| 查看次数: |
12114 次 |
| 最近记录: |