2013-02-20 31 views
2


我有一個嚴重的問題,而試圖解組XML。首先,成員元素在其「value」屬性中僅包含Integer(如第一個'EnumType'元素),但是,現在另一個'EnumType'以字符串的值出現 - 我得到了下面的NullPointerException。

注意的是,在所述Member.java「值」構件是從類型「INT」開頭(當僅整數被接納爲會員元件的值)和它工作得很好。只有當我將其更改爲Object(並且我認爲這是我的問題的來源)時,纔會出現以下例外。NullPointerException異常屬性類型相同的java對象

XML:

<EnumType Name="Genre" UnderlyingType="Edm.Int32"> 
    <Member Name="ACTION" Value="0"/> 
    <Member Name="COMEDY" Value="1"/> 
</EnumType> 
<EnumType Name="Rating" UnderlyingType="Edm.String"> 
    <Member Name="RatingA" Value="G"/> 
    <Member Name="RatingB" Value="PG"/> 
</EnumType> 

EnumType.java

@XmlRootElement 
public class EnumType { 

    @XmlElement(name = "Member", namespace = "http://schemas.microsoft.com/ado/2009/11/edm") 
    private List<Member> members = new LinkedList<Member>(); 

    public List<Member> getMembers() { 
     return members; 
    } 
} 

Member.Java

@XmlRootElement 
public class Member { 

    @XmlAttribute(name = "Name") 
    private String name; 

    @XmlAttribute(name = "Value") 
    private Object value; 

    public String getName() { 
     return name; 
    } 

    public Object getValue() { 
     return value; 
    } 
} 

當解編上面的XML我得到這個NullPointerException異常:

顯示java.lang.NullPointerException 在com.sun.xml.internal.bind.v2.runtime.reflect.TransducedAccessor.get(未知來源) 在com.sun.xml.internal.bind.v2.runtime .property.AttributeProperty。(未知來源) 在com.sun.xml.internal.bind.v2.runtime.property.PropertyFactory.create(未知來源) 在com.sun.xml.internal.bind.v2.runtime。 ClassBeanInfoImpl。(Unknown Source) at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getOrCreate(Unknown Source) at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getOrCreate(Unknown源) at com.sun.xml.internal.bind.v2.runtime.property.ArrayElementProperty。(Unknown Source) 在com.sun.xml.internal.bind.v2.runtime.property.ArrayElementNodeProperty。(來源不明) 在sun.reflect.NativeConstructorAccessorImpl.newInstance0(本機方法) 在sun.reflect.NativeConstructorAccessorImpl.newInstance(來源不明) 在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知來源) 在java.lang.reflect.Constructor.newInstance(未知來源) 在com.sun.xml.internal.bind.v2.runtime.property.PropertyFactory.create(未知源) 在com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl。(來源不明) 在com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getOrCreate(來源不明) 在COM .sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getOrCreate(Unknown Source) 在com.sun.xml.internal.bind.v2.runtime.property.ArrayElementProperty。(未知來源) 在com.sun.xml.internal.bind.v2.runtime.property.ArrayElementNodeProperty。(未知來源) 在sun.reflect.NativeConstructorAccessorImpl.newInstance0(本機方法) 在sun.reflect.NativeConstructorAccessorImpl.newInstance(來源不明) 在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(來源不明) 在java.lang.reflect.Constructor.newInstance(未知源) at com.sun.xml.internal.bind.v2.runtime.property.PropertyFactory.create(Unknown Source) at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl。(Unknown Source) at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getOrCreate(Unknown Source) 在com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl。getOrCreate(來源不明) 在com.sun.xml.internal.bind.v2.runtime.property.SingleElementNodeProperty。(來源不明) 在sun.reflect.NativeConstructorAccessorImpl.newInstance0(本機方法) 在sun.reflect.NativeConstructorAccessorImpl。 newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at com.sun.xml.internal.bind.v2.runtime.property .PropertyFactory.create(未知來源) 在com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl。(未知來源) 在com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getOrCreate(未知來源) at com.sun.xml.internal.bind.v2.runtime.JAXBContextI mpl.getOrCreate(Unknown Source) at com.sun.xml.internal.bind.v2.runtime.property.SingleElementNodeProperty。(Unknown Source) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect。 NativeConstructorAccessorImpl.newInstance(來源不明) 在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(來源不明) 在java.lang.reflect.Constructor.newInstance(來源不明) 在com.sun.xml.internal.bind.v2.runtime .property.PropertyFactory.create(未知來源) 在com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl。(未知來源) 在com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl。 getOrCreate(來源不明) 在com.sun.xml.internal.bind.v2.runtime.JAXBCont extImpl。(來源不明) 在com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl。(來源不明) 在com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl $ JAXBContextBuilder.build( (未知源) at com.sun.xml.internal.bind.v2.ContextFactory.createContext 在sun.reflect.DelegatingMethodAccessorImpl.invoke(未知來源) 在java.lang.reflect.Method.invoke(未知來源) 在javax.xml.bind.ContextFinder.newInstance(未知來源) 在javax.xml.bind中.ContextFinder.newInstance(未知源) at javax.xml.bind.ContextFinder.fi nd(Unknown Source) at javax.xml.bind.JAXBContext.newInstance(Unknown Source) at javax.xml.bind.JAXBContext.newInstance(Unknown Source) at com.sap.ndb.studio.rdl.csdlparser.jaxb .JAXBParser.load(JAXBParser.java:26) at com.sap.ndb.studio.rdl.datapreview.functions.LoadGRDL.function(LoadGRDL.java:59) at org.eclipse.swt.browser.WebSite.Invoke (WebSite.java:773) 在org.eclipse.swt.browser.WebSite $ 7.method6(WebSite.java:129) 在org.eclipse.swt.internal.ole.win32.COMObject.callback6(COMObject.java: 119) at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method) at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2546) at org.eclipse.swt .widgets.Display.r eadAndDispatch(Display.java:3756) 在org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701) 在org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665) 在org.eclipse.ui.internal.Workbench.access $ 4(Workbench.java:2499) 在org.eclipse.ui.internal.Workbench $ 7.run(Workbench.java:679) 在org.eclipse.core.databinding。在org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)上的org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668) 處的observable.Realm.runWithDefault(Realm.java:332) 在org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124) 在org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle。的java:196) 在org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) 在org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java: 79) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180) at sun。 reflect.NativeMethodAccessorImpl.invoke0(本機方法) 在sun.reflect.NativeMethodAccessorImpl.invoke(來源不明) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(來源不明) 在java.lang.reflect.Method.invoke(來源不明) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629) 在org.eclipse.equinox.launcher.Main.basicRun(Main.java:584) 在org.eclipse.equinox.launcher.Main.run(Main.java:1438) 在org.eclipse.equinox.launcher。 Main.main(Main.java:1414)

任何想法? :(

+0

爲什麼你沒有'Name'和'UnderlyingType'在你的'EnumType'類中聲明? – flash 2013-02-20 16:05:21

+0

可能重複[JAXB屬性與對象類型拋出空指針異常?](http://stackoverflow.com/questions/14899555/jaxb-attribute-with-object-type-throwing-null-pointer-exception) – 2013-02-20 16:14:56

回答

4

當你註釋Object類型的字段/屬性與@XmlAttribute的JAXB RI將拋出該異常就像你在你的Member類:

@XmlAttribute(name = "Value") 
private Object value; 

更多信息

+1

保存我的天。謝謝! – Zds 2014-03-05 12:28:13

+0

何我!!!也節省了我的一天 – 2016-02-25 00:55:48

相關問題