【问题标题】:How do I solve EclipseLink's (MOXy) 'getting property "eclipselink.oxm.metadata-source" is not supported'?如何解决 EclipseLink 的 (MOXy) '获取属性“eclipselink.oxm.metadata-source”不受支持'?
【发布时间】:2014-03-25 15:28:26
【问题描述】:

我主要根据 EclipseLink 网站上的教程整理了以下代码:

    Partner p = new Partner();
    p.setId(1);
    p.setKey("a");
    p.setName("this is the name");

    Map<String, Source> metadataSourceMap = new HashMap<String, Source>();
    metadataSourceMap.put("com.company.pas.entity.partner", new StreamSource("/com/company/pas/entity/mapping/partner-pojo2xml.xml"));
    Map<String, Object> properties = new HashMap<String, Object>();
    properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, metadataSourceMap);
    JAXBContext jaxbContext = JAXBContext.newInstance(new Class[] {Partner.class}, properties);

当我尝试运行这段代码时,我得到的只是一个异常:

Exception in thread "main" javax.xml.bind.JAXBException: property "eclipselink.oxm.metadata-source" is not supported
    at com.sun.xml.internal.bind.v2.ContextFactory.createContext(ContextFactory.java:115)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:248)
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:235)
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:445)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:637)

我没有在此处包含“映射文件”(partner-pojo2xml.xml),因为无论是否将映射文件添加到metaDataSourceMap,都会发生异常。

pom.xml 中的相关部分可以在下面找到。

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

我做错了什么?我尝试了太多组合,但我就是无法让它运行。

【问题讨论】:

    标签: eclipselink moxy


    【解决方案1】:

    您需要确保您有一个 jaxb.properties 文件,其中包含以下条目:

    javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
    

    当您使用 Maven 时,此文件需要位于与用于引导 JAXBContext 的类的包名称匹配的目录结构中。这个结构需要放在src/main/resources 文件夹下。下面是我在 GitHub 中的一个示例的链接:

    【讨论】:

    • 这是否意味着 jaxb.properties 需要位于我的映射文件(例如“partner-pojo2xml.xml”)文件所在的包中,而不是我的实际 POJO 文件所在的包中?我试图将此文件与我的 POJO 文件放在同一个包中(JAXB 所需的 ObjectFactory 类也位于该包中)。
    • @sbrattla - 您需要确保jaxb.propertiessrc/main/resources 之下,而不是src/main/java。这是一个将我的 GitHub 示例作为 ZIP 的链接,因此您可以看到它的工作原理:github.com/bdoughan/blog20110322/archive/master.zip
    猜你喜欢
    • 1970-01-01
    • 2012-01-14
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 2011-02-06
    • 2011-08-28
    • 2023-02-20
    • 2021-05-20
    相关资源
    最近更新 更多