来自xsd的动态java bean

我有两个应用程序,一个作为客户端,另一个作为服务器。 在服务器应用程序中,我使用Eclipse中的xjc生成ObjectFactory和类。 因此,其中一个类称为widgetEvenCall。 来自xsd:

...         

JAXB xjc使用它们的getter和setter生成类WidgetEventCall,WidgetEventDescriptor和WidgetParameter。

客户端应用程序既没有这些类也没有ObjectFactory,远程调用服务器应用程序上的服务,得到一个XML,如:

 . . .   ...  ... ... . . .  

幸运的是,客户端应用程序可以访问.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); 

有关更多信息,请参阅