Почему jibx бросает java.lang.IllegalAccessError: null для защищенного конечного свойства?

Я изучаю jibx для преобразования xml-файла в java-объект, все работает хорошо, пока не наткнулся на исключение IllegalAccessError. Я провожу много времени, и, наконец, я обнаружил, что это вызвано правильным окончательным свойством. Простая демонстрация показывает ниже:

//xml 
<type name="test"></type>

//binding
<binding>
   <mapping name="type" class="demo.MyType" value-style="attribute">
      <value name="name" field="name" usage="required" />
   </mapping>
</binding>

//java class
public class MyType{
   // only protected final will cause the error, private final works well.
   protected final name;
   public MyType(){
      name = "demo";
   }
}

// convert method
IBindingFactory bindingFactory = BindingDirectory.getFactory(MyType.class);
        IUnmarshallingContext uctx = 
bindingFactory.createUnmarshallingContext();
        Manifest manifest = (Manifest) uctx.unmarshalDocument(new 
FileInputStream("demo.xml"), null);

Я знаю, что защищенное конечное свойство в приведенной выше демонстрации не имеет смысла, но в моей реальной ситуации код пишется другими, а защищенное конечное свойство находится в суперклассе.

Я просто хочу знать, почему jibx сгенерирует IllegalAccessError только для защищенного конечного свойства?

Стек подробных ошибок показан ниже (ошибка в моей среде, а не ошибка для приведенной выше демонстрации):

java.lang.IllegalAccessError: null
    at self.jason.study.cartridge.api.JiBX_cartridge_demoMungeAdapter.JiBX_cartridge_demo_unmarshalAttr_1_0() ~[classes/:na]
    at self.jason.study.cartridge.api.JiBX_cartridge_demoManifest_access13.unmarshal() ~[classes/:na]
    at org.jibx.runtime.impl.UnmarshallingContext.unmarshalElement(UnmarshallingContext.java:2757) ~[jibx-run-1.3.1.jar:na]
    at org.jibx.runtime.impl.UnmarshallingContext.unmarshalDocument(UnmarshallingContext.java:2900) ~[jibx-run-1.3.1.jar:na]
    at self.jason.study.cartridge.CartridgeApplication.lambda$0(CartridgeApplication.java:24) [classes/:na]
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:797) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE]
    at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:781) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1255) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1243) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE]
    at self.jason.study.cartridge.CartridgeApplication.main(CartridgeApplication.java:31) [classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_73]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_73]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_73]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_73]
    at org.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run(AbstractRunMojo.java:496) [spring-boot-maven-plugin-2.0.3.RELEASE.jar:2.0.3.RELEASE]
    at java.lang.Thread.run(Unknown Source) [na:1.8.0_73]

[WARNING]
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke (Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke (Unknown Source)
at java.lang.reflect.Method.invoke (Unknown Source)
at org.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run (AbstractRunMojo.java:496)
at java.lang.Thread.run (Unknown Source)
Caused by: java.lang.IllegalAccessError
at self.jason.study.cartridge.api.JiBX_cartridge_demoMungeAdapter.JiBX_cartridge_demo_unmarshalAttr_1_0 ()
at self.jason.study.cartridge.api.JiBX_cartridge_demoManifest_access13.unmarshal ()
at org.jibx.runtime.impl.UnmarshallingContext.unmarshalElement (UnmarshallingContext.java:2757)
at org.jibx.runtime.impl.UnmarshallingContext.unmarshalDocument (UnmarshallingContext.java:2900)
at self.jason.study.cartridge.CartridgeApplication.lambda$0 (CartridgeApplication.java:24)
at org.springframework.boot.SpringApplication.callRunner (SpringApplication.java:797)
at org.springframework.boot.SpringApplication.callRunners (SpringApplication.java:781)
at org.springframework.boot.SpringApplication.run (SpringApplication.java:335)
at org.springframework.boot.SpringApplication.run (SpringApplication.java:1255)
at org.springframework.boot.SpringApplication.run (SpringApplication.java:1243)
at self.jason.study.cartridge.CartridgeApplication.main (CartridgeApplication.java:31)
at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke (Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke (Unknown Source)
at java.lang.reflect.Method.invoke (Unknown Source)
at org.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run (AbstractRunMojo.java:496)
at java.lang.Thread.run (Unknown Source)

0 ответов

Другие вопросы по тегам