2014-10-10 118 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