2014-10-10 9 views
0

ObjectFactory를 인스턴스화 할 때 나는 일식에 다음과 같은 컴파일 오류가 무엇입니까를 인스턴스화 할 수 없습니다 :는 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

+0

어떤 JNDI 구현을 사용하고 있습니까? 나는 그 API가 객체 팩토리를 얻는 방법을 가질 것으로 기대한다. – azurefrog

+0

ObjectFactory에는 무엇이 필요합니까 (샘플에는 용도가 없음)? xjc에 의해 생성 된 패키지가 아닌 javax.naming.spi 패키지의 패키지를 사용 하시겠습니까? – Puce

답변

3

내 생각이 잘못된 ObjectFactory를 수입한다는 것입니다보십시오. JNDI의 서비스 공급자 인터페이스 인 javax.naming.spi가 아닌 xjc (JAXB 관련)에 의해 생성 된 것을 원했을 것입니다.

편집이

가 javax.xml.bind.JAXBException : ObjectFactory.class를 포함하거나

이 있는지 확인 jaxb.index 나던 "생성"는 "생성"패키지에 포함 된 중 하나 ObjectFactory (javax.naming.spi.ObjectFactory 구현이 아닌 @XmlRegistry 주석이있는 객체) 또는 jaxb.index 파일

직접 JNDI 구현을 구현하지 않는 한, 코드에서 javax.naming.spi.ObjectFactory를 제거 할 수 있습니다.

+0

XSD에서 JAXB 클래스를 생성 했습니까? 그런 다음 동일한 패키지에 ObjectFactory도 있어야합니다. 그걸 사용하십시오. (그러나 JAXBElements를 생성해야하는 경우에만 필요합니다. 그렇지 않으면 코드에서 클래스가 아닌 ObjectFactory 객체를 제거하십시오.) – Puce

+0

JAXB 클래스를 생성하는 것이 아니라 직접 작성하는 경우 다음을 살펴보십시오 질문 : http://stackoverflow.com/questions/5780184/what-is-the-objectfactory-role-during-jaxb-unmarshalling – Puce

+0

maven-jaxb2-plugin을 사용하여 클래스를 생성 한 경우 Eclipse는이를 out- of-the-the-box, AFAIK. 아마도 Maven 프로젝트처럼 프로젝트를 다시 가져와보십시오. – Puce

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에 있지만 이름, 컨텍스트 및 Hashtable에 필요한 수입을 제 대답에 추가했습니다. – Sybren

+0

+1 그리고 도움을 주셔서 감사합니다. – CodeMed

+0

문제가되지 않는다면 환영합니다 – Sybren

관련 문제