从 Java 调用 AllJoyn 属性 导致 AnnotationBusException
Calling an AllJoyn property from Java causes a AnnotationBusException
我正在努力使用 AllJoyn 中的属性。我是 AllJoyn 的新手,但不是编程的新手。我有一个用 C++ 编写的提供程序,我使用
添加我的属性
status = m_Description->AddProperty("ServerName", "s", 1)
之后调用状态等于ER_OK。
我在界面中定义我的Java属性如下:
@BusProperty(annotation = BusProperty.ANNOTATE_EMIT_CHANGED_SIGNAL)
String getServerName() throws BusException;
但是,当我尝试在 Java(Android 使用 Android Studio)中使用 属性 时,调用如下:
String str = proxyInterface.getServerName();
我不断收到以下异常:
04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus
W/System.err: org.alljoyn.bus.AnnotationBusException: field public
static transient volatile
com.android.tools.fd.runtime.IncrementalChange
com.wolfecomputerservices.cumulus.ui.Android.Communication.AllJoyn.Objects.ServerData.$change
of class
com.wolfecomputerservices.cumulus.ui.Android.Communication.AllJoyn.Objects.ServerData
does not annotate position 04-07 10:11:45.592
26005-26005/com.wolfecomputerservices.cumulus W/System.err: at
org.alljoyn.bus.Signature.structTypes(Signature.java:71) 04-07
10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus
W/System.err: at
org.alljoyn.bus.Signature.classTypeSig(Signature.java:170) 04-07
10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus
W/System.err: at
org.alljoyn.bus.Signature.typeSig(Signature.java:117) 04-07
10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus
W/System.err: at
org.alljoyn.bus.InterfaceDescription.getOutSig(InterfaceDescription.java:511)
04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus
W/System.err: at
org.alljoyn.bus.InterfaceDescription.addMembers(InterfaceDescription.java:386)
04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus
W/System.err: at
org.alljoyn.bus.InterfaceDescription.create(InterfaceDescription.java:199)
04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus
W/System.err: at
org.alljoyn.bus.ProxyBusObject.addInterface(ProxyBusObject.java:115)
04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus
W/System.err: at org.alljoyn.bus.ProxyBusObject.getProperty(Native
Method) 04-07 10:11:45.592
26005-26005/com.wolfecomputerservices.cumulus W/System.err: at
org.alljoyn.bus.ProxyBusObject.access0(ProxyBusObject.java:35)
04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus
W/System.err: at
org.alljoyn.bus.ProxyBusObject$Handler.invoke(ProxyBusObject.java:274)
04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus
W/System.err: at java.lang.reflect.Proxy.invoke(Proxy.java:397)
04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus
W/System.err: at $Proxy4.getServerRunning(Unknown Source) 04-07
10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus
W/System.err: at
com.wolfecomputerservices.cumulus.ui.Android.Communication.AllJoyn.Interfaces.ICumulusImpl.IsRunning(ICumulusImpl.java:24)
04-07 10:11:45.593 26005-26005/com.wolfecomputerservices.cumulus
W/System.err: at
com.wolfecomputerservices.cumulus.ui.Android.Communication.AllJoyn.Handlers.BusHandler.processMessage(BusHandler.java:276)
04-07 10:11:45.593 26005-26005/com.wolfecomputerservices.cumulus
W/System.err: at
com.wolfecomputerservices.cumulus.ui.Android.Abstracts.PauseHandler.handleMessage(PauseHandler.java:75)
04-07 10:11:45.593 26005-26005/com.wolfecomputerservices.cumulus
W/System.err: at
android.os.Handler.dispatchMessage(Handler.java:111) 04-07
10:11:45.593 26005-26005/com.wolfecomputerservices.cumulus
W/System.err: at android.os.Looper.loop(Looper.java:194) 04-07
10:11:45.593 26005-26005/com.wolfecomputerservices.cumulus
W/System.err: at
android.app.ActivityThread.main(ActivityThread.java:5567) 04-07
10:11:45.593 26005-26005/com.wolfecomputerservices.cumulus
W/System.err: at java.lang.reflect.Method.invoke(Native Method)
04-07 10:11:45.593 26005-26005/com.wolfecomputerservices.cumulus
W/System.err: at java.lang.reflect.Method.invoke(Method.java:372)
04-07 10:11:45.593 26005-26005/com.wolfecomputerservices.cumulus
W/System.err: at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:955)
04-07 10:11:45.593 26005-26005/com.wolfecomputerservices.cumulus
W/System.err: at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:750)
Note: I do have a method that has a return value of ServerData.
However, that is not what I'm calling when this error occurs. I
sucessfully make that call long before trying to call the method. It
is the method call that causes this exception. However, I do have
ServerData annotated with @Position(x) for each field number 0-4.
我做错了什么?
更新:
来自 C++ 提供程序的服务器数据
class ServerData {
public:
const char* Id;
const char* Name;
const char* Version;
const char* MachineName;
const char* BaseUrl;
};
来自 Java 消费者:
public class ServerData {
@Position(0)
@Signature("s")
public String Id;
@Position(1)
@Signature("s")
public String Name;
@Position(2)
@Signature("s")
public String Version;
@Position(3)
@Signature("s")
public String MachineName;
@Position(4)
@Signature("s")
public String BaseURL;
}
更新:不幸的是,我似乎无法切换 gradle 的版本。我目前在 2.3.1;切换到 2.1.3 会在构建期间导致以下错误(我已经尝试了列出的所有建议):
不幸的是,我似乎无法切换 gradle 的版本。我目前在 2.3.1;切换到 2.1.3 会导致构建期间出现以下错误:
Error:org.gradle.api.internal.tasks.DefaultTaskInputs$TaskInputUnionFileCollection 无法转换为 org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection
此意外错误的可能原因包括:
- Gradle 的依赖缓存可能已损坏(这有时会在网络连接超时后发生。)
重新下载依赖项并同步项目(需要网络)
- Gradle 构建进程(守护程序)的状态可能已损坏。停止所有 Gradle 守护程序可能会解决此问题。
停止 Gradle 构建进程(需要重新启动)
- 您的项目可能正在使用第三方插件,该插件与项目中的其他插件或 [=56 的版本不兼容=] 项目请求。
在损坏的 Gradle 进程的情况下,您还可以尝试关闭 IDE 然后杀死所有 Java 进程.
确保有问题的 ServerData 字段是 public 并且您在每个 public 字段之前指定的任何 @Position(n) 注释中没有拼写错误。
更新:
我在使用 gradle 2.2.3 在 Android Studio 中构建时看到了这个注释错误消息。但是,当我返回使用 gradle 2.1.3 时,注释错误消失了。
检查您的顶级 build.gradle 文件。将其类路径依赖项更新为...
dependencies {
classpath 'com.android.tools.build:gradle:2.1.3'
}
更新 2:
如果您需要在 Android Studio 中构建 gradle > 2.1.3,另一种解决方法是禁用 Android Studio 的 "instant run" 功能。即时 运行 功能自动将两个 public 静态字段添加到 类(即添加 $change 字段和 serialVersionUID 字段)。
AllJoyn java-binding 对 Position 注释的处理(通过反射完成)目前不考虑编译器添加的这两个字段。这将由 AllJoyn 在其即将发布的 16.10a 维护版本中更好地处理。
要禁用 "instant run",请在 Android Studio 中执行以下操作...
Open the Settings or Preferences dialog.
Navigate to Build, Execution, Deployment > Instant Run.
Uncheck the "Enable Instant Run to hot swap/resource changes on deploy" checkbox.
我正在努力使用 AllJoyn 中的属性。我是 AllJoyn 的新手,但不是编程的新手。我有一个用 C++ 编写的提供程序,我使用
添加我的属性status = m_Description->AddProperty("ServerName", "s", 1)
之后调用状态等于ER_OK。
我在界面中定义我的Java属性如下:
@BusProperty(annotation = BusProperty.ANNOTATE_EMIT_CHANGED_SIGNAL)
String getServerName() throws BusException;
但是,当我尝试在 Java(Android 使用 Android Studio)中使用 属性 时,调用如下:
String str = proxyInterface.getServerName();
我不断收到以下异常:
04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus W/System.err: org.alljoyn.bus.AnnotationBusException: field public static transient volatile com.android.tools.fd.runtime.IncrementalChange com.wolfecomputerservices.cumulus.ui.Android.Communication.AllJoyn.Objects.ServerData.$change of class com.wolfecomputerservices.cumulus.ui.Android.Communication.AllJoyn.Objects.ServerData does not annotate position 04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at org.alljoyn.bus.Signature.structTypes(Signature.java:71) 04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at org.alljoyn.bus.Signature.classTypeSig(Signature.java:170) 04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at org.alljoyn.bus.Signature.typeSig(Signature.java:117) 04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at org.alljoyn.bus.InterfaceDescription.getOutSig(InterfaceDescription.java:511) 04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at org.alljoyn.bus.InterfaceDescription.addMembers(InterfaceDescription.java:386) 04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at org.alljoyn.bus.InterfaceDescription.create(InterfaceDescription.java:199) 04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at org.alljoyn.bus.ProxyBusObject.addInterface(ProxyBusObject.java:115) 04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at org.alljoyn.bus.ProxyBusObject.getProperty(Native Method) 04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at org.alljoyn.bus.ProxyBusObject.access0(ProxyBusObject.java:35) 04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at org.alljoyn.bus.ProxyBusObject$Handler.invoke(ProxyBusObject.java:274) 04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at java.lang.reflect.Proxy.invoke(Proxy.java:397) 04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at $Proxy4.getServerRunning(Unknown Source) 04-07 10:11:45.592 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at com.wolfecomputerservices.cumulus.ui.Android.Communication.AllJoyn.Interfaces.ICumulusImpl.IsRunning(ICumulusImpl.java:24) 04-07 10:11:45.593 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at com.wolfecomputerservices.cumulus.ui.Android.Communication.AllJoyn.Handlers.BusHandler.processMessage(BusHandler.java:276) 04-07 10:11:45.593 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at com.wolfecomputerservices.cumulus.ui.Android.Abstracts.PauseHandler.handleMessage(PauseHandler.java:75) 04-07 10:11:45.593 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at android.os.Handler.dispatchMessage(Handler.java:111) 04-07 10:11:45.593 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at android.os.Looper.loop(Looper.java:194) 04-07 10:11:45.593 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5567) 04-07 10:11:45.593 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at java.lang.reflect.Method.invoke(Native Method) 04-07 10:11:45.593 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at java.lang.reflect.Method.invoke(Method.java:372) 04-07 10:11:45.593 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:955) 04-07 10:11:45.593 26005-26005/com.wolfecomputerservices.cumulus W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:750)
Note: I do have a method that has a return value of ServerData. However, that is not what I'm calling when this error occurs. I sucessfully make that call long before trying to call the method. It is the method call that causes this exception. However, I do have ServerData annotated with @Position(x) for each field number 0-4.
我做错了什么?
更新:
来自 C++ 提供程序的服务器数据
class ServerData {
public:
const char* Id;
const char* Name;
const char* Version;
const char* MachineName;
const char* BaseUrl;
};
来自 Java 消费者:
public class ServerData {
@Position(0)
@Signature("s")
public String Id;
@Position(1)
@Signature("s")
public String Name;
@Position(2)
@Signature("s")
public String Version;
@Position(3)
@Signature("s")
public String MachineName;
@Position(4)
@Signature("s")
public String BaseURL;
}
更新:不幸的是,我似乎无法切换 gradle 的版本。我目前在 2.3.1;切换到 2.1.3 会在构建期间导致以下错误(我已经尝试了列出的所有建议):
不幸的是,我似乎无法切换 gradle 的版本。我目前在 2.3.1;切换到 2.1.3 会导致构建期间出现以下错误: Error:org.gradle.api.internal.tasks.DefaultTaskInputs$TaskInputUnionFileCollection 无法转换为 org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection 此意外错误的可能原因包括:
- Gradle 的依赖缓存可能已损坏(这有时会在网络连接超时后发生。) 重新下载依赖项并同步项目(需要网络)
- Gradle 构建进程(守护程序)的状态可能已损坏。停止所有 Gradle 守护程序可能会解决此问题。 停止 Gradle 构建进程(需要重新启动)
- 您的项目可能正在使用第三方插件,该插件与项目中的其他插件或 [=56 的版本不兼容=] 项目请求。
确保有问题的 ServerData 字段是 public 并且您在每个 public 字段之前指定的任何 @Position(n) 注释中没有拼写错误。
更新:
我在使用 gradle 2.2.3 在 Android Studio 中构建时看到了这个注释错误消息。但是,当我返回使用 gradle 2.1.3 时,注释错误消失了。
检查您的顶级 build.gradle 文件。将其类路径依赖项更新为...
dependencies { classpath 'com.android.tools.build:gradle:2.1.3' }
更新 2:
如果您需要在 Android Studio 中构建 gradle > 2.1.3,另一种解决方法是禁用 Android Studio 的 "instant run" 功能。即时 运行 功能自动将两个 public 静态字段添加到 类(即添加 $change 字段和 serialVersionUID 字段)。
AllJoyn java-binding 对 Position 注释的处理(通过反射完成)目前不考虑编译器添加的这两个字段。这将由 AllJoyn 在其即将发布的 16.10a 维护版本中更好地处理。
要禁用 "instant run",请在 Android Studio 中执行以下操作...
Open the Settings or Preferences dialog.
Navigate to Build, Execution, Deployment > Instant Run.
Uncheck the "Enable Instant Run to hot swap/resource changes on deploy" checkbox.