WSDL到Java或Java到WSDL?

dre*_*kka 8 java soa wsdl web-services java-ee

我最近选择了一个相当讨厌的构建过程的项目.JAXB读取手工编码的XSD模式以生成类和工厂的Java模型,该模型用于手工编码的Java Web服务类(带注释),然后将其部署到服务器,该服务器用作读取完整的源的源WSDL来自以生成第二个基于Java的模型,该模型包括用于客户端程序的完整WSDL的服务和工厂类.

这听起来很糟糕,我认为我不需要它如此复杂,所以在某些阶段我想把这一切都扔掉,或者

  • 手工制作WSDL,生成完整模型并添加服务代码.
  • 或者 - 编写服务和模型类,并在运行时根据需要在服务器上生成WSDL.

无论哪种方式,我想最终得到一个服务器和客户端都可以使用的模型的源代码库,并且对于模型应该具有一个"真实来源",在那时我觉得我有几个.

目前我倾向于第二种选择,但你会选择哪种?你会使用哪些技术?

Rob*_*rtB 8

在我正在进行的项目中,我们目前正在完全重做我们的Web服务.这些服务通过SOAP为客户端提供服务器功能.从我学到的所有复杂的协议来看,它对WSDL的布局有很大的影响,我宁愿不自己编写WSDL.有很多事情你可能会出错(特别是涉及参数风格等等).一旦你的WSDL"在那里"并且从该WSDL生成的客户端愉快地与你的应用程序通信,你就不能再改变它了(或者你开始考虑版本控制策略,这也会变得相当痛苦).

所以我的强烈建议是用Java编写服务代码,让你的库为你生成一个WSDL.然后,您可以非常轻松地使用不同的绑定样式(这反过来影响与其他客户端的互操作性).可以在此处找到描述所有内容的非常详尽的文章:

http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/

此外,WSDL对于人类来说并不是特别易读,因此(至少在我看来)人类难以维护.在另一方面Java代码是相当容易阅读(或者至少你可以写这样的说法),这是一个更重要的原因,以手工制作的Java代码,而不是WSDL.

希望有助于做出决定.


Oph*_*tan 5

最干净的方法是手动或使用设计器生成WSDL - 并从中生成代理和存根.

这种方式背后的逻辑是,WSDL定义了服务契约,它应该是与实现无关的 - 而Java类是特定于实现的 - 并且这些实现细节通常转移到WSDL

确切的问题取决于您使用的Java到WSDL转换器(或者更重要的是,Java到XSD转换器) - 但它们非常常见,特别是如果您计划在您的环境中添加非Java服务器或客户端.

如果您更喜欢使用Java编写服务,则应遵循一些最小化实现锁定的准则,例如:

  • 控制从类到XSD的转换(我相信这可以使用注释完成
  • 仅使用简单类型和简单类型的聚合作为参数(不要将常规类作为参数传递)