Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сериалиация методов. Необходимо создать сериализацию методов  
:(
    Опции темы
antsh
Дата 27.10.2007, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 72
Регистрация: 16.9.2005

Репутация: нет
Всего: нет



Привет всем.

У меня не простой вопрос. Как мне сделать десериализацию из ХМЛ в Яву. У меня есть 2 метода:
в ХМЛ это actions  и childs
в Яве это executableActions и setChilds

Возможные теги внутри <actions> и <childs> строго определены и им соответствуют конкретные строчки явы. Ниже подробный пример того что мне нужно.


Ява представление:
Код

package src.ucs.uc6_juhataja;

import src.head.SQlConnector;
import src.head.SfNode;
import src.ucs.uc7_ma1_kasutaja.UC7_Ma1Kasutaja;
import src.ucs.uc8_ma2_kasutaja.UC8_Ma2Kasutaja;

public class JavaNode extends SfNode {

    public void executableActions() {
        selenium.type("list.PaymentAcceptListFilterForm.paymentNumber",
                "Testttttttttttt");
        selenium.click("//input[@type='asd']");
        selenium.waitForPageToLoad(MAX_WAIT_TIME_IN_MS);
        selenium.click("//td[15]/a/img");
        selenium.waitForPageToLoad(MAX_WAIT_TIME_IN_MS);
        selenium.click("//input[@value='Aktsepteeri maksetaotlus']");
        selenium.waitForPageToLoad(MAX_WAIT_TIME_IN_MS);
    }

    public void setChilds() {
        addChild(new UC7_Ma1Kasutaja());
        addChild(new UC8_Ma2Kasutaja());
    }
}




ХМЛ представление.
Код

<XMLNode>


      <actions>
            <click id='//input[@type='asd']'/>
            <type id='list.PaymentAcceptListFilterForm.paymentNumber' text='Testttttttttttt'/>
            <select id='' value='' />
            <selectFirst id=''/>
            <isTextPresent text=''/>
            <waitForpageToLoad/>
            <makeChildsFromLinks linkNodeName='XMLNode' xpath=''/>
      </actions>

      <childs>
            <child>UC7_Ma1Kasutaja</child>
            <child>UC8_Ma2Kasutaja</child>
            <child>XMLNode</child>
            <!-- ...  -->
      </childs>

</XMLNode>




Как мне это дело имплементировать?  smile 

Это сообщение отредактировал(а) antsh - 27.10.2007, 15:59
PM   Вверх
Platon
Дата 27.10.2007, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 16
Всего: 40



Ну, уж сомневаюсь, что есть такой стандартный механизм... А просто свой строящий менеджер сделать нельзя?
PM MAIL ICQ   Вверх
nornad
Дата 28.10.2007, 05:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 16
Всего: 31



Цитата(antsh @  27.10.2007,  18:56 Найти цитируемый пост)
У меня не простой вопрос. Как мне сделать десериализацию из ХМЛ в Яву. У меня есть 2 метода:
в ХМЛ это actions  и childs
в Яве это executableActions и setChilds

Вообще-то, методы не сериализуются. Учитывая пример (например, добавление производится за счёт своего метода, а не просто включением в коллекцию, что видимо из-за необходимости проведения каких-то дополнительных действий), могу предложить лишь то же самое, что и Platon - написать свой загрузчик из xml. И там уже реализовать всё, что душе угодно.


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
antsh
Дата 28.10.2007, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 72
Регистрация: 16.9.2005

Репутация: нет
Всего: нет



Хммм жалко, что нету. 

Лично я собираюсь использовать JDOM для парсинга ХМЛ и затем:

actions = getAllActionsNodesFromXml

iterate through actions
{
action = actions.next

if(action == click) {
selenium.cick("FOO");
}

if(action == type) {
selenium.type("input_field","FOO");
}

}

Чё скажите?
PM   Вверх
nornad
Дата 28.10.2007, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 16
Всего: 31



Цитата(antsh @  28.10.2007,  18:25 Найти цитируемый пост)
Чё скажите? 

А чё - ничё так. smile
Если подобных классов в xml у тебя более одного-двух, то стоит подумать о написании некоего универсального загрузчика. Чтобы для каждого нового класса надо было реализовать минимум. Идеально вообще просто инициализировать загрузчик данными, но это не всегда бывает оптимально.


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
Platon
Дата 29.10.2007, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 16
Всего: 40



Думаю, попахивает плюсиком, чисто случайно в доках наткнулся на XMLDecoder/Encoder, по моему для вашего случая то, что доктор прописал!!!

Да, я ошибался, есть такой стандартный механизм, только ботать много придется, вот нарытый материал:
Long TermPersistance of Java
Using XMLEncoder

+ бонус трек (мини пример)
Код

import javax.swing.*;
import java.beans.XMLEncoder;
import java.beans.XMLDecoder;
import java.io.*;

public class Test {
    public static void main(String [] args) throws FileNotFoundException {
        XMLEncoder e = new XMLEncoder(
                            new BufferedOutputStream(
                                new FileOutputStream("Test.xml")));
        e.writeObject(new JButton("Hello world!!!"));
        e.close();
        XMLDecoder dec = new XMLDecoder(new FileInputStream("Test.xml"));
        JButton d = (JButton)dec.readObject();
        System.out.println(d.getText());
    }
}


Код

<?xml version="1.0" encoding="UTF-8"?> 
<java version="1.6.0" class="java.beans.XMLDecoder"> 
 <object class="javax.swing.JButton"> 
  <string>Hello world!!!</string> 
 </object> 
</java> 

PM MAIL ICQ   Вверх
v2v
Дата 30.10.2007, 00:31 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 8
Всего: 56



Таких механизмов множество.
Например мне понравился XStream .
Разобратся даже для новичка как два пальца ..

Добавлено через 4 минуты и 20 секунд
...
почитай про него. в твоём случае должен быть некий класс  с двумя членами :childs & actions , а каждый из этих классов должен иметь соответсвующие члены: 
childs
 - масив строк child
actions 
 -  click
 -  type
 - select
     и т.д.


--------------------
PM   Вверх
m1ha
Дата 9.12.2007, 04:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 14.5.2007

Репутация: 1
Всего: 1



А вот у меня немного другая ситуация. Есть абстрактный класс Animal. И на основе xml я должен создавать обьекты Cat, Dog... и т.д.(все они наследуюся от Animal). XML выглядят примерно так
Код

<?xml version="1.0" encoding="UTF-8"?> 
 <animale class="cat"> 
  <voice>Mjau</voice> 
 </animale>

Код

<?xml version="1.0" encoding="UTF-8"?> 
 <animale class="dog"> 
  <name> Mikle </name> 
 </animale>

Вся проблема в том что я не могу как в этом примере
 
Код

XMLDecoder dec = new XMLDecoder(new FileInputStream("Test.xml"));
JButton d = (JButton)dec.readObject();

указать методу dec.readObject(); Какой именно тип животного я получаю, так как я этого сам не знаю, это написано в xml. Если бы животных было 1-2 можно было бы if'aми. Но так как их довольно много... Есть у кого какие соображения по этому поводу ?
PM MAIL   Вверх
nornad
Дата 9.12.2007, 05:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 16
Всего: 31



Цитата(m1ha @  9.12.2007,  07:51 Найти цитируемый пост)
Есть у кого какие соображения по этому поводу ?

Можно сделать так:
В хмл с данными о животных для каждого животного можно указать тэг с неким идентификатором животного (cat, dog, frog, etc.). Теперь грузим хмл сакс-парсером и обрабатываем каждое животное. Зная тэг животного мы можем вызвать специфичную для него фабрику.
Один минус - десериализация в этом случае не будет автоматической. Зато будет работать.  smile 


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
Platon
Дата 9.12.2007, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 16
Всего: 40



m1ha, а собственно чего ты хочешь? я наверно уже страдаю каким-то шовинизмом, но ты сам не ведаешь о чем говоришь!

Цитата(m1ha @  9.12.2007,  05:51 Найти цитируемый пост)
Какой именно тип животного я получаю, так как я этого сам не знаю, это написано в xml.

Это написано в xml, Но ты знаешь, что это животное. Более того, ты можешь вызывать instanceof чтоб проверить тип объекта. В общем не пребедняйся, а как мне как-то говорили "Учи матчасть".

ЗЫ: Тебе открыты любые XML сериализаторы, выбирай.
PM MAIL ICQ   Вверх
m1ha
Дата 9.12.2007, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 14.5.2007

Репутация: 1
Всего: 1



Проблема решена после прочтение документации по XStream
PM MAIL   Вверх
nornad
Дата 9.12.2007, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 16
Всего: 31



Цитата(Platon @  9.12.2007,  21:06 Найти цитируемый пост)
я наверно уже страдаю каким-то шовинизмом

Ну, никогда не поздно начать наслаждаться им.  smile 

Цитата(m1ha @  9.12.2007,  21:14 Найти цитируемый пост)
Проблема решена

Пример в студию.


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
Platon
Дата 9.12.2007, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 16
Всего: 40



nornad, нет, это соблазн от лукавого!!! Я помню то время, когда я задавал невнятные и думал совсем неправильно. Да и сейчас не скажу что крутой, но опыту уже больше. И начинают раздражать некоторые вопросы. Но, все время стараюсь себя бить по пальцам, как только соберусь написать что-нибудь неприятное ^_^ Получается увы с переменным успехом.

ЗЫ. Но, на самом деле я добрый и пушистый!

PM MAIL ICQ   Вверх
m1ha
Дата 10.12.2007, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 14.5.2007

Репутация: 1
Всего: 1



Platon был прав всё просто
Код

XMLDecoder dec = new XMLDecoder(new FileInputStream("Test.xml"));
Animal a = (Animal)dec.readObject();

Работает как надо, какое бы животное не было бы описано. Просто я был уверен в том, что (Animal)dec.readObject() прибьёт все переменные пресущие только конкретному животному, которые не описаны в классе Animal, но был не прав :(. Извеняюсь за то, что отнял время своей невнимательностью. Время поста 04:51, наверно был слишком усталый

Это сообщение отредактировал(а) m1ha - 10.12.2007, 13:51
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0546 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.