Java SOAP客户端存根生成,其中服务端点在运行时确定

时间:2014-07-11 17:20:47

标签: java web-services soap wsdl stub

以前,我已经用Python编写了SOAP客户端并使用了SUDS库。没有深入细节," stub"生成是非常动态的,因为它在运行时完成,并且由于Python是无类型的,我能够在没有预编译存根的情况下引用由WSDL生成的预期方法。我可以使用wsimport生成一个存根,因为通过一个漂亮的Java对象结构处理SOAP消息的组合是很好的。所以,我没有在python中寻找类似于SUDS的动态生成机制。

我的问题是,我看到的所有简单的JAX-WS示例都是针对我称之为静态定位的Web服务"。我尝试做的是连接到具有已知WSDL的Web服务,我可以在编译时生成存根,但其位置仅在运行时已知。例如,假设我想访问Microsoft SharePoint Web服务。无论我的应用程序部署在何处,都会运行不同的SharePoint服务器(或多个服务器),这些服务器需要在运行时指定。我见过的所有简单示例都将服务位置URL通过wsimport硬编码到存根中。有没有办法生成存根,但在运行时提供服务位置?

我真的很惊讶没有找到任何这方面的例子,因为我认为我试图做的事情应该是非常普遍的,因为Web服务。也许答案是,如果服务器位置仅在运行时已知,我就不会懒惰并获得一个很好的客观化版本的WSDL方法。我已经看过SAAJ的例子,但当然,我必须自己手工生成SOAP消息。当在编译时知道WSDL时,这将是一种耻辱。我不能吃蛋糕吗?

1 个答案:

答案 0 :(得分:3)

如果我理解你的问题,你想要连接到多个公开相同WSDL但位于不同地址的Web服务,而你的客户端只包含用于生成它的服务的地址吗?

在这种情况下,请看一下这篇文章:Changing WSDL url (endpoint) in JAX-WS client