简介
第 章在表示层集成 NET描述了如何集成 NET Framework 表示层和 JEE 业务层以及如何定义封装 JEE 业务服务外观的 Java 服务接口之后讲述了 NET Framework 互用性适配器的设计以便 NET Framework 应用程序(如 ASPNET Web 窗体)可以调用 Java 服务接口
本章和第 章内容相反本章描述了如何集成 JEE 表示层和 NET Framework 业务层其中包括定义不同的方法以完成该互用性的两小节
; 使用 Web 服务来实现互用性本节描述了如何定义 NET Framework Web 服务 (WS) 服务接口来封装 NET Framework 业务服务外观之后描述了如何设计 Java 互用性适配器来启用 Java 代码如 JEE 表示层调用 NET Framework WS 服务接口
; 使用 JaNET 来实现互用性 本节描述了如何使用 JaNET 来启用 JEE 表示层以通过使用 NET Remoting 来访问 NET Framework 业务服务外观
图 为 NET Framework 业务服务外观实现 NET Framework 服务接口
以下过程描述了 XBikes 开发人员如何创建 NET Framework Web 服务服务接口以公开 XBikes 的 NET Framework 版本业务层中的业务服务外观
开发人员创建一个名为 XBikesBLLWSServiceInterface 的新 ASPNET Web 服务项目
他们删除默认的 Serviceasmx 文件并将其替换为名为 BLLWSServiceInterfaceasmx 的新 Web 服务开发人员用如下的 [WebService] 属性来批注该 Web 服务类
[WebService(Namespace=)]
public class BLLWSServiceInterface : SystemWebServicesWebService
{
// Members
}
该团队将 Web 服务方法添加到 Web 服务类由现有的业务服务外观公开的每种方法都具有正确的方法签名但是开发人员将数据类型更改为字符串而不是每种方法将数据集作为参数接受或返回
[WebService(Namespace=)]
public class BLLWSServiceInterface : SystemWebServicesWebService
{
[WebMethod]
public string AuthenticateCustomer(string email string password)
{}
[WebMethod]
public string GetCategories()
{}
[WebMethod]
public string GetProductsByCategory(int CategoryID)
{}
[WebMethod]
public string GetSearchResults(string keyword)
{}
[WebMethod]
public void PlaceOrder(string order)
{}
[WebMethod]
public string GetCustomerOrders(int customerID)
{}
}
该团队将代码添加到每种 Web 服务方法以调用业务服务外观方法以下代码示例显示了如何对 Web 服务服务接口中的 GetCategories 方法执行操作开发人员调用自业务服务外观返回的 CategoriesData 对象的 GetXml 方法从而将数据转换成 XML 格式化字符串WS 服务接口将该字符串返回其调用方
[WebMethod]
public string GetCategories()
{
try
{
// Create a business service facade (BSF) object
BusinessServiceFacade bsf = new BusinessServiceFacade();
// Call the GetCategories method on the BSF object
CategoriesData cd = bsfGetCategories();
// Convert the CategoriesData dataset into XML and return it
return cdGetXml();
}
catch (XBikesInteropException intExp)
{
// Error handling code
}
}
根据 WSI Basic Profile Web 服务应该支持 SOAP 协议但不支持 HTTPGet 或者 HTTPPost 协议为了从 Web 服务中移除协议支持XBikes 开发人员将以下代码添加到 Web 服务的 nfig 文件的 部分
<webServices>
<protocols>
<remove name=HttpGet />
<remove name=HttpPost />
</protocols>
</webServices>
为了测试 Web 服务开发人员在 Visual?Studio NET 中建立并运行 Web 服务项目运行 ASPNET Web 服务项目时在浏览器中会自动出现一张测试页这张测试页包含允许调用每种 Web 服务方法的超级链接如果必要该测试页还有供您输入值的文本框在调用完一个 Web 服务方法后另一个浏览器窗口会打开显示来自 Web 服务方法的 XML 响应
注尽管 XBikes 示例应用程序不完全符合 WSI Basic Profile 的要求但开发人员使用工具包功能(开发时提供)来尽可能满足 Basic Profile 的要求
在 JEE 内创建互用性适配器
前面部分描述了如何在 NET Framework 中创建 Web 服务服务接口创建之后可以继续构建 JEE 互用性适配器本节内容即介绍了建立该适配器的步骤建立步骤如下所示
; 根据 XML 架构建立 Java 数据类
; 使用由 Web 服务堆栈提供的工具构建 Web 服务代理
; 为整个服务接口创建一个适配器或者为每个用例创建一个适配器
注在 Xbikes 中开发人员为每个用例创建一个适配器
互用性适配器调用该代理然后代理调用 Web 服务该适配器还必须在任何 Java 数据和基于 XML 架构的正确字符串/XML格式之间进行转换
适配器的逻辑流如下所示
应用程序调用适配器方法
适配器方法将任何复杂数据转换成 XML 字符串表示
适配器方法创建 Web 服务代理的实例
适配器方法调用 Web 服务代理中的适当方法
如果代理返回数据则适配器方法将其转换成正确的 Java 格式(如果必要)
适配器方法将数据返回到调用应用程序
图 显示了该操作过程
educitycn/img_///gif>
图 带有 JEE 应用程序的 Web 服务代理操作
以下为构建 Java 适配器的任务
从 XML 架构创建 Java 数据类型和 XML 映射
为 NET Framework Web 服务从 WSDL 创建 Java Web 服务代理
创建 Java 适配器以转换 Java 数据并调用 NET Framework Web 服务
以下部分描述了这些任务的执行步骤
从 XML 架构创建 Java 数据类型和 XML 映射
大多数 Java XML 产品提供工具以创建基于 XML 架构的 Java 数据类型通常这些工具还创建将 Java 类中的每个字段映射到 XML 架构中的元素或属性的映射文件
注如果现有的 Java 数据类型已经与 XML 架构一致则无须定义中间 Java 类只需定义将 Java 字段直接映射到 XML 架构中的元素和属性的映射文件
定义基于 XSD 的 Java 类之后下一步是编写代码将数据从原始的 Java 对象复制到基于 XSD 类的对象中然后必须编写代码以将基于 XSD 的对象序列化成 XML 格式化字符串
将序列化代码放入 Helper 类中是一个不错的主意XBikes 开发人员就是这么做的Helper 类要求希望写入或读取字符串的每种类型的数据有两种方法这两种方法接受要转换的数据的单一参数以及返回转换类型的单一值以下方法签名显示了 Order 对象和 XML 格式化字符串之间的转换
public static String orderToString(Order o);
public static Order StringToOrder(String o);
以下步骤阐释了 XBikes 开发人员从本章之前所述的 CustomerDataxsd XML 架构创建基于 XSD 的 Java 类的过程XBikes 开发人员使用 GLUE 生成基于 XSD 的 Java 类并创建映射文件以便 GLUE 可以在 Java 对象和 XML 之间进行序列化和反序列化操作步骤是
开发人员使用 GLUE 提供的 schemajava 工具创建基于 CustomerDataxsd 架构的 Java 类
schemajava CustomerDataxsd g p mondataconverterscustomers
schemajava 命令生成两个 Java 文件CustomerData_TYPEjava 和 Customers_TYPEjavaXBikes 开发人员将这些文件添加到 Java 项目将它们放在公共软件包中以便于访问软件包位于 mondataconverterscustomers
schemajava 命令还生成一个 CustomerDatamap 文件GLUE 序列化程序用它将字段映射到正确的 XML 元素和属性XBikes 开发人员将该映射文件复制到 文件夹中GLUE 可在此查找 XML 序列化的映射文件
因为 GLUE 是选定的环境所以开发团队将 Gluejar 文件添加到构建路径
接下来开发人员编写 Helper 类以在 Java 数据和字符串间执行转换他们将新类命名为 CustomerConverter并将其添加到软件包 mondataconverters 中
开发人员将两种方法添加到 CustomerConverter 类一种将 XML 字符串转换成 Java 对象另一种将 Java 对象转换成 XML 字符串这些方法使用 GLUE 序列化程序从基于 XSD 的 CustomerData_TYPE 和 Customers