Java与.NET的SOA互操作简易教程 - 编程入门网
Java与.NET的SOA互操作简易教程时间:2011-06-11 infoq Paul Hammant 译:Jason在本文中,我们打算展示一下如何使用简单的技术加上以文档为中心的方式 带来有价值的业务服务,而无须使用专有的中间件,也不必引入Web服务栈的复 杂性。我们的灵感来自于REST的架构风格,以及把XML移到HTTP协议之上的能力 。 Web服务的方式 介绍我们这个方式的最好办法就是将它和一个简单的Web服务例子相对比。假 设有一个简单的天气服务,暴露出一个名为“WeatherQuery”的Web方法,这个 方法返回一个对象,包含温度和气压值。在通常情况下,人们拿现成代码,使用 工具来暴露方法,并生成WSDL。 如果你相信这个骗局,那么要做的无非就是找到一个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互操作简易教程(2)时间:2011-06-11 infoq Paul Hammant 译:Jason同样,作为文档,返回类型看起来会像这样—— 现在我们可以定义一个简单的类,用于表示文档中的相同字段—— 关于这两个文档,有意思的是它们在.NET和Java中都比较容易序列化和反序 列化。对于.NET来说,内建的XML序列化机制(带标注/Annotations)可以很轻 松地完成这项工作。对于同样一个类,C#代码如下: Java开发人员就没那么幸运了,因为Java并不提供内建的XML序列化工具:不 过有一个名为XStream的开源项目(http://xstream.codehaus.org),能帮我们 完美地完成这项工作: Java与.NET的SOA互操作简易教程(3)时间:2011-06-11 infoq Paul Hammant 译:Jason我们的Weather服务目前仅需负责文档的交换,而作为结果,我们就可以使用 简单的HTTP而不用使用Web服务了。 有了这样的转变,我们就可以考虑让多个文件类型使用同一个进入系统的入 口点,从而为我们带来一个更可扩展的方法。 编写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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |