XML をアンマーシャリングしようとしているときに深刻な問題が発生しました。最初は、メンバー要素には「値」属性に整数のみが含まれていましたが (最初の「EnumType」要素のように)、値として文字列を含む別の「EnumType」が表示されるようになりました。次の NullPointerException が発生しています。
Member.java の 'value' メンバーは、最初は (Integer のみが Member 要素の値として受け入れられたとき) 型が "int" であり、正常に機能したことに注意してください。オブジェクトに変更した場合にのみ(これが問題の原因だと思います)、以下の例外が発生しました。
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;
}
}
メンバー.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 が発生します。
com.sun.xml.internal.bind.v2.runtime.reflect.TransducedAccessor.get での java.lang.NullPointerException (不明なソース) com.sun.xml.internal.bind.v2.runtime.property.AttributeProperty.(Unknownソース) 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 (不明なソース) com.sun.xml.internal で。 bind.v2.runtime.property.ArrayElementProperty.(未知のソース) at com.sun.xml.internal.bind.v2.runtime.property.ArrayElementNodeProperty.(未知のソース) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at太陽。反射します。com.sun.xml.internal.bind.v2.runtime.property. com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl の PropertyFactory.create (不明なソース)。com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getOrCreate の (不明なソース) (不明なソース) com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getOrCreate (不明なソース) で com.sun.xml.internal.bind.v2.runtime.property.ArrayElementProperty.(不明なソース) で com.sun. xml.internal.bind.v2.runtime.property.ArrayElementNodeProperty.(未知のソース) (sun.reflect.NativeConstructorAccessorImpl.newInstance0) (ネイティブ メソッド) at sun.reflect.com.sun.xml.internal.bind.v2.runtime.property. com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl の PropertyFactory.create (不明なソース)。com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getOrCreate の (不明なソース) (不明なソース) com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getOrCreate (不明なソース) で com.sun.xml.internal.bind.v2.runtime.property.SingleElementNodeProperty.(不明なソース) で sun.reflect. Sun.reflect の NativeConstructorAccessorImpl.newInstance0(ネイティブ メソッド).NativeConstructorAccessorImpl.newInstance(未知のソース)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 (不明なソース) com.sun.xml.internal.bind.v2.runtime.property.SingleElementNodeProperty.(不明なソース) で sun.reflect.NativeConstructorAccessorImpl.newInstance0 (ネイティブ メソッド) で sun.reflect. Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(不明なソース) の NativeConstructorAccessorImpl.newInstance(不明なソース)com.sun.xml.internal.bind.v2.runtime.property.PropertyFactory.create (不明なソース) の Constructor.newInstance (不明なソース) 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.(不明なソース) com.sun. xml.internal.bind.v2.runtime.JAXBContextImpl.(不明なソース) com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(不明なソース) com.sun.xml.internal.bind .v2.ContextFactory.createContext (未知のソース) の sun.reflect.NativeMethodAccessorImpl.invoke0 (ネイティブ メソッド) の sun.reflect.NativeMethodAccessorImpl.invoke (未知のソース) の sun.reflect.DelegatingMethodAccessorImpl.javax.xml.bind.ContextFinder.newInstance で java.lang.reflect.Method.invoke(不明なソース) で javax.xml.bind.ContextFinder.newInstance(不明なソース) で javax.xml.bind.ContextFinder.newInstance(不明なソース) で java.lang.reflect.Method.invoke(不明なソース) を呼び出します。 javax.xml.bind.JAXBContext.newInstance の xml.bind.ContextFinder.find (未知のソース) (com.sap.ndb.studio.rdl の javax.xml.bind.JAXBContext.newInstance (未知のソース))。 org.eclipse.swt.browser.WebSite の com.sap.ndb.studio.rdl.datapreview.functions.LoadGRDL.function(LoadGRDL.java:59) の csdlparser.jaxb.JAXBParser.load(JAXBParser.java:26)。 Invoke(WebSite.java:773) at org.eclipse.swt.browser.WebSite$7.method6(WebSite.java:129) at org.eclipse.swt.internal.ole.win32.COMObject.callback6(COMObject.java:119) ) org.eclipse.swt.internal.win32.OS で。org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3756) の org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2546) の DispatchMessageW (ネイティブ メソッド)。 ui.internal.Workbench.runEventLoop(Workbench.java:2701) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665) at org.eclipse.ui.internal.Workbench.access$4(Workbench.java) :2499) org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679) で org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) で org.eclipse.ui org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) の .internal.Workbench.createAndRunWorkbench(Workbench.java:668) org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java) :124) org.eclipse.equinox.internal.app.org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) の EclipseAppHandle.run(EclipseAppHandle.java:196) org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start( EclipseAppLauncher.java:79) で org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353) で org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180) で Sun で.reflect.NativeMethodAccessorImpl.invoke0 (ネイティブ メソッド) (sun.reflect.NativeMethodAccessorImpl.invoke (不明なソース))、sun.reflect.DelegatingMethodAccessorImpl.invoke (不明なソース)、java.lang.reflect.Method.invoke (不明なソース)、org .eclipse.equinox.launcher.Main.invokeFramework(Main.java:629) org.eclipse.equinox.launcher.Main.basicRun(Main.java:584) at org.eclipse.equinox.launcher.Main.run(Main.java:1438) at org.eclipse.equinox.launcher.Main.main(Main.java:1414)
何か案は?:(