【问题标题】:Karaf 4.1 - ClassCastException from Apache Aries Proxy to Cassandra Entity AnnotationKaraf 4.1 - 从 Apache Aries 代理到 Cassandra 实体注释的 ClassCastException
【发布时间】:2017-02-14 13:58:18
【问题描述】:

我在 karaf 4.1.0-SNAPSHOT 中使用 datastax java-driver-mapping 有一个大问题,在这种情况下我需要从 cassandra 实体中获取注释 @Table:

@Table(name = "clients")
public class Client implements Serializable {

    @PartitionKey
    @Column(name = "client_id")
    private String clientId;
    @Column(name = "client_secret")
    private String clientSecret;

    //getters and setters ...
}

这个实体在模型包中,我有一个用于服务的包和一个用于持久性的包,当我尝试在我的持久性包中执行此操作时:

@Override
public void save(Serializable obj, Class clazz) {
    System.out.println(((Table)clazz.getAnnotations()[0]).name());
}

我在 System.out.println 行中收到此错误:

java.lang.ClassCastException: com.sun.proxy.$Proxy110 cannot be cast to com.datastax.driver.mapping.annotations.Table
    at io.twim.cassandra.TwimCassandraImpl.save(TwimCassandraImpl.java:159) [216:twim-cassandra:1.0.0.SNAPSHOT]
    at Proxyc0a03eb5_6454_4ea2_a12f_daddf586d502.save(Unknown Source) [?:?]
    at io.twim.core.users.TwimServiceUserImpl.saveApplicationClient(TwimServiceUserImpl.java:50) [218:twim-core:1.0.0.SNAPSHOT]
    at Proxy60a7b95f_6d2d_4487_bd18_dfd7c359a958.saveApplicationClient(Unknown Source) [?:?]
    at io.twim.rest.register.ClientRegistrationImpl.init(ClientRegistrationImpl.java:69) [223:twim-rest:1.0.0.SNAPSHOT]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
    at java.lang.reflect.Method.invoke(Method.java:497) ~[?:?]
    at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:299) [12:org.apache.aries.blueprint.core:1.7.0]

我应该怎么做才能解决这个问题?有人知道吗?

已编辑

【问题讨论】:

    标签: java cassandra osgi apache-karaf karaf


    【解决方案1】:

    在 java 中,任何注解在运行时都表示为代理。所以你有时会遇到这个问题。

    您可以尝试使用 clazz.getAnnotation(Table.class).name 代替。

    【讨论】:

    • 我从调试器添加了一个图像,你的建议得到一个空值,但是如果我得到 annotations 方法,它会显示一个 Proxy 类型的注释,你怎么看?
    猜你喜欢
    • 1970-01-01
    • 2011-06-24
    • 2012-04-12
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    • 2016-08-30
    相关资源
    最近更新 更多