【问题标题】:InjectionUtils can not access a member of class DateTimeZoneBuilder$PrecalculatedZoneInjectionUtils 无法访问 DateTimeZoneBuilder$PrecalculatedZone 类的成员
【发布时间】:2014-11-10 08:55:42
【问题描述】:

我正在尝试使用 cxf 实现发送发布请求。但我得到了

java.lang.IllegalAccessException:类 org.apache.cxf.jaxrs.utils.InjectionUtils 无法使用修饰符“public”访问 org.joda.time.tz.DateTimeZoneBuilder$PrecalculatedZone 类的成员

我的方法接口是:

@GET
@Path("history")
HistoryResult getHistory(@Valid @QueryParam("") HistoryParameters historyParameters)

HistoryParameters 有两个约达时间 LocalDate : 公共类 HistoryParameters {

    @NotNull
    @QueryParam("historyType")
    private HistoryType historyType;

    @FieldDescription(title = "Archive from date", value = "Archive from date")
    @QueryParam("archiveFromDate")
    private LocalDate archiveFromDate;

    @FieldDescription(title = "Archive to date", value = "Archive to date")
    @QueryParam("archiveToDate")
    private LocalDate archiveToDate;

    public HistoryParameters() {

    }
    ...
}

这里是堆栈跟踪:

java.lang.IllegalAccessException:类 org.apache.cxf.jaxrs.utils.InjectionUtils 无法访问带有修饰符“public”的类 org.joda.time.tz.DateTimeZoneBuilder$PrecalculatedZone 的成员 在 sun.reflect.Reflection.ensureMemberAccess(Reflection.java:109) 在 java.lang.reflect.AccessibleObject.slowCheckMemberAccess(AccessibleObject.java:261) 在 java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:253) 在 java.lang.reflect.Method.invoke(Method.java:599) 在 org.apache.cxf.jaxrs.utils.InjectionUtils.extractFromMethod(InjectionUtils.java:324) 在 org.apache.cxf.jaxrs.utils.InjectionUtils.extractFromMethod(InjectionUtils.java:316) 在 org.apache.cxf.jaxrs.utils.InjectionUtils.fillInValuesFromBean(InjectionUtils.java:1147) 在 org.apache.cxf.jaxrs.utils.InjectionUtils.fillInValuesFromBean(InjectionUtils.java:1174) 在 org.apache.cxf.jaxrs.utils.InjectionUtils.fillInValuesFromBean(InjectionUtils.java:1174) 在 org.apache.cxf.jaxrs.utils.InjectionUtils.fillInValuesFromBean(InjectionUtils.java:1174) 在 org.apache.cxf.jaxrs.utils.InjectionUtils.fillInValuesFromBean(InjectionUtils.java:1174) 在 org.apache.cxf.jaxrs.utils.InjectionUtils.fillInValuesFromBean(InjectionUtils.java:1174) 在 org.apache.cxf.jaxrs.utils.InjectionUtils.fillInValuesFromBean(InjectionUtils.java:1174) 在 org.apache.cxf.jaxrs.utils.InjectionUtils.fillInValuesFromBean(InjectionUtils.java:1174) 在 org.apache.cxf.jaxrs.utils.InjectionUtils.extractValuesFromBean(InjectionUtils.java:1109) 在 org.apache.cxf.jaxrs.client.AbstractClient.addMatrixQueryParamsToBuilder(AbstractClient.java:677) 在 org.apache.cxf.jaxrs.client.ClientProxyImpl.handleQueries(ClientProxyImpl.java:455) 在 org.apache.cxf.jaxrs.client.ClientProxyImpl.invoke(ClientProxyImpl.java:178) 在 com.sun.proxy.$Proxy78.getHistoryEntries(Unknown Source)

【问题讨论】:

  • DateTimeZoneBuilder$PrecalculatedZone 似乎是一个私有内部类,因此该消息确实有意义。我不太了解 CXF 和 JodaTime,但我假设您需要一些自定义(可能由 JodaTime 提供)转换代码。您是否调试过 CXF 尝试转换的内容以及来自哪个源值?
  • 我认为我的问题是在转换 LocalDate 的实例之前。当 cxf 自省所有 QueryParam 以获取要转换的值时,我的问题出现了。

标签: java cxf jodatime


【解决方案1】:

我修复了我的问题,而不是使用自省所有属性的 @QueryParam(""),我使用了 @BeanParam 注释,但要注意 pojo 中的 @QueryParam(在我的示例中为历史参数)必须在 setter 上设置。

【讨论】:

    猜你喜欢
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 2013-04-02
    • 1970-01-01
    相关资源
    最近更新 更多