哪个Web服务堆栈允许将wsdl第一个Web服务绑定到Java中的现有类?

时间:2010-08-19 23:29:12

标签: java class wsdl

问候, 我有一个复杂的场景要处理。我有一个使用特定XML模式的wsdl文件。 XML模式实际上是规范的手工实现。还存在相同规范的基于Java的实现。因此,手头的WSDL和Java类中使用的XSD非常相似,但并不完全相同。 几乎所有Web服务堆栈都允许从WSDL创建类或从Java类注释创建WSDL。 我想要做的是使用WSDL并将wsdl中使用的XSD绑定到现有的java类。 应该/我可以通过手动用现有的Java类替换生成的Java类来实现吗?是否需要更改配置文件中的类型名称并将绑定注释移动到现有类? 如果您了解任何最佳实践或支持此类的Java Web服务堆栈(如果实际上具有灵活性),那么您的响应将非常受欢迎。

最诚挚的问候 谢雷夫

2 个答案:

答案 0 :(得分:3)

我建议Spring Web Services module,它不涉及代码生成,但提供了一个清晰的关注点分离。通过允许您在一侧(contract first)提供WSDL和现有架构,在另一侧提供现有的基于Java的域模型,以及在OXM中提供a way to plugin,可以很好地解决不同的问题。 (Object-XML Mapping)技术的选择。

由于您拥有手工制作的WSDL /架构和手工制作的Java类,因此真正的工作将是配置您的OXM。我更喜欢JiBX,因为它将问题分开(没有XML注释垃圾混入您的域),如果学习曲线看起来太陡,JAXB作为备份。 Spring Web Services支持其他几个OXM框架,您甚至可以同时使用几个不同的框架。

就最佳做法而言,我认为手工制作的代码是最佳做法,尽管我可能属于少数。如果从XML生成类,最终会得到一些没有行为的简单数据容器类(假设您希望在WSDL / XSD更改时重新生成它们)。如果您喜欢面向对象的范例,这是不好的,因为您最终必须将“业务逻辑”放在实用程序/帮助程序/服务等中,而不是放在它真正属于的域对象中。这是我赞成JiBX的一个原因。我可以使用行为创建非常好的OO对象,一个不一定与对象匹配的漂亮的干净模式,并且可以使用类似于hibernate为ORM(对象 - 关系映射)执行的映射文件来管理对任一方的更改。您可以对JAXB执行相同的操作,但这需要将XML结构嵌入到对象模型中,并将单个XML表示绑定到它(而使用JiBX可以有很多)。

答案 1 :(得分:1)

MOXY(我是技术主管)是为拥有现有XML Schema和exsting对象模型的实例而设计的。它通过XPath based mapping完成此任务,并且可以处理模型不相似的情况:

MOXy还有一个外部绑定文件:

MOXy是一个带扩展的JAXB实现(其中一些如上所述)。如果继续使用Spring,MOXy将被配置为JAXB实现,您需要使用以下条目在模型类中添加jaxb.properties文件:

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory