摘要
將遺留應用程序或集成系統與BEA WebLogic Workshop集成在一起時,經常要用到xml和模式。然而,某些遺留系統在最初設計時并沒有包括處理XML命名空間的功能。相反,這些遺留系統只接受不帶目標命名空間的無格式XML消息,而這可能導致在WebLogic Workshop中出現沖突。事實上,可以在多個模式中定義名稱相同的全局類型或元素。
本文描述了如何通過WebLogic Workshop和XMLBeans簡單而有效地解決這個問題。本文假定您對XML模式和XMLBeans有一些基本了解。您可以下載本文中使用的示例。
簡介
XMLBeans提供了一種處理XML的方法,即操作代表XML的java類。這些類是使用XML適合的模式來創建的??梢允褂肵MLBeans來編譯一個或多個模式文件,從而生成Java類型。
集成遺留解決方案時碰到的一個常見問題是,要與不同來源的多個模式打交道,而這些模式均未帶有指定的目標命名空間。假如這些模式共享元素名稱,WebLogic Workshop模式項目就無法成功編譯生成的Java類型,而且還會出現諸如“Duplicate global type”或“Duplicate global element”這樣的錯誤。下面舉例說明這樣一個場景。
場景實例
假設您使用WebLogic Workshop創建了一個新的應用程序。通常您會創建一個模式項目,導入您的模式,然后WebLogic Workshop將自動把這個模式編譯為XMLBeans:
<xs:schema xmlns:po="http://openuri.org/easypo" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:element name="purchase-order" type="customer"/> <xs:complexType name="customer"> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="address" type="xs:string"/> </xs:sequence> </xs:complexType></xs:schema>
清單 1: Schema1.xsd
Schema1沒有目標命名空間,所得到的XML文檔中帶有元素名稱name和address,如下所示:
<?xml version="1.0" encoding="UTF-8"?><purchase-order xmlns:po="http://openuri.org/easypo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > <name>John</name> <address>123 North First St</address></purchase-order>
清單 2: Sample1.xml
假如您嘗試從這個模式生成Java類型,它將被正確地編譯為一個XMLBean?,F在可以導入另一個模式:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:foo="http://openuri.org/clientdb" elementFormDefault="qualified"> <xs:element name="client-record" type="customer"/> <xs:complexType 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:complexType> <xs:element name="purchase-order" type="customer"/></xs:schema>
清單 3: Schema2.xsd
Schema2 同樣沒有目標命名空間。下面的XML文檔就是這個模式的一個實例,它帶有元素名稱name, address和 phone:
<?xml version="1.0" encoding="UTF-8"?><client-record xmlns:foo="http://openuri.org/clientdb" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <name>Susan</name> <address>6789 South Second St</address> <phone>408-123-4567</phone></client-record>
新聞熱點
疑難解答