Joa*_*oan 5 java xsd dynamic jaxb javabeans
我有两个应用程序,一个作为客户端,另一个作为服务器.在服务器应用程序中,我使用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>
Run Code Online (Sandbox Code Playgroud)
JAXB xjc使用它们的getter和setter生成类WidgetEventCall,WidgetEventDescriptor和WidgetParameter.
客户端应用程序既没有这些类也没有ObjectFactory,远程调用服务器应用程序上的服务,得到一个XML,如:
. . .
<widgetEventCall>
<widgetEventDescriptor> ... </widgetEventDescriptor>
<widgetParameter>...</widgetParameter>
<widgetParameter>...</widgetParameter>
. . .
</widgetEventCall>
Run Code Online (Sandbox Code Playgroud)
幸运的是,客户端应用程序可以访问.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);
Run Code Online (Sandbox Code Playgroud)
解组XML:
然后使用unmarshaller将XML转换为对象:
FileInputStream xmlInputStream = new FileInputStream("src/example/dynamic/customer.xml");
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
DynamicEntity customer = (DynamicEntity) unmarshaller.unmarshal(xmlInputStream);
Run Code Online (Sandbox Code Playgroud)
与数据交互:
您获得的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);
Run Code Online (Sandbox Code Playgroud)
元帅元素:
然后使用marshaller将XML转换为对象:
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(customer, System.out);
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅
| 归档时间: |
|
| 查看次数: |
6770 次 |
| 最近记录: |