【问题标题】:Dynamic JAXB/MOXy Marshalling throws MOXy BV: Facets generation could not be configured动态 JAXB/MOXy 编组抛出 MOXy BV:无法配置构面生成
【发布时间】:2021-05-28 05:33:11
【问题描述】:

我正在尝试遵循documentation 并实施Dynamic JAXB/Moxy marshalling。但它没有按预期工作并引发以下错误:

[EL Warning]: moxy: 2021-05-28 10:54:09.432--MOXy BV: Facets generation could not be configured. EclipseLink's JavaModelInputImpl was not detected, instead JavaModelInput is of class: class org.eclipse.persistence.jaxb.javamodel.xjc.XJCJavaModelInputImpl
Exception in thread "main" java.lang.NullPointerException

我的XSD 位于resources 文件夹中,我正在使用documentation 中的XSD。阅读后,我试图在旅途中为它创建POJO,并使用编组方法创建 XML。以下是它的代码:

import org.eclipse.persistence.dynamic.DynamicEntity;
import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext;
import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContextFactory;

import jakarta.xml.bind.JAXBException;
import jakarta.xml.bind.Marshaller;

public class Demo {

    public static void main(String[] args) throws JAXBException {
        final ClassLoader classLoader = Demo.class.getClassLoader();
        final InputStream xsd = classLoader.getResourceAsStream("customer.xsd");
        //final InputStream xml = classLoader.getResourceAsStream("customer.xml");

        Map<String, Object> properties = new HashMap<String, Object>(1);
        properties.put("eclipselink.beanvalidation.facets", true);

        System.setProperty("com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.noCorrectnessCheck", "true");
        final DynamicJAXBContext jaxbContext = DynamicJAXBContextFactory.createContextFromXSD(xsd, null, classLoader, properties);
        DynamicEntity customer = jaxbContext.newDynamicEntity("org.JaxBDynamic.Customer");
        DynamicEntity address = jaxbContext.newDynamicEntity("org.JaxBDynamic.Address");
        customer.set("name", "Jane Doe");
        address.set("street", "1 Any Street").set("city", "Any Town");
        customer.set("address", address);
        Marshaller marshaller = jaxbContext.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(customer, System.out);
    }
}

我在pom.xml 中关注了dependency

<dependency>
    <groupId>jakarta.xml.bind</groupId>
    <artifactId>jakarta.xml.bind-api</artifactId>
    <version>3.0.1</version>
</dependency>

<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>eclipselink</artifactId>
    <version>3.0.0</version>
</dependency>

<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-xjc</artifactId>
    <version>3.0.2-b01</version>
</dependency>

运行时出现以下错误:

[EL Warning]: moxy: 2021-05-28 10:54:09.432--MOXy BV: Facets generation could not be configured. EclipseLink's JavaModelInputImpl was not detected, instead JavaModelInput is of class: class org.eclipse.persistence.jaxb.javamodel.xjc.XJCJavaModelInputImpl
Exception in thread "main" java.lang.NullPointerException
    at org.eclipse.persistence.jaxb.compiler.AnnotationsProcessor.preProcessXmlAccessorType(AnnotationsProcessor.java:1628)
    at org.eclipse.persistence.jaxb.compiler.AnnotationsProcessor.preBuildTypeInfo(AnnotationsProcessor.java:603)
    at org.eclipse.persistence.jaxb.compiler.AnnotationsProcessor.processClassesAndProperties(AnnotationsProcessor.java:304)
    at org.eclipse.persistence.jaxb.compiler.Generator.<init>(Generator.java:115)
    at org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext$SchemaContextInput.createContextState(DynamicJAXBContext.java:350)
    at org.eclipse.persistence.jaxb.JAXBContext.<init>(JAXBContext.java:206)
    at org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext.<init>(DynamicJAXBContext.java:85)
    at org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContextFactory.createContextFromXSD(DynamicJAXBContextFactory.java:281)
    at com.JaxBDynamic.Demo.main(Demo.java:25)

我不确定出了什么问题,因为我正在按照documentation 中提到的步骤进行操作。我找不到与此问题相关的任何内容,因此在此处发布以获得一些反馈。

【问题讨论】:

    标签: java xml jaxb eclipselink moxy


    【解决方案1】:

    正如您所写,您正在尝试按照文档实现 JAXB,但您链接的文档适用于 EclipseLink 2.5 版,并且您遇到了 EL v2.6 中添加的功能的问题。当前的稳定版本是 3.0.0,您正在运行,基于您的 pom.xml

    查看 EL 的更新文档。由于主页上没有您遇到问题的功能的文档链接,您可以在此处找到它: https://wiki.eclipse.org/EclipseLink/Examples/MOXy/BVinJAXB 和概念介绍here

    【讨论】:

      【解决方案2】:

      解决方案

      消息

      "[EL Warning]: moxy: 2022-01-06 14:59:32.0--MOXy BV: Facets generation could not be configured. EclipseLink's JavaModelInputImpl was not detected, instead..."
      

      不对 NullPointerException 负责,因此,这不是问题。除此之外,使用 Eclipselink moxy 和 jasb-xjc 的匹配版本:

      <dependency>
          <groupId>org.eclipse.persistence</groupId>
        <artifactId>org.eclipse.persistence.moxy</artifactId>
          <version>3.0.1</version>
          <scope>compile</scope>
      </dependency>
      <dependency>
          <groupId>com.sun.xml.bind</groupId>
          <artifactId>jaxb-xjc</artifactId>
          <version>3.0.1</version>
      </dependency>
      

      如果存在,请删除文件 jaxb.properties,因为在动态 jaxb 上下文的情况下不需要它。

      【讨论】:

        猜你喜欢
        • 2023-03-27
        • 1970-01-01
        • 2014-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-18
        • 2013-06-28
        • 1970-01-01
        相关资源
        最近更新 更多