使用运行时确定的服务端点生成Java SOAP客户端存根

使用运行时确定的服务端点生成Java SOAP客户端存根,java,web-services,soap,wsdl,stub,Java,Web Services,Soap,Wsdl,Stub,以前,我用Python编写了SOAP客户端,并使用了SUDS库。在不深入细节的情况下,“存根”的生成实际上是相当动态的,因为它是在运行时完成的,而且由于Python是如此的无类型,我能够在没有预编译存根的情况下引用WSDL生成的预期方法。我可以用wsimport之类的东西生成存根,因为通过一个好的Java对象结构处理SOAP消息的组合是很好的。所以,我不是在寻找类似于python中的sud的动态生成机制 我的问题是,我看到的所有简单JAX-WS示例都是针对我称之为“静态定位的web服务”的。我正

以前,我用Python编写了SOAP客户端,并使用了SUDS库。在不深入细节的情况下,“存根”的生成实际上是相当动态的,因为它是在运行时完成的,而且由于Python是如此的无类型,我能够在没有预编译存根的情况下引用WSDL生成的预期方法。我可以用wsimport之类的东西生成存根,因为通过一个好的Java对象结构处理SOAP消息的组合是很好的。所以,我不是在寻找类似于python中的sud的动态生成机制

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


我真的很惊讶没有发现任何这样的例子,因为我认为随着Web服务的发展,我尝试做的事情应该非常普遍。也许答案是,如果服务器位置只在运行时才知道,我就不能偷懒并获得一个好的WSDL方法的对象化版本。我看过SAAJ的例子,但在那里,当然,我必须亲自生成SOAP消息。如果WSDL在编译时就已经知道,那就太可惜了。我不能吃蛋糕也吃吗?

如果我正确理解您的问题,您希望连接到多个web服务,这些web服务公开相同的WSDL,但位于不同的地址,并且您的客户端只包含用于生成WSDL的服务的地址


在这种情况下,请看这篇文章:。

我考虑过回答我自己的问题,但我仍在调查“动态代理”。到目前为止,它看起来正是我上面描述的。我仍然不清楚动态存根和静态存根有什么不同,因为看起来wsimport两者都使用。任何有使用动态代理经验的人都会很好。完全正确,非常感谢@Bogdan!“另一种更好的方式”正是我所寻找的。看看这个例子,我深入研究了我用wsimport生成的简单示例,发现它确实为服务对象生成了多个构造函数,这是我以前没有注意到的。默认构造函数使用用于生成存根的URL,但是有一个构造函数,您可以将运行时指定的新端点WSDL的URL传递给该构造函数。再次,非常感谢!