快速业务通道

Java与.NET的SOA互操作简易教程 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16

Java与.NET的SOA互操作简易教程

时间:2011-06-11 infoq Paul Hammant 译:Jason

在本文中,我们打算展示一下如何使用简单的技术加上以文档为中心的方式 带来有价值的业务服务,而无须使用专有的中间件,也不必引入Web服务栈的复 杂性。我们的灵感来自于REST的架构风格,以及把XML移到HTTP协议之上的能力 。

Web服务的方式

介绍我们这个方式的最好办法就是将它和一个简单的Web服务例子相对比。假 设有一个简单的天气服务,暴露出一个名为“WeatherQuery”的Web方法,这个 方法返回一个对象,包含温度和气压值。在通常情况下,人们拿现成代码,使用 工具来暴露方法,并生成WSDL。

Java与.NET的SOA互操作简易教程 - 编程入门网

如果你相信这个骗局,那么要做的无非就是找到一个WSDL在Java下的等价工 具,然后生成存根(Stub)代码。

不巧的是,事情并没有那么简单,WSDL是一个概括性的标准,而且实际上范 围到可以让人自由诠释。在我们的例子里,我们发现.NET强制使用基于文档的方 法,而Java工具则采用了相反的RPC方法。此外,我们还发现以下方面存在问题 :命名空间混淆,Schema的包含,以及工具将WSDL切分成若干独立部分。简而言 之,这项技术已经开始把注意力放在我们试图解决的实际问题之外了。

除了这些问题,我们还发现Web服务的工具之间存在不一致性。例如,对于自 动发布的WSDL文档,不同版本的Internet Information Server和Web Services Enhancements之间,还有它们的Java等价产品,彼此之间只能部分兼容。

有些东西今天七拼八凑起来可以工作,但到了明天,如果服务的后续版本需 要更复杂的Web方法时就得抛锚。这些东西真是令我们倍感厌烦。

更RESTful的风格

上面的方法里存在两个关键性假设:首先,仅暴露一个已有方法调用就足以 给我们带来一个有意义的服务;其次,使用工具能使通过Web服务访问到这个服 务的工作变成小菜一碟。

我们可以把请求看做一个包含请求的类型还有相应参数的文档,而不是考虑 请求的参数和返回的类型。把这个文档当成对试图建模的业务过程中契约的一部 分的描述。如果我们以相同的WeatherQuery方法为例,用常见的XML来描述它, 那么就可以得到类似下面的东西——

Java与.NET的SOA互操作简易教程 - 编程入门网

Java与.NET的SOA互操作简易教程(2)

时间:2011-06-11 infoq Paul Hammant 译:Jason

同样,作为文档,返回类型看起来会像这样——

Java与.NET的SOA互操作简易教程 - 编程入门网

现在我们可以定义一个简单的类,用于表示文档中的相同字段——

Java与.NET的SOA互操作简易教程 - 编程入门网

关于这两个文档,有意思的是它们在.NET和Java中都比较容易序列化和反序 列化。对于.NET来说,内建的XML序列化机制(带标注/Annotations)可以很轻 松地完成这项工作。对于同样一个类,C#代码如下:

Java与.NET的SOA互操作简易教程 - 编程入门网

Java开发人员就没那么幸运了,因为Java并不提供内建的XML序列化工具:不 过有一个名为XStream的开源项目(http://xstream.codehaus.org),能帮我们 完美地完成这项工作:

Java与.NET的SOA互操作简易教程 - 编程入门网

Java与.NET的SOA互操作简易教程(3)

时间:2011-06-11 infoq Paul Hammant 译:Jason

我们的Weather服务目前仅需负责文档的交换,而作为结果,我们就可以使用 简单的HTTP而不用使用Web服务了。

Java与.NET的SOA互操作简易教程 - 编程入门网

有了这样的转变,我们就可以考虑让多个文件类型使用同一个进入系统的入 口点,从而为我们带来一个更可扩展的方法。

Java与.NET的SOA互操作简易教程 - 编程入门网

编写Java服务器的代码

用于此服务Java实现的技术包括XStream序列化类库,以及任意一个Servlet 容器,因为我们选择用Servlet提供这些服务。XStream类库的源码是开放的,而 Servlet容器可以是WebLogic、WebSphere、JBoss、Geronimo或者Orion。如果对 J2EE中的E(企业特性)要求没有那么高,那么甚至只用Resin、Tomcat或者 Jetty就可以了。

我们的Servlet应当实现doPost()方法,而不是doGet()方法。对于XML,我 们

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号