[英]Dynamic java bean from xsd
我有兩個應用程序,一個作為客戶端,另一個作為服務器。 在服務器應用程序中,我使用Eclipse中的xjc生成ObjectFactory和類。 因此,其中一個類稱為widgetEvenCall。 來自xsd:
...
<xs:element name="widgetEventCall">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="1" ref="tns:widgetEventDescriptor" />
<xs:element minOccurs="0" maxOccurs="unbounded" ref="tns:widgetParameter" />
</xs:sequence>
</xs:complexType>
</xs:element>
JAXB xjc使用它們的getter和setter生成類WidgetEventCall,WidgetEventDescriptor和WidgetParameter。
客戶端應用程序既沒有這些類也沒有ObjectFactory,遠程調用服務器應用程序上的服務,得到一個XML,如:
. . .
<widgetEventCall>
<widgetEventDescriptor> ... </widgetEventDescriptor>
<widgetParameter>...</widgetParameter>
<widgetParameter>...</widgetParameter>
. . .
</widgetEventCall>
幸運的是,客戶端應用程序可以訪問.xsd定義。 我的問題是:有可能,使用xml內容和xsd定義,為widgetEventCall,widgetEventDescriptor和widgetParameter創建對象,就好像它們是由xjc創建的,包括getter和setter,保持客戶端應用程序不知道它們,使用專屬反思? 是否有一種自動化方式可以達到此目的?
我的目標是將此結果用於JSP文件,即將對象放入請求並像widgetEventCall.widgetParameter [0] .someProperty一樣訪問它,因此我需要生成getter。
提前致謝。
瓊。
您可以將EclipseLink MOXy的Dynamic JAXB用於此用例(我是MOXy技術主管)。
創建動態JAXB上下文:
JAXBContext可以從XML引導:
FileInputStream xsdInputStream = new FileInputStream("src/example/customer.xsd");
DynamicJAXBContext jaxbContext =
DynamicJAXBContextFactory.createContextFromXSD(xsdInputStream, null, null, null);
解組XML:
然后使用unmarshaller將XML轉換為對象:
FileInputStream xmlInputStream = new FileInputStream("src/example/dynamic/customer.xml");
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
DynamicEntity customer = (DynamicEntity) unmarshaller.unmarshal(xmlInputStream);
與數據交互:
您獲得的DynamicEntity實例是一個通用對象,其get / set方法采用屬性名稱。 屬性名稱對應於XJC在靜態類上生成的內容。
DynamicEntity address = jaxbContext.newDynamicEntity("org.example.Address");
address.set("street", "1 Any Street").set("city", "Any Town");
customer.set("address", address);
元帥元素:
然后使用marshaller將XML轉換為對象:
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(customer, System.out);
有關更多信息,請參閱
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.