Я использую Flex 3 и выполняю вызов через RemoteObject для метода Java 1.6 и предоставляется с помощью BlazeDS и Spring 2.5.5 Интеграция через SecureAMFChannel. ActionScript выглядит следующим образом (этот код является примером реальной вещи, которая находится в отдельной сети разработчиков);
import com.adobe.cairngorm.business.ServiceLocator;
import mx.collections.ArrayCollection;
import mx.rpc.remoting.RemoteObject;
import mx.rpc.IResponder;
public class MyClass implements IResponder
{
private var service:RemoteObject = ServiceLocator.getInstance().getRemoteOjbect("mySerivce");
public MyClass()
{
[ArrayElementType("Number")]
private var myArray:ArrayCollection;
var id1:Number = 1;
var id2:Number = 2;
var id3:Number = 3;
myArray = new ArrayCollection([id1, id2, id3]);
getData(myArray);
}
public function getData(myArrayParam:ArrayCollection):void
{
var token:AsyncToken = service.getData(myArrayParam);
token.addResponder(this.responder); //Assume responder implementation method exists and works
}
}
Это вызовет, когда-то созданный сервисному классу Java, который предоставляется через BlazeDS (предположим, что механика работает, потому что он работает для всех других вызовов, не связанных с параметрами Collection). Мой класс обслуживания Java выглядит так:
public class MySerivce {
public Collection<DataObjectPOJO> getData(Collection<Long> myArrayParam) {
//The following line is never executed and throws an exception
for (Long l : myArrayParam) {
System.out.println(l);
}
}
}
Исключением является ClassCastException, в котором говорится, что java.lang.Integer не может быть приведен к java.lang.Long. Я работал над этой проблемой, обходя коллекцию, используя Object, проверяя, является ли это Integer, приводил его к одному, затем выполнял .longValue (), а затем добавлял его в временный ArraList. Юк.
Большая проблема заключается в том, что мое приложение должно обрабатывать миллиарды записей из БД, а идентификатор переполняет целое число в 2,147 миллиарда. Я хотел бы иметь BlazeDS или JavaAdapter в нем, перевести номер ActionScript в Long, как указано в методе. Я ненавижу, что, хотя я использую универсальный, базовый тип элемента коллекции - целое число. Если бы это была прямая Java, она не скомпилировалась бы.
Любые идеи приветствуются. Решения еще лучше! :)