我有一个生产移动Flex应用程序,它使用RemoteObject调用进行所有数据访问,并且它运行良好,除了刚刚添加的新远程调用,只有在使用发布版本运行时才会失败。使用调试版本在设备(iPhone)上运行时,同样的调用可以正常工作。使用发布版本运行时,永远不会调用结果处理程序(也不会调用错误处理程序)。在调试模式下查看BlazeDS日志,接收呼叫并发回数据。我已将其缩小到似乎是数据大小的问题。
我已针对一个特定的数据调用,它在String值中返回一个44kb的字符串长度,但失败了(发布版本)。当我没有在对象上填充String值(在服务器端Java代码中)(只是将其设置为空字符串)时,将调用结果处理程序,并再次使用发布版本返回该对象。这适用于调试版本。
调用中返回的自定义对象是一个非常简单的对象,其中包含简单类型的getter / setter boolean,int,String和一个org.23c.dom.Document类型。这个相同的对象类型用于其他其他RemoteObject调用(不同的数据)并且工作正常(发布和调试版本)。我最初是作为Document返回的,但是,只是为了确保这不是问题,将值更改为返回String,只是为了排除序列化中的XML / Dom问题。
我不明白1)为什么发布构建与调试构建行为对于RemoteObject调用是不同的,2)为什么调用在调试版本中工作时发送的数量有点大(但不是不合理) String对象中的数据,但不是发布版本中的数据。
我没有尝试确定失败点的大小确切位置,但是,不确定它是否相关,因为44kb并不是一个不合理的大小。
通过打开BlazeDS中的调试模式,我可以看到对象及其属性被序列化,一切看起来都很好。在BlazeDS中接收和处理调用以进行调试和发布构建测试。
任何人都有其他想法尝试调试/解决这个问题吗?
平台测试是BlazeDS 4,Flashbuilder 4.7,Websphere 8服务器,iPhone(iOS 7.1.2)。尝试使用多个Flex SDK的4.12到最新的4.13,行为没有变化。
谢谢!
答案 0 :(得分:0)
经过一周的调试后,我发现了这个问题。
从调用返回的Java类型被定义为ArrayList。将其更改为列表解决了问题。
我不确定为什么ArrayList不是有效的返回类型,我一直在看Adobe文档,但仍然看不出为什么这是无效的。并且,为什么它在调试模式下工作而不在Release版本中工作甚至更奇怪。也许有人可以对我说明逻辑。