2010-08-19 55 views
1

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

问候 谢雷夫

回答

3

我建议Spring的Web Services module,其中有没有涉及代码生成,但提供的担忧完全分离。通过允许您在您的OXM(对象 - XML映射)技术中提供您的WSDL和现有架构(一个或多个)(contract first),您现有的基于Java的领域模型和另一个领域中的a way to plugin,选择。

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

就最佳实践而言,我认为手工编码是一种最佳实践,尽管我可能处于少数。如果您从XML生成类,则最终得到的类只是简单的数据容器,没有任何行为(假设您想在WSDL/XSD更改时重新生成它们)。如果你喜欢面向对象的范例,这是不好的,因为你最终不得不将你的“业务逻辑”放置在实用程序/助手/服务等中,而不是放在它真正属于的域对象中。这是我喜欢JiBX的原因之一。我可以用行为制作非常漂亮的面向对象对象,一个不需要匹配对象的干净架构,并且可以使用类似于Hibernate对ORM(对象关系映射)进行操作的映射文件来管理对任何一方的更改。您可以对JAXB做同样的事情,但是这需要将XML结构嵌入到对象模型中,并将单个XML表示绑定到它(而使用JiBX可以有很多)。

+0

+1 - 完全正确。 – duffymo 2010-08-20 00:48:51

+0

谢谢,这真的很有帮助。数据容器,自动生成器类很容易成为你必须映射到其他类的东西。大部分与网络服务相关的开发时间都在寻找在这些类中传输数据的方法。我将检查JibX和Spring Web服务。 – mahonya 2010-08-20 10:49:32

+0

我已经考虑过这一点了;你认为使用它作为替代一些对象映射库,如推土机是否合理?由于泛型中的类型擦除,推土机给了我很多问题,也许object1 ---> xml ----> object2类型的机制可能会取代它。 – mahonya 2010-08-21 08:18:54

1

MOXY(我是技术负责人)专为具有现有XML Schema和Exsting对象模型的实例而设计。它为了达到这一目标XPath based mapping,并且可以永远处理情况的模型不类似的情况:

莫西也有外部约束力的文件:

MOXy是一个带有扩展的JAXB实现(一对其中有上面提到)。如果您继续使用Spring,MOXy将被配置为JAXB实现,并且您需要添加一个jaxb。属性文件与您的模型类与下列条目:

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

很酷。这看起来像是JiBX的可行替代品。我会看看!确实是 – SingleShot 2010-08-20 15:22:05

+0

。谢谢布莱斯,我一定会检查一下。 – mahonya 2010-08-21 08:16:57