2010-05-11 94 views
1

内调用Web服务,我有一个简单的Web服务坐在我们的内部网络上。我使用SOAPUI做了一些测试,从WSDL生成了服务类,并编写了一些Java代码来访问服务。一切都如预期一样,因为我能够创建服务代理类并拨打电话。很简单的东西。唯一的减速是让java信任来自提供Web服务的机器的证书。这不是一个技术问题,而是我缺乏基于SSL的Web服务的经验。 现在到我的问题。我编写了一个简单的EJB服务并将其部署到JBoss应用服务器4.3中,现在在之前的代码中出现以下错误。问题从JBOSS EJB服务

12:21:50,235 WARN [ServiceDelegateImpl] Cannot access wsdlURL: https://WS-Test/TestService/v2/TestService?wsdl 

我可以在同一台计算机使用错误消息的URL的应用服务器上运行的Web浏览器访问的WSDL文件。我也可以在应用程序服务器所在的机器上运行访问应用服务器之外的web服务的代码(而不是从内部)。我不知道该从哪里出发。我打开JBOSS中的调试日志,没有比上面显示的更多。我在网上进行了一些搜索,发现在某些问题上有同样的错误,但这些问题没有答案。其中使用的wsimport ant任务与JAX-WS 2.2产生并且放置在包含在EJB封装的罐子web服务类。 JBoss部署在RHEL 5.4中。我在JBOSS community forum上发布了这篇文章,但在撰写本文时没有收到任何回复。

回答

1

在看看ServiceDelegateImpl它试图做的事:

InputStream为= wsdlURL.openStream();

其中WSDLURL是一个非空URL。这意味着问题在于openStream()。我希望问题在于https根证书;我可以想象,JBoss在某处拥有可接受的根证书的存储空间,并且你的根目录不在那里。

我会做的测试,这是一个HTTP服务器上部署该服务,使WSDLURL一个http URL。如果可行,那就是SSL层。

如果的SSL层,尝试在答案手动添加密钥库,通过定义它在命令行上,喜欢this SO question

+0

感谢您的建议。我将尝试通过HTTP部署该服务,以排除JBoss中的SSL层。我已经开始运行的服务器,并在详细模式下我的测试客户端,看看我能看到正在加载的类/瓶的差异,但这似乎看起来更合乎逻辑的地方。将回报。再次感谢 – 2010-05-18 12:47:42

+0

是的,错误在于JBoss不信任Web服务机器。 JBoss吞下了解决问题的例外。通过尝试打开上面指出的流会产生以下异常。 javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径建设失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到所以一旦我弄清楚如何要求的目标 有效证书路径为了正确让JBoss服务器信任Web服务服务器证书,我将发布该信息并将其标记为已回答 – 2010-05-20 12:56:15

+0

@Rob Goodwin我链接的SO问题应该能够回答这个问题。原则上,您可以在该密钥库中导入受信任的根证书以供JBoss使用。您当然也可以切换SSL验证器实现,并将其设计为接受任何内容,但这有点破解:) – extraneon 2010-05-20 13:21:19