【发布时间】: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 以获取要转换的值时,我的问题出现了。