首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态JAXB/MOXy编组抛出MOXy BV:无法配置Facets生成

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

Stack Overflow用户
提问于 2021-05-28 13:33:12
回答 1查看 88关注 0票数 1

我正在尝试遵循documentation并实现Dynamic JAXB/Moxy marshalling。但它并没有像预期的那样工作,并抛出了以下错误:

代码语言:javascript
复制
[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

我的XSDresources文件夹中,我使用的是documentation中的XSD。在阅读之后,我尝试在旅途中为它创建POJO,并使用编组方法来创建它。下面是它的代码:

代码语言:javascript
复制
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

代码语言:javascript
复制
<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>

当我运行时,我得到以下错误:

代码语言:javascript
复制
[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中提到的步骤。我找不到任何与这个问题相关的东西,所以在这里发帖以获得一些反馈。

EN

回答 1

Stack Overflow用户

发布于 2021-08-22 07:11:07

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

查看较新的EL文档。由于您遇到问题的特性的文档链接没有出现在主页上,因此您可以在此处找到:https://wiki.eclipse.org/EclipseLink/Examples/MOXy/BVinJAXB And presentation of the concepts here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67733375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档