2012-10-19 56 views
2

我有針對XML模式的jaxb對象。該XML模式可以有不同的根元素。在主項目中它完美無缺。基於這些生成的對象,我試圖編寫一些測試用例。解組jaxb對象時發生錯誤

我寫了下面的代碼獲取的JAXBContext

JAXBContext jaxbContext = JAXBContext.newInstance("com.store.web.ws.v1.model"); 

,我得到以下異常

com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions 
java.lang.StackTraceElement does not have a no-arg default constructor. 
    this problem is related to the following location: 
     at java.lang.StackTraceElement 
     at public java.lang.StackTraceElement[] java.lang.Throwable.getStackTrace() 
     at java.lang.Throwable 
     at java.lang.Error 
     at public java.lang.Error com.store.web.ws.v1.model.ObjectFactory.createError() 
     at com.store.web.ws.v1.model.ObjectFactory 

    at com.sun.xml.bind.v2.runtime.IllegalAnnotationsException$Builder.check(IllegalAnnotationsException.java:106) 
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:466) 
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:298) 
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:141) 
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1157) 
    at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:145) 
    at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:236) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:128) 
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:277) 
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:372) 
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:337) 
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:244) 
    at com.store.web.ws.v1.resource.RequestInfo.main(RequestInfo.java:171) 

然而,那一刻我我的上下文行更改爲

JAXBContext jaxbContext = JAXBContext.newInstance(BookType.class); 

我獲得以下例外SEVERE: unexpected element (uri:"", local:"book"). Expected elements are (none)這是可以理解的基礎上我以前的question

有人可以幫我嗎?我想根據包名創建一個上下文。

+0

你能張貼BOOKTYPE源? – r0ast3d

回答

3

看起來好像你的模式生成的類之一被稱爲Error,並且編譯器已經從com.store.web.ws.v1.model.Error類中選擇了java.lang.Error類。嘗試把一個明確的

import com.store.web.ws.v1.model.Error; 

ObjectFactory.java頂部並重新編譯,或做不到這一點編輯使用完全合格的類名的代碼。

public com.store.web.ws.v1.Error createError() { 
    return new com.store.web.ws.v1.Error(); 
} 

(或更改類的名稱和它重新映射到使用@XmlRootElement(name="Error")正確的元素名稱)

+0

o wao。我將這些文件從一個工作區複製到其他工作區,編輯人員進行這些更改。我的createError被改成了'java.lang.Error createError()'。將其更改回默認的'Error'對象,並且它像魅力一樣工作。 –