知识大全 WebLogic Workshop 8.1中处理不带命名空间模式

Posted

篇首语:女人错过了那个想嫁给的男人,就会变得挑剔,男人错过了那个他最想娶的女人,就会变得随意。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 WebLogic Workshop 8.1中处理不带命名空间模式相关的知识,希望对你有一定的参考价值。

WebLogic Workshop 8.1中处理不带命名空间模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  摘要

  将遗留应用程序或集成系统与BEA WebLogic Workshop集成在一起时 经常要用到XML和模式 然而 某些遗留系统在最初设计时并没有包括处理XML命名空间的功能 相反 这些遗留系统只接受不带目标命名空间的无格式XML消息 而这可能导致在WebLogic Workshop中出现冲突 事实上 可以在多个模式中定义名称相同的全局类型或元素

  本文描述了如何通过WebLogic Workshop和XMLBeans简单而有效地解决这个问题 本文假定您对XML模式和XMLBeans有一些基本了解 您可以下载本文中使用的示例

  简介

  XMLBeans提供了一种处理XML的方法 即操作代表XML的Java类 这些类是使用XML适合的模式来创建的 可以使用XMLBeans来编译一个或多个模式文件 从而生成Java类型

  集成遗留解决方案时遇到的一个常见问题是 要与不同来源的多个模式打交道 而这些模式均未带有指定的目标命名空间 如果这些模式共享元素名称 WebLogic Workshop模式项目就无法成功编译生成的Java类型 而且还会出现诸如 Duplicate global type 或 Duplicate global element 这样的错误 下面举例说明这样一个场景

  场景实例

  假设您使用WebLogic Workshop创建了一个新的应用程序 通常您会创建一个模式项目 导入您的模式 然后WebLogic Workshop将自动把这个模式编译为XMLBeans

  <xs:schema xmlns:po= xmlns:xs= elementFormDefault= qualified > <xs:element name= purchase order type= customer /> <xs:plexType name= customer > <xs:sequence> <xs:element name= name type= xs:string /> <xs:element name= address type= xs:string /> </xs:sequence> </xs:plexType></xs:schema>

  清单 : Schema xsd

  Schema 没有目标命名空间 所得到的XML文档中带有元素名称name和address 如下所示

  <?xml version= encoding= UTF ?><purchase order xmlns:po= xmlns:xsi= instance > <name>John</name> <address> North First St</address></purchase order>

  清单 : Sample xml

  如果您尝试从这个模式生成Java类型 它将被正确地编译为一个XMLBean 现在可以导入另一个模式

  <xs:schema xmlns:xs= xmlns:foo= elementFormDefault= qualified > <xs:element name= client record type= customer /> <xs:plexType name= customer > <xs:sequence> <xs:element name= name type= xs:string /> <xs:element name= address type= xs:string /> <xs:element name= phone type= xs:string /> </xs:sequence> </xs:plexType> <xs:element name= purchase order type= customer /></xs:schema>

  清单 : Schema xsd

  Schema 同样没有目标命名空间 下面的XML文档就是这个模式的一个实例 它带有元素名称name address和 phone

  <?xml version= encoding= UTF ?><client record xmlns:foo= xmlns:xsi= instance > <name>Susan</name> <address> South Second St</address> <phone> </phone></client record>

  清单 : Sample xml

  在WebLogic Workshop中 当把这两个模式文件导入到一个模式项目中并生成XMLBeans类时 WebLogic Workshop将显示编译错误

  

  ERROR: error: Duplicate global type: customer ERROR: error: Duplicate global element: purchase order

  可以看到 编译器提示说全局类型customer和全局元素purchase order被多次定义 如果看看我们的模式 就会发现这并不值得惊奇 当模式不带目标命名空间时 这类冲突就很可能会出现 下面将给出解决这个问题的办法

  解决方案

  有很多可行的解决方案都可以解决这个问题 我将挑出其中三种进行讨论

  解决方案 添加目标命名空间

  为模式添加不同的目标命名空间就可以解决这个问题——我们也推荐使用这种方法 但是 在大部分时间里您都无法控制模式 所以我们需要另寻出路

  解决方案 创建单独的模式项目

  解决该问题的另一种方法是在WebLogic Workshop中创建两个模式项目 在这个例子中 假设您在应用程序中创建了另一个Schema项目 并分别在模式项目 和模式项目 中编译schema xsd和schema xsd 如图 所示

  在这种情况下 可以成功编译模式 两个项目都不会抱怨定义重复 然而 看看图 中生成的类便知 Libraries文件夹包含两个jar文件 SchemaP jar和SchemaP jar 这两个文件是WebLogic Workshop编译的结果 两个jars文件中均定义了noNamespace Customer和noNamespace PurchaseOrderDocument类 如下图所示

  

  图 : 一个包含两个模式项目的WebLogic Workshop应用程序

  应用程序中创建了名称相同的Java类(XMLBeans) 结果您无法选择要在应用程序中使用的那一个 在这种情况下 还是存在前面出现过的冲突问题 但是这次遇到麻烦的是应用程序类加载器

  您还会注意到 Java包名称 noNamespace 并非开发人员友好的 应该根据您的编码习惯对其进行修改 这也为实际的解决方案指明了方向——只要修改包名称便可避免冲突 第三种解决方案中可以解决这些问题

  解决方案 使用XMLBeans配置文件

  在Dev Dev站点上 您可以读一篇有关XMLBeans编译器选项的优秀文章 即Hetal Shah编写的配置 XMLBeans(中文)(Dev Dev 年 月) 这篇文章中提到 运行XMLBeans编译器时 您可以指定一个可选的配置文件 用于修改XMLBeans生成器的行为 这样就可以解决名称冲突和包名称不友好的问题

  您可以在模式 project 中创建一个piler xsdconfig文件 如图 所示 您将看到一个错误

  ERROR: piler xsdconfig: : Document D:\\SP \\user_projects\\domains\\Dev Dev\\SchemaP \\piler xsdconfig is not an xsd config file

  您可以忽略上面的错误 不会出现问题 因为所创建的文件目前是空的和无效的 您可以使用这个配置文件指定Java包的名称 从而为定义中缺少目标命名空间的XML元素和类型生成XMLBeans 此处的技巧在于使用保留字 ##local 如下所示

  <xb:config xmlns:xb= > <xb:namespace uri= ##local > <xb:package> foo>/xb:package> </xb:namespace> </xb:config>

  清单 : piler xsdconfig

  现在 如果打开Libraries文件夹 您将会看到模式 Project jar包含Java包 foo中的类 而不是图 中noNamespace中的类 显然 您应该使用有效的Java包名称 否则将产生错误

  

  图 : WebLogic Workshop项目中xsdconfig xml和结果jars文件的位置

  现在 通过创建一个类似的piler xsdconfig文件 您可以对Project 执行同样的步骤

  结束语

