Выяснение, где выбрасываются ошибки - PullRequest
0 голосов
/ 09 августа 2011

У меня проблема, которая сводит меня с ума.Недавно я настроил свой BlazeDS для использования Array вместо ArrayCollection по соображениям производительности.Кроме того, я настроил свои шаблоны для генерации свойств массива.

Все было не хорошо.Все, кроме одной функции, которая вызывает TypeError: Ошибка № 1034.Они выбрасываются до вызова обратного вызова.Он утверждает, что имеет проблемы с приведением ArrayCollection к Array.Я удалил сгенерированные типы, чтобы Flex использовал Object вместо них, но они не содержали ArrayCollections.Теперь у меня вопрос: как я могу получить трассировки стека ошибок, генерируемых в обработчиках событий?

Я уже добавил обработчики для unhandledExceptions во все мои модули, и они вызываются, если в коде, вызванном взаимодействием с пользователем, возникают ошибки, но, похоже, они не способны отлавливать вещи, генерируемые обработчиками событий.

Как я могу отследить эти ошибки?

Крис

PS: Классы: package de.upw.ps.ucg.model.ucg.scheduler {

[Bindable]
[RemoteClass(alias="de.upw.ps.ucg.model.ucg.scheduler.Task")]
public class Task extends TaskBase {
}
}

И:

package de.upw.ps.ucg.model.ucg.scheduler {

import de.upw.ps.ucg.model.oval.common.OvalVersionedIdentifier;
import flash.utils.IExternalizable;

[Bindable]
public class TaskBase {

public function TaskBase() {}


    private var _aborted:Boolean;
    private var _characteristicsId:String;
    private var _currentExecutorPhase:JobExecutorPhase;
    private var _definitionSetName:String;
    private var _definitionSetVid:OvalVersionedIdentifier;
    private var _endTime:Date;
    private var _enqueueTime:Date;
    private var _environmentId:String;
    private var _environmentName:String;
    private var _messages:Array;
    private var _numberOfDefinitions:int;
    private var _processedNumberOfTests:int;
    private var _resultsId:String;
    private var _schedulerJob:SchedulerJob;
    private var _startTime:Date;
    private var _statusMessage:String;
    private var _taskId:String;
    private var _totalNumberOfTests:int;

    public function set aborted(value:Boolean):void {
        _aborted = value;
    }
    public function get aborted():Boolean {
        return _aborted;
    }

    public function set characteristicsId(value:String):void {
        _characteristicsId = value;
    }
    public function get characteristicsId():String {
        return _characteristicsId;
    }

    public function set currentExecutorPhase(value:JobExecutorPhase):void {
        _currentExecutorPhase = value;
    }
    public function get currentExecutorPhase():JobExecutorPhase {
        return _currentExecutorPhase;
    }

    public function set definitionSetName(value:String):void {
        _definitionSetName = value;
    }
    public function get definitionSetName():String {
        return _definitionSetName;
    }

    public function set definitionSetVid(value:OvalVersionedIdentifier):void {
        _definitionSetVid = value;
    }
    public function get definitionSetVid():OvalVersionedIdentifier {
        return _definitionSetVid;
    }

    public function set endTime(value:Date):void {
        _endTime = value;
    }
    public function get endTime():Date {
        return _endTime;
    }

    public function set enqueueTime(value:Date):void {
        _enqueueTime = value;
    }
    public function get enqueueTime():Date {
        return _enqueueTime;
    }

    public function set environmentId(value:String):void {
        _environmentId = value;
    }
    public function get environmentId():String {
        return _environmentId;
    }

    public function set environmentName(value:String):void {
        _environmentName = value;
    }
    public function get environmentName():String {
        return _environmentName;
    }

    public function set messages(value:Array):void {
        _messages = value;
    }
    public function get messages():Array {
        return _messages;
    }

    public function set numberOfDefinitions(value:int):void {
        _numberOfDefinitions = value;
    }
    public function get numberOfDefinitions():int {
        return _numberOfDefinitions;
    }

    public function set processedNumberOfTests(value:int):void {
        _processedNumberOfTests = value;
    }
    public function get processedNumberOfTests():int {
        return _processedNumberOfTests;
    }

    public function set resultsId(value:String):void {
        _resultsId = value;
    }
    public function get resultsId():String {
        return _resultsId;
    }

    public function set schedulerJob(value:SchedulerJob):void {
        _schedulerJob = value;
    }
    public function get schedulerJob():SchedulerJob {
        return _schedulerJob;
    }

    public function set startTime(value:Date):void {
        _startTime = value;
    }
    public function get startTime():Date {
        return _startTime;
    }

    public function set statusMessage(value:String):void {
        _statusMessage = value;
    }
    public function get statusMessage():String {
        return _statusMessage;
    }

    public function set taskId(value:String):void {
        _taskId = value;
    }
    public function get taskId():String {
        return _taskId;
    }

    public function set totalNumberOfTests(value:int):void {
        _totalNumberOfTests = value;
    }
    public function get totalNumberOfTests():int {
        return _totalNumberOfTests;
    }
}
}

Оба класса сгенерированы моей сборкой maven из соответствующего Java-класса, и типы хорошо сочетаются друг с другом.

Ответы [ 2 ]

0 голосов
/ 10 августа 2011

Это то, что вам придется отлаживать самостоятельно, но у меня есть ощущение, что проблема в том, что данные, отправляемые вашим Java DTO, не совпадают с вашим классом AS3, даже если у вас естьМетаданные RemoteClass говорят, что это так.

Вам не хватает собственности?или есть несоответствие свойства?Это наиболее вероятная причина вашей ошибки.Я предлагаю вам как можно больше отлаживать java-сторону и использовать что-то вроде firebug, чтобы увидеть запрос / ответ сервера.

0 голосов
/ 09 августа 2011

У вас есть доступ к классу сокетов, который читает во всех этих сообщениях?Отследите буфер перед десериализацией, и вы, по крайней мере, сможете найти класс, который доставляет вам хлопоты.

В противном случае отследите объект после десериализации, и он должен быть самым первым после ошибки.выброшены.

...