Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Ява в AMF и во FLEX-е обратно ... (http://www.flasher.ru/forum/showthread.php?t=162858)

Apikaster 04.08.2011 17:49

Ява в AMF и во FLEX-е обратно ...
 
Я долгое уже время мучаюсь с этим вопросом ...
Как можно Яву сжать в AMF и обратное действие без потери данных и метаданных во FLEX передать ...
У меня есть на данный момент реализованный вариант но на XML дадтасете ...
Он классы превращает в xml ... и я там (Во Flex-е) уже с ними работаю ...
Я веб программист и как говориться на совесть программиста пишу на GROOVY ....
Я с помощью JDBC драйвера вытаскиваю запросы ... с оракла , мс и май скюэля и т.д. и т.п ...
Создаю класс в котором применяю какой либо алгаритм и хочу его превратить в AMF ...
В гугле нашел компилятор который сжимает его в AMF ... но он не проканал ...!!!
Я пользуюсь Эклипсом ... СУБД почти все ...
И к примеру я выложил ее на http://localhost:8080/test/testAMF
при входе с браузера просит скачать файл ...
При вызове с flex-а ...
FLEX пишет что нейзвестный формат пришедшего файла ...
А на flex-е принять к примеру как AMF хочется...
нашел декомпилятор в гугле ...
Но тоже не проканал ...
Есть советы ?
Просто XML - он тяжелый ...
А хочется быстроты ...
Если есть у кого буду благодарен и в долгу не останусь ...
Заранее благодарен ...
P.S.
И да я пользовался REMOTE объектом ... передавал параметры как объекты ... но как ни странно и на Яве они приходили не как объекты а как строка ... (ПРОВЕРЯЛ с помощью Уоча ... чтобы без лишних вопросов :))

surlac 05.08.2011 00:44

Цитата:

Сообщение от Apikaster (Сообщение 1018039)
Как можно Яву сжать в AMF

Звучит очень подозрительно :o. Ну да ладно...
Для этого пользуются штуками типа OpenAMF.

Silicium 05.08.2011 00:54

а blazeDS разве не в AMF формате гоняет данные?

Apikaster 06.08.2011 10:18

Цитата:

Сообщение от surlac (Сообщение 1018174)
Звучит очень подозрительно :o. Ну да ладно...
Для этого пользуются штуками типа OpenAMF.

OpenAMF я пробовал ...
Только вот толи я не правильно прописал его ...
Толи я на яве не правильно его в АМФ конвертнул ...
Хотя все по инструкций сделал ...
С явы на яву понимает аррей коллекшн ...
А при приеме с флекса он ее как текси воспринимает ...
Но в принципе я и с явы на яву когда гонял оно как текст было ...
Но после распарсивания (приема с другой стороны) он обратно как аррей коллекшн становился ...
А во флексе не смог такого же результата добиться ?!
А blazeDS я тоже пробовал ...
Но он какой то казючий ...
Сыроватый ...
Думал сам дописать да исходники ссыльчатые ...

В общем я тут накидал что я хотел протестить ...
Вот исходники того класса на яве с которыми я тестировал ...
Код:

package kz.eitt.xcms.flex;

import java.io.*;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import flex.messaging.io.SerializationContext;
import flex.messaging.io.amf.Amf3Input;
import flex.messaging.io.amf.Amf3Output;
import javassist.bytecode.ByteArray;

import javax.xml.parsers.DocumentBuilderFactory;
import com.xcframework.tab.XTable;

