2014-10-10 146 views
0

試圖實例一個ObjectFactory當我得到在eclipse下面的編譯錯誤:無法實例類型的ObjectFactory

cannot instantiate the type objectfactory 

此編譯錯誤是在下面的行拋出:

objectFactory = new ObjectFactory();//throws error: "Cannot instantiate the type ObjectFactory" 

完整代碼爲如下呼叫類別:

package maintest; 

import java.io.File; 
import javax.naming.spi.ObjectFactory; 
import javax.xml.bind.JAXBContext; 
import javax.xml.bind.JAXBElement; 
import javax.xml.bind.JAXBException; 
import javax.xml.bind.Unmarshaller; 

public class Main { 

    private static JAXBContext context; 
    private static ObjectFactory objectFactory; 

    public static void main(String[] args) { 
     try {setUp();} catch (Exception e) {e.printStackTrace();} 
     unmarshal(); 
    } 

    protected static void setUp() throws Exception { 
     context = JAXBContext.newInstance("generated"); 
     objectFactory = new ObjectFactory();//throws error: "Cannot instantiate the type ObjectFactory" 
    } 

    public static <PurchaseOrderType> void unmarshal(){ 
     Unmarshaller unmarshaller; 
     try { 
      unmarshaller = context.createUnmarshaller(); 
      final Object object = unmarshaller.unmarshal(new File("src/test/samples/po.xml")); 
     } catch (JAXBException e) {e.printStackTrace();} 
    } 
} 

如何解決此錯誤?

+1

'javax.naming.spi.ObjectFactory'是一個接口,不是類。你需要實例化它的一個實現。 – azurefrog 2014-10-10 19:45:08

+0

您使用的是什麼JNDI實現?我希望它的API有一些方法來獲得對象工廠。 – azurefrog 2014-10-10 19:51:43

+0

你需要什麼ObjectFactory(在你的示例中沒有用法)?你確定要使用javax.naming.spi包中的那個,而不是xjc生成的嗎? – Puce 2014-10-10 20:12:38

回答

3

我的猜測是,你輸入了錯誤的ObjectFactory。您可能希望由xjc(JAXB related)生成的不是來自javax.naming.spi(JNDI的服務提供者接口)的生成的。

編輯

javax.xml.bind.JAXBException: 「生成的」 犯規含有 ObjectFactory.class或jaxb.in​​dex

確保 「產生」 包包含無論是ObjectFactory(帶有@XmlRegistry註釋的對象,不是javax.naming.spi.ObjectFactory實現)或jaxb.in​​dex文件。

你也許可以從代碼中刪除javax.naming.spi.ObjectFactory,除非你實現自己一個JNDI實現。

+0

你產生從XSD的JAXB類?然後在同一個包中也應該有一個ObjectFactory。使用那個。如果你自己寫的JAXB類,而不是生成它們(但它只有在你需要創建JAXBElements必要的。否則,只是從你的代碼中刪除的ObjectFactory對象(而不是類)。) – Puce 2014-10-10 20:21:09

+0

,那麼看看下面的問題:http://stackoverflow.com/questions/5780184/what-is-the-objectfactory-role-during-jaxb-unmarshalling – Puce 2014-10-10 20:23:54

+0

如果產生與Maven的JAXB2,插件類,然後Eclipse應當看到它OUT-現成的,AFAIK。也許只是試圖重新導入項目(如Maven項目)。 – Puce 2014-10-10 20:33:04

1

請嘗試以下

import javax.naming.spi.ObjectFactory; 
    import javax.naming.Context; 
    import javax.naming.Name; 
    import java.util.Hashtable; 

    ObjectFactory objFactory = new ObjectFactory() { 

    @Override 
    public Object getObjectInstance(Object o, Name name, Context cntxt, Hashtable<?, ?> hshtbl) throws Exception { 
     throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    } 
}; 
+0

我在Netbeans,但我在我的答案中添加了Name,Context和Hashtable所需的導入。 – Sybren 2014-10-10 19:53:54

+0

+1,並感謝您嘗試提供幫助。 – CodeMed 2014-10-10 22:29:34

+0

沒問題,你的歡迎 – Sybren 2014-10-11 12:28:00