cha138/Article/program/Java/JSP/201311/19569

相关参考

知识大全 使用BEA Workshop Studio的Flex消息传递

使用BEAWorkshopStudio的Flex消息传递  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 使用JRockit 5.0运行BEA Workshop/Eclipse

使用JRockit5.0运行BEAWorkshop/Eclipse  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一

知识大全 使用jmx对weblogic进行动态的配置(源代码)

  对weblogic进行配置一般是通过console控制台来进行配置的但有的时候需要自己在程序中需要进行动态的配置比如增加队列显示队列或者配置数据源改写写configxml是可以达到动态配置的效果的

知识大全 Weblogic的JSP问题解决方法

Weblogic的JSP问题解决方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!    在做项目

知识大全 Weblogic81和Hibernate 的集成问题

Weblogic81和Hibernate的集成问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 自动化WebLogic平台应用程序供应

自动化WebLogic平台应用程序供应  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!摘要  BEA

知识大全 JBoss EJB应用程序迁移到WebLogic上

JBossEJB应用程序迁移到WebLogic上  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 在weblogic下解决Word、Excel打开乱码问题

在weblogic下解决Word、Excel打开乱码问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 EJB应用从WebLogic到JBoss的迁移方法

EJB应用从WebLogic到JBoss的迁移方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!摘

知识大全 Weblogic8配置Oracle数据库连接池

Weblogic8配置Oracle数据库连接池  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!lis