楼主: macmics

介绍 XSD SDO 转换功能

[复制链接]
论坛徽章:
1
会员2007贡献徽章
日期:2007-09-26 18:42:10
11#
 楼主| 发表于 2007-3-20 17:27 | 只看该作者
结果,将生成下面的工件(如图 10 所示):

xyz.brokerservice、xyz.brokerservice.impl,以及 xyz.brokerservice.util 包括 SDO 及为了适合于 XSD schema 中定义的类型而构建的相关工具的 Java 包。
框架 JAR 文件——xsdsdotransform.jar,它被添加到 EAR 项目并且 Web 项目的 JAR 依赖被相应地更新来建立运行时的类路径。


图 10. 生成的 SDO 包

webproject_gen_src_updated_classpathu.jpg (85.17 KB, 下载次数: 14)

webproject_gen_src_updated_classpathu.jpg

使用道具 举报

回复
论坛徽章:
1
会员2007贡献徽章
日期:2007-09-26 18:42:10
12#
 楼主| 发表于 2007-3-20 17:28 | 只看该作者
包名来源于 XSD 中声明的定义在 schema 中的 targetNamespace(如图 11 所示)。


图 11. TargetNamespace 声明

schema_targetnamespace.jpg (7.02 KB, 下载次数: 11)

schema_targetnamespace.jpg

使用道具 举报

回复
论坛徽章:
1
会员2007贡献徽章
日期:2007-09-26 18:42:10
13#
 楼主| 发表于 2007-3-20 17:29 | 只看该作者
创建基础的根 Java bean
在 brokerservice.root 包中创建 BaseBrokerServiceRoot.java(可从 xsd_sdo_soa_part1_listings.zip 下载文件中获得)Java 类作为所有页面根 bean 包装器的基本类。SDO 包的 schema 命名空间的注册工作在静态块中完成。运行时,检查 XML 实例文档的命名空间来在这个注册表中定位相关的 SDO 包:


static{
        EPackage.Registry.INSTANCE.put(
                BrokerservicePackage.eINSTANCE.getNsURI()
                , BrokerservicePackage.eINSTANCE);
}




创建代理服务根 Java bean
创建 BrokerDetailRoot.java(可从 xsd_sdo_soa_part1_listings.zip 下载文件中获得)Java 类,使其作为 BrokerDetail.jsp 页面的 bean 包装器。这个 bean 包装了 SDO 包,并使得 SDO 包的用法如同页面数据中的 Java bean。它也包括通过对请求的服务调用的响应来预载 bean 的方法:

创建方法
在此实例中,该方法只是简单地返回了 XML 请求字符串,然而将其编码用来调用请求创建者服务(例如,由于需要审核的服务,所以向 XML 请求中添加适宜的头信息,等等)。


protected String createBrokerDetailRequest(){
        String request = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
                <brokerService mlns=\"http:///xyz.brokerservice.ecore\"
                xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">
                <broker brokerId=\"099-99-9999\"><loginName>narinder</loginName>
                <loginPassword>makin</loginPassword></broker></brokerService>";
        //you may also use the create/convert API to create a new request string
        /*DocumentRoot docRoot = (DocumentRoot)
                XMLTransformServiceFactory.INSTANCE.create(BrokerservicePackage.eINSTANCE.getNsURI());
        BrokerServiceType bs = docRoot.createBrokerService();
        xyz.brokerservice.BrokerType b = bs.createBroker();
        b.setBrokerId("099-99-9999";
        b.setLoginName("narinder";
        b.setLoginPassword("makin";
        request = XMLTransformServiceFactory.INSTANCE.convert((DataObject)b);
        */
        return request;
}




加载方法
调用 XMLTransformServiceFactory 方法将代理的详细的响应 XML 转换成 SDO。


protected void loadBrokerDetailResponse(String response){

        DocumentRoot docRoot=
          (DocumentRoot) XMLTransformServiceFactory.INSTANCE.load(response);
        brokerServiceRoot =  docRoot.getBrokerService();
}





预载方法
调用请求及处理响应的服务。


protected void preLoadBrokerDetail(){
    String xmlData = createBrokerDetailRequest();
    String response =
            BrokerServiceFactory.invoke(xmlData,
                BrokerServiceFactory.BROKERDETAIL_REQUEST);
    loadBrokerDetailResponse(response);
}





sortByPolicyName 方法
通过使用策略集中的名称将策略分类。

public void sortByPolicyName(List listPolicies){
        ObjectUtil.INSTANCE.sort(listPolicies,
                BrokerserviceFactory.eINSTANCE,
                BrokerservicePackage.eINSTANCE.getPolicyType_PolicyName(),
                true);
}





dw.ibm.etools.xsd.sdo.xmltransform.util.ObjectUtil 助手类
提供了框架代码来将列表分类。


/**
* Sorts the Objects in the list
* @param list the instance of the EList containing EObjects
* @param eFactory the instance of the SDO factory
* @param sortBy the EAttribute to be used for sorting
* @param desc true for descending sort, false for ascending
* @return true if the order of objects in list is changed
*/
public  boolean sort(List list, EFactory eFactory
        , EAttribute sortBy, boolean desc);




