2014-03-25 50 views
1

我已經得到了下面的一段代碼,我已經把主要基於教程上的EclipseLink的網站:如何解決EclipseLink(MOXy)'獲取屬性「eclipselink.oxm.metadata-source」不受支持「?

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) 

爲例外,無論映射文件是否被添加到metaDataSourceMap或不出現我沒有包括「映射文件」(合作伙伴pojo2xml.xml)這裏。

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

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

我在做什麼錯?我嘗試了太多的組合,但我無法讓它運行。

回答

3

你需要確保你有一個jaxb.properties文件,輸入以下內容:

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

當您使用Maven的這個文件需要在目錄結構匹配用來引導類的包名稱JAXBContext。這個結構需要在src/main/resources文件夾下。下面是一個例子的鏈接我在GitHub上:

+0

這是否意味着jaxb.properties需要在包在我的映射文件(例如,「合作伙伴pojo2xml.xml」 )文件的位置,而不是我實際的POJO文件所在的包?我試圖把這個文件放在與我的POJO文件(JAXB所需的ObjectFactory類所在的位置)相同的包中。 – sbrattla

+0

@sbrattla - 您需要確保'jaxb.properties'位於'src/main/resources'下,而不是'src/main/java'。這裏是一個鏈接,讓我的GitHub例子作爲一個ZIP,所以你可以看到這個工作:https://github.com/bdoughan/blog20110322/archive/master.zip –

+1

好吧,我會試試看。謝謝! – sbrattla

相關問題