如何动态生成Web服务客户端

时间:2009-09-08 15:00:33

标签: java web-services dynamic client

我遇到了问题。

另一方面,假设WSDL将始终更改,

例如,WSDL文件中描述的其他Web服务只有方法, 但方法的名称可能总是改变,今天调用methodABC(),明天将更改为methodDEFO()..

假设在JAVA中, 无论如何,我可以动态生成Web服务客户端,而无需手动手动执行???我的意思是当我的应用程序仍在运行时动态生成客户端..

或者我应该去看什么样的文章,因为我从互联网上做了很多搜索,找不到办法去做..我想我可能需要创建自己的框架来处理它。但不知道从哪里开始。

4 个答案:

答案 0 :(得分:7)

您可以将任何WSDL-to-Java工具与Java Compiler API结合使用,使用URLClassLoader加载生成的类,然后开始使用。我会说,相当多的工作,但不是很难。 (不过,你最终可能会耗尽permgen空间。)

但是,如果你的场景是现实的,那么最重要的问题是如何生成类,但为什么Web服务的发布者会破解?

编辑:澄清“破解”的事情。更改Web服务的界面(例如,方法名称)意味着您必须猜测要调用的方法。如果界面中只有一种方法,那么确定要调用哪种方法并不难,但仍然 - 如果突然出现两种方法会发生什么?

更改外部系统使用的服务的界面是一件非常重要的事情,不应掉以轻心。它绝对应该是自动化的。这是一种代码嗅觉,很可能是无能,药物滥用和/或纯粹疯狂的迹象。

我意识到我这样的道德化并没有解决你的问题。我只是希望你可以和负责人讨论一个不断改变界面的网络服务是否令人憎恶,而且改变它的方式比改变你的代码更好。

答案 1 :(得分:0)

那么,

关于这个问题,有几个问题要问:

1:您是否申请'知道'实际即已更改的名称 运行时的方法?

2:您是否掌控了该网络服务?

3。:您使用什么框架进行WS通信?

答案 2 :(得分:0)

WSDL动态更改的此类Web服务不适合生成的客户端绑定。

大多数Web服务堆栈都支持动态客户端的概念,您可以以较不静态的方式调用Web服务操作。

要选择一个示例,请参阅Apache CXF dopcumentation的相关部分。

另一个例子是Spring-WS,它从不使用WSDL生成的代码,而是以XML文档为中心。如果您拥有高度可变的Web服务,那么我强烈建议Spring-WS覆盖更“传统”的JAX-WS生成的客户端。

答案 3 :(得分:-1)

通常wsdl是一个文件,它类似于消​​费者和主机之间的合同。如果这将动态变化,您需要了解此更改的重现,而不是动态使用该服务。