我正在使用 EclipseLink MOXy 动态实体创建并遇到一件事。我的应用程序在代码库中没有用于下游 SOAP 服务的库。但是在启动时使用DynamicJAXBContextFactory.createContextFromXSD()创建所有对象。从这里开始,我使用自己本地定义的对象并使用应用程序中的元数据进行转换。如果我的下游对象很简单,没有嵌套类,我可以毫无问题地创建转换后的对象。但是说我有一个下游 DynamicType 像:
class Person {
class Address {
String city;
String state;
}
String first;
String last;
Address address;
}
我尝试使用由 XPath 方法设置的人员对象:
DynamicEntity person = jaxbContext.newDynamicEntity(jaxbContext.getDynamicType( "Person" ));
jaxbContext.setValueByXPath( person, "first/text()", null, "Tres");
jaxbContext.setValueByXPath( person, "last/text()", null, "Bailey");
jaxbContext.setValueByXPath( person, "address/city/text()", null, "Cowpens");
jaxbContext.setValueByXPath( person, "address/state/text()", null, "SC");
前 2 个设置值有效,但如果 person 是一个全新的对象,则设置城市和州的后 2 行不设置值。它们不起作用是有道理的,因为地址对象尚未设置值。但在我的用例中,我试图避免使用特定于服务的绑定文件,并且不想遍历我的每个 DynamicTypes 来查找每个设置的字段及其类型。这在 MOXy 中是否可行?
我使用 EclipseLink 2.5 版并在带有 Java 6 的 Tomcat 7 上运行。