1

我正在使用 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 上运行。

4

1 回答 1

0

注意: 我是EclipseLink JAXB (MOXy)负责人,也是JAXB (JSR-222)专家组的成员。

您需要执行以下操作:

    jaxbContext.setValueByXPath( person, "first/text()", null, "Tres");
    jaxbContext.setValueByXPath( person, "last/text()", null, "Bailey");

    Object address = jaxbContext.createByXPath(person, "address", null, Object.class);
    jaxbContext.setValueByXPath(person, "address", null, address);

    jaxbContext.setValueByXPath( person, "address/city/text()", null, "Cowpens");
    jaxbContext.setValueByXPath( person, "address/state/text()", null, "SC");

我可以在您的问题中看到您正在寻找的行为。您是否介意使用以下链接输入增强请求:

于 2013-08-15T19:43:15.100 回答