微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

动态 JAXB/MOXy 编组抛出 MOXy BV:无法配置构面生成

如何解决动态 JAXB/MOXy 编组抛出 MOXy BV:无法配置构面生成

我正在尝试遵循 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);
    }
}

我在 dependency 中有以下 pom.xml

<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 中提到的步骤进行操作。我找不到与此问题相关的任何内容,因此请在此处发帖以获得一些反馈。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。