创建 JSF JSP
创建 JavaServer Faces JSP 文件作为 brokerdetail.jsp

在 Application Developer 中,打开 Web 站点向导,从面板中抛出新的页面,并将其重命名成 brokerdetail.jsp。
图 12. Web 站点向导

wn_broker_detail_jspu.jpg (11.65 KB, 下载次数: 14)

wn_broker_detail_jspu.jpg

使用道具 举报

回复
论坛徽章:
1
会员2007贡献徽章
日期:2007-09-26 18:42:10
14#
 楼主| 发表于 2007-3-20 17:29 | 只看该作者
在页面上双击并作为 Faces JSP 来实现它。
图 13 brokerdetail.jsp

broker_detail_jspu.jpg (75.25 KB, 下载次数: 12)

broker_detail_jspu.jpg

使用道具 举报

回复
论坛徽章:
1
会员2007贡献徽章
日期:2007-09-26 18:42:10
15#
 楼主| 发表于 2007-3-20 17:30 | 只看该作者
将页面 BrokerDetailRoot bean 添加到页面数据中
BrokerDetailRoot bean 包装了由 XSD 生成的 SDO 类。该 Java bean 是自省的,并且页面数据以树的形式展示了 SDO 类型、属性及引用。下面的步骤用于将根 bean 添加到页面数据中:

在页面数据视图中单击右键,并通过选取 New => JavaBean 来添加新的 Java Bean(如图 14 所示)。
图 14. 在页面数据视图中的新 java bean 菜单

add_bean_to_page_data.jpg (11.84 KB, 下载次数: 16)

add_bean_to_page_data.jpg

使用道具 举报

回复
论坛徽章:
1
会员2007贡献徽章
日期:2007-09-26 18:42:10
16#
 楼主| 发表于 2007-3-20 17:30 | 只看该作者
在 Add JavaBean 对话框(如图 15 所示)中输入 JavaBean 实例的名称作为变量——varBrokerDetailRootBean。
图 15. Java bean 属性

add_bean_to_page_data_1.jpg (19.22 KB, 下载次数: 30)

add_bean_to_page_data_1.jpg

使用道具 举报

回复
论坛徽章:
1
会员2007贡献徽章
日期:2007-09-26 18:42:10
17#
 楼主| 发表于 2007-3-20 17:31 | 只看该作者
选择 Finish。新创建的 bean 将显示在页面数据视图(如图 16 所示)中。
图 16. BrokerServiceRoot java bean

add_bean_to_page_data_2.jpg (25.38 KB, 下载次数: 13)

add_bean_to_page_data_2.jpg

使用道具 举报

回复
论坛徽章:
1
会员2007贡献徽章
日期:2007-09-26 18:42:10
18#
 楼主| 发表于 2007-3-20 17:31 | 只看该作者
为页面代码添加命令方法
编辑 BrokerDetail.java 页面代码文件并将下面的方法用作命令动作的方法。这个动作调用了页面根 bean 中的 sortByPolicyName 方法通过名称来为策略的显示数据分类。(被访问的 table2 控制被加到了下面的部分中。)您可以创建一个用于策略列表的参数变量,并且使用它而非通过 table 控制来访问该列表。


public String doSortByPolicyNameAction(){
        //table2 is the policy data table
        //you may choose to add a param scope variable
        //for policy list, instead of using the table control
        getVarBrokerDetailRootBean().sortByPolicyName
                ((java.util.List)getTable2().getValue());
        // returning empty string re-displays the same page with same data binding
        return "";
}



创建页面上的控制并绑定到页面数据的 SDO 类型上
您可以设计页面的根数据并且使得页面编辑器为您创建基于已设计好的数据类型的控制,或者您也可以放弃个人控制并亲自绑定数据元素。为了简单起见,我们将使用页面编辑器来创建这些控制。创建数据表并与每个 SDO 类型绑定,创建输出文字字段并将其与每个属性及在这些类型中的单一值的引用相绑定。对于每个多值引用而言,需要创建并绑定嵌套的数据表。

从页面数据视图中拖动 broker SDO 并将其交付给页面编辑器(如图 17 和 18 所示)。
图 17. Broker SDO

select_broker_from_page_data.jpg (21.11 KB, 下载次数: 14)

select_broker_from_page_data.jpg

使用道具 举报

回复
论坛徽章:
1
会员2007贡献徽章
日期:2007-09-26 18:42:10
19#
 楼主| 发表于 2007-3-20 17:31 | 只看该作者
Depth 属性决定了嵌套表格控制创建的深度。将深度设置为 5 可以自定义表格属性(如图 19 所示)。
图 19. 数据表格属性

customize_table_depth.jpg (15.49 KB, 下载次数: 13)

customize_table_depth.jpg

使用道具 举报

回复
论坛徽章:
1
会员2007贡献徽章
日期:2007-09-26 18:42:10
20#
 楼主| 发表于 2007-3-20 17:32 | 只看该作者
为“客户”列表指定数据类型(如图 20 所示)。如果您希望将列表属性绑定到页面上的任何控制中去,就需要提供每个列表属性的数据类型。
图 20. 客户集的对象类型

client_data_type_for_collection.jpg (13.64 KB, 下载次数: 13)

client_data_type_for_collection.jpg

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表