public class testAMF {
public static void main(String[] args) {
        try {
               
                ArrayList al = new ArrayList();
               
                al.add("One");
                al.add("Two");
                al.add("Thre");
                al.add("Four");
                al.add("Five");
                al.add("Six");
                al.add("Onere");
                al.add("Twwero");
                al.add("Tsdfghre");
                al.add("Fosdfgur");
                al.add("Fsdfgive");
                al.add("Sisdfgx");
               
                HashMap hm = new HashMap();
               
                hm.put("field1", "value1");
                hm.put("field2", "value2");
                hm.put("field3", "value3");
                hm.put("field4", "value4");
                hm.put("field5", "value5");
                hm.put("field6", "value6");
                hm.put("field1", "value1");
                hm.put("field2", "value2");
                hm.put("field3", "value3");
                hm.put("field4", "value4");
                hm.put("field5", "value5");
                hm.put("field6", "value6");
                hm.put("field1", "value1");
                hm.put("field2", "value2");
                hm.put("field3", "value3");
                hm.put("field4", "value4");
                hm.put("field5", "value5");
                hm.put("field6", "value6");
                hm.put("field7", "value1");
                hm.put("field8", "value2");
                hm.put("field9", "value3");
                hm.put("field10", "value4");
                hm.put("field11", "value5");
                hm.put("field12", "value6");
               
                SerializationContext context = getSerializationContext();
               
                TestBean testBean = new TestBean();
                //testBean.setList(al);
                //testBean.setMap(hm);
                testBean.setString("test test test test test test");
                       
               
                ByteArrayOutputStream bout = new ByteArrayOutputStream();
                //ByteArray bout = new ByteArray();
               
                Amf3Output amf3Output = new Amf3Output(context);               
                amf3Output.setOutputStream(bout);
                amf3Output.writeObject(testBean);
                File f = new File("f.txt");
               
                FileOutputStream to = new FileOutputStream(f);
                bout.writeTo(to);
                amf3Output.flush();
                amf3Output.close();

                System.out.println("testBean = " + testBean.toString().length());
                System.out.println("amf3Output = " + amf3Output.toString().length());

                System.out.println("string =" + testBean.getString());
                //System.out.println("list =" + testBean.getList());
                //System.out.println("map =" + testBean.getMap());
               
               
               
               
                //InputStream bIn = new ByteArrayInputStream(bout.toByteArray());
                File ff = new File("f.txt");
                FileInputStream i = new FileInputStream(ff);
               
                //ByteArrayInputStream bIn = new ByteArrayInputStream(bout.toByteArray());
                //ByteArrayInputStream bIn = new ByteArrayInputStream(i);
               
                Amf3Input amf3Input = new Amf3Input(context);
               
                //amf3Input.setInputStream(bIn);
                amf3Input.setInputStream(i);               
                TestBean o = (TestBean) amf3Input.readObject();
               
               
                System.out.println("str eq = " + o.getString().equals(testBean.getString()));               
                //System.out.println("list eq = " + o.getList().equals(testBean.getList()));
                //System.out.println("map eq = " + o.getMap().equals(testBean.getMap()));
               
                System.out.println("string =" + o.getString());
                //System.out.println("list =" + o.getList());
                //System.out.println("map =" + o.getMap());
               
                System.out.println("amf3Input = " + amf3Input.toString().length());
               
        } catch (Exception e) {
        e.printStackTrace();
        }
}

public static SerializationContext getSerializationContext() {
//Threadlocal SerializationContent
SerializationContext serializationContext = SerializationContext.getSerializationContext();
/*
serializationContext.enableSmallMessages = true;
serializationContext.instantiateTypes = true;
//use _remoteClass field
serializationContext.supportRemoteClass = true;
//false Legacy Flex 1.5 behavior was to return a java.util.Collection for Array
//ture New Flex 2+ behavior is to return Object[] for AS3 Array
serializationContext.legacyCollection = false;
serializationContext.legacyMap = false;
//false Legacy flash.xml.XMLDocument Type
//true New E4X XML Type
serializationContext.legacyXMLDocument = false;
//determines whether the constructed Document is name-space aware
serializationContext.legacyXMLNamespaces = false;
serializationContext.legacyThrowable = false;
serializationContext.legacyBigNumbers = false;
 
serializationContext.restoreReferences = false;
serializationContext.logPropertyErrors = false;
serializationContext.ignorePropertyErrors = true;
*/
return serializationContext;

/*
97.
  serializationContext.enableSmallMessages = serialization.getPropertyAsBoolean(ENABLE_SMALL_MESSAGES, true);
98.
  serializationContext.instantiateTypes = serialization.getPropertyAsBoolean(INSTANTIATE_TYPES, true);
99.
  serializationContext.supportRemoteClass = serialization.getPropertyAsBoolean(SUPPORT_REMOTE_CLASS, false);
100.
  serializationContext.legacyCollection = serialization.getPropertyAsBoolean(LEGACY_COLLECTION, false);
101.
  serializationContext.legacyMap = serialization.getPropertyAsBoolean(LEGACY_MAP, false);
102.
  serializationContext.legacyXMLDocument = serialization.getPropertyAsBoolean(LEGACY_XML, false);
103.
  serializationContext.legacyXMLNamespaces = serialization.getPropertyAsBoolean(LEGACY_XML_NAMESPACES, false);
104.
  serializationContext.legacyThrowable = serialization.getPropertyAsBoolean(LEGACY_THROWABLE, false);
105.
  serializationContext.legacyBigNumbers = serialization.getPropertyAsBoolean(LEGACY_BIG_NUMBERS, false);
106.
  boolean showStacktraces = serialization.getPropertyAsBoolean(SHOW_STACKTRACES, false);
107.
  if (showStacktraces && Log.isWarn())
108.
  log.warn("The " + SHOW_STACKTRACES + " configuration option is deprecated and non-functional. Please remove this from your configuration file.");
109.
  serializationContext.restoreReferences = serialization.getPropertyAsBoolean(RESTORE_REFERENCES, false);
110.
  serializationContext.logPropertyErrors = serialization.getPropertyAsBoolean(LOG_PROPERTY_ERRORS, false);
111.
  serializationContext.ignorePropertyErrors = serialization.getPropertyAsBoolean(IGNORE_PROPERTY_ERRORS, true);
112.
  */
}
}


surlac 16.08.2011 02:18

Цитата:

Сообщение от Silicium (Сообщение 1018177)
а blazeDS разве не в AMF формате гоняет данные?

В нём самом, только может это делать даже поверх HTTP.

Apikaster 19.08.2011 17:15

Цитата:

Сообщение от surlac (Сообщение 1021979)
В нём самом, только может это делать даже поверх HTTP.

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

surlac 10.09.2011 01:33

Цитата:

Сообщение от Apikaster (Сообщение 1023328)
Я не пользуюсь Блэйзом...

Правильно делаете — есть много более удачных альтернатив ;).

Gubber 14.09.2011 11:47

Цитата:

Сообщение от Apikaster (Сообщение 1023328)
Можно тут по подробнее ?
Я не пользуюсь Блэйзом...
Мне лишь хотелось бы используя с их библиотеками, скомпилить мои датасет так, чтобы не терялись мета данные и другие параметры...
Такое возможно ?

Не прилично давать ссылки на свой сайт, но посмотрите вот здесь
В принципе использование любого фреймворка вместо BlazeDS вносит лишь небольшие коррективы.


Часовой пояс GMT +4, время: 02:10.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.