Текущее время: Пт, мар 29 2024, 18:32

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Java mapping и Data types
СообщениеДобавлено: Ср, окт 09 2013, 17:34 
Начинающий
Начинающий

Зарегистрирован:
Чт, сен 05 2013, 15:57
Сообщения: 20
Добрый день.
Использую маппинг в Java через
Code:
public class MyMapping extends AbstractTransformation{
  public void transform(TransformationInput ti, TransformationOutput to) throws StreamTransformationException {
  }
}

Имеется ли возможность получить структуру Data Types, фактически доступ к XSD, чтобы определить какие поля 0..1, 1..1, 1..* ???
Не хотелось бы в коде маппинга явно проверять наличие определнных полей.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Java mapping и Data types
СообщениеДобавлено: Чт, окт 10 2013, 17:53 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, дек 06 2011, 10:11
Сообщения: 78
Зачем вам это? Можно сделать другим способом немного (напрямую XSD слишком дорого пользовать), но если вы хотите это сделать из Java именно. Только вопрос - зачем это надо? Просто валидацию устроить? А что дальше хотите делать?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Java mapping и Data types
СообщениеДобавлено: Пт, окт 11 2013, 11:08 
Начинающий
Начинающий

Зарегистрирован:
Чт, сен 05 2013, 15:57
Сообщения: 20
Java необходима из-за того, что на входе идет csv файл, который распарсеный кладется в БД и туда же в БД надо положить сам csv файл (при том как бинариный файл, а не строку, т.е. 0xAA6E и т.д.).
Поэтому в java я реализовываю преобразование из одной xml в другую и собираю csv в бинарном виде.
Для соответствия, что на вход пришел корректный csv, я для валидации XML использую XSD схему из Message Type. Но в данный момент она у меня прописана как текст в коде Java.
Я полагаю, что грамотнее все-таки получать XSD сообщения из SAP, а не держать его в Java.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Java mapping и Data types
СообщениеДобавлено: Ср, окт 16 2013, 15:42 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, дек 06 2011, 10:11
Сообщения: 78
Есть 2 варианта.

1) Выгружать XSD в файл и положить его рядом с меппингом в архив и из меппинга загружать (экономия ресурсов при изменении схемы но индусня в разработке получается)
2) Доставать его через PI-ный веб сервис (есть такие). ПОлучается красота не описуемая но медленно аж жуть. и при это если часто дергать сервис то он помирает через некоторое время (быстро). При том помирает втихаря (тупо перестает что-то возвращать)

Думаю надо подбирать какой-либо другой путь.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Java mapping и Data types
СообщениеДобавлено: Ср, окт 16 2013, 17:35 
Начинающий
Начинающий

Зарегистрирован:
Чт, сен 05 2013, 15:57
Сообщения: 20
Jey1977 написал(а):
Есть 2 варианта.

1) Выгружать XSD в файл и положить его рядом с меппингом в архив и из меппинга загружать (экономия ресурсов при изменении схемы но индусня в разработке получается)
2) Доставать его через PI-ный веб сервис (есть такие). ПОлучается красота не описуемая но медленно аж жуть. и при это если часто дергать сервис то он помирает через некоторое время (быстро). При том помирает втихаря (тупо перестает что-то возвращать)

Думаю надо подбирать какой-либо другой путь.

1-ым способом я уже реализовал, только xsd я храню как String константу в jar.
2-ой сразу не катит.
Я ищу способ достать xsd из абстрактного класса AbstractTransformation или входящего сообщения TransformationInput
Просто я реализовал ядро (движок) по подключению различных маппингов. А конечный разработчик должен в итоге создать только 1 класс с 1 методом на входе и выходе которого xml. т.е. конечный разработчик фактически занимается только преобразованием xml, все подключение к sap за него будет делать ядро, в т.ч. хочу и проверку xsd вынести на уровень ядра. (В принципе там она и происходит, но все равно интерфейс вызывает callback чтобы получить xsd константу)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Java mapping и Data types
СообщениеДобавлено: Чт, окт 17 2013, 09:48 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, дек 06 2011, 10:11
Сообщения: 78
X-Cite! написал(а):
Я ищу способ достать xsd из абстрактного класса AbstractTransformation или входящего сообщения TransformationInput

его там нет

X-Cite! написал(а):
Просто я реализовал ядро (движок) по подключению различных маппингов. А конечный разработчик должен в итоге создать только 1 класс с 1 методом на входе и выходе которого xml. т.е. конечный разработчик фактически занимается только преобразованием xml, все подключение к sap за него будет делать ядро, в т.ч. хочу и проверку xsd вынести на уровень ядра. (В принципе там она и происходит, но все равно интерфейс вызывает callback чтобы получить xsd константу)


а можно поподробнее. и практическое применение если не трудно.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Java mapping и Data types
СообщениеДобавлено: Чт, окт 17 2013, 10:39 
Начинающий
Начинающий

Зарегистрирован:
Чт, сен 05 2013, 15:57
Сообщения: 20
ну например есть базовый класс, он лежит в базовой jar. Эта jar собирается 1 раз и подключается к SAP. (Это ядро)
Вся реализация по трансформации из буфера в DOM и обратно находится в SAPMappingCustom.
Code:
public class SAPTransformationCustom extends AbstractTransformation implements ILogger{

    protected SAPMappingCustom sap = new SAPMappingCustom();
    private TransformationInput tr_in;
    private boolean isRunSAP;
   
    public SAPTransformationCustom(){
        isRunSAP = false;
        sap.setLogger(this);
    }
   
    protected String getDynamicConfiguration(String aNameSpace, String aName) {
        return (tr_in != null) ? tr_in.getDynamicConfiguration().get(DynamicConfigurationKey.create(aNameSpace, aName)) : "";
    }
   
    @Override
    public void transform(TransformationInput ti, TransformationOutput to) throws StreamTransformationException {
        isRunSAP = true;
        tr_in = ti;
        sap.transform(ti.getInputPayload().getInputStream(), to.getOutputPayload().getOutputStream());
    }
   
    @Override
    public void showMessage(String aMessage) {
        if (isRunSAP) {
            this.getTrace().addInfo(aMessage);
        }
        else {
            System.out.println(aMessage);
        }
    }

    @Override
    public void errorMessage(String aMessage) {
        showMessage(aMessage);
        throw new RuntimeException(aMessage);
    }
   
}


Затем любой разработчик, который будет создавать Java-маппинг, чтобы не писал фактически то, что лежит в SAPMappingCustom делает следующее:
Создает новый jar (который и будет указываться в Operation Mapping) и наследуется от SAPTransformationCustom
Code:
public class SAPMappingOrderCSVToJDBC extends SAPTransformationCustom implements ISAPMapping{

    public static void main(String[] args) {
        SAPMappingOrderCSVToJDBC mjm = new SAPMappingOrderCSVToJDBC();
        try {
            //Определяем откуда считывается xml и куда записывается xml
            FileInputStream in = new FileInputStream("C:/In.xml");
            FileOutputStream out = new FileOutputStream("C:/Out.xml");
            //Вызываем парсер xml
            mjm.sap.transform(in, out);
        } catch (Exception ex) {
            throw new RuntimeException(ex.getMessage());
        }
    }

    public SAPMappingOrderCSVToJDBC(){
        super();
        sap.setSAPMapping(this);
    }
   
    @Override
    public void createXML(Document aIn, Document aOut) {
       //тут преобразование из aIn в aOut
    }

    @Override
    public String getXSD() {
        return "тут лежит XSD по которой ядро будет проверять корректность XML в aIn";
    }
}

В этом случае разработчик должен реализовать только 2 метода. Выполнить преобразование в createXML и указать XSD схему. Больше ничего реализовывать не надо.
Затем эта jar подключается и выбирается в Operation Mapping


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Java mapping и Data types
СообщениеДобавлено: Чт, окт 17 2013, 10:49 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, дек 06 2011, 10:11
Сообщения: 78
А зачем так сложно? Какая цель преследуется?
В просто Java меппинге и так нужно реализовать один метод - transform и все.
Какой смысл от такого загиба практический?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Java mapping и Data types
СообщениеДобавлено: Чт, окт 17 2013, 10:57 
Начинающий
Начинающий

Зарегистрирован:
Чт, сен 05 2013, 15:57
Сообщения: 20
Например:
Code:
            TransformerFactory tf = TransformerFactory.newInstance();
            Transformer t = tf.newTransformer();
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            dbf.setIgnoringElementContentWhitespace(true);
            dbf.setNamespaceAware(true);
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document dIn = db.parse(aInputStream);

Надо писать столько раз, сколько раз будет маппинг, а в моем случае это реализовано в ядре. Разработчик маппинга понятия об этом не имеет и не должен иметь, его задача только преобразовать xml. Он даже понятия не имеет как к SAP это подключать и какие там библиотеки нужны, какие классы.
Если вы заметите, то в наследуемом классе нет ни одного SAPовского класса. Фактически задачу по преобразованию xml можно отдать человеку который о SAP даже не слышал.
К тому же я не сторонник дублирования кода. Если надо будет реализовать 10 преобразований, то надо будет только создать 10 классов унаследованных от базового и написать меньше кода. Весь код отвечающий за преобразование из буфера в дерево и из дерева в буфер, а также проверка XML по XSD сокрыта в ядре. Ее не надо каждый раз реализовывать.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Java mapping и Data types
СообщениеДобавлено: Чт, окт 17 2013, 14:22 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, дек 06 2011, 10:11
Сообщения: 78
Вы в JAVA меппинге дом парсером документ разбираете?
А XSLT не пробовали?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Java mapping и Data types
СообщениеДобавлено: Чт, окт 17 2013, 15:06 
Начинающий
Начинающий

Зарегистрирован:
Чт, сен 05 2013, 15:57
Сообщения: 20
XSLT не пойдет, т.к. надо на выходе получить исходный файл в бинарном виде, который кладется в в одно из выходный полей


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Java mapping и Data types
СообщениеДобавлено: Чт, окт 17 2013, 17:12 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, дек 06 2011, 10:11
Сообщения: 78
Что такое бинарный вид? Архив чтоли?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Java mapping и Data types
СообщениеДобавлено: Чт, окт 17 2013, 17:46 
Начинающий
Начинающий

Зарегистрирован:
Чт, сен 05 2013, 15:57
Сообщения: 20
Jey1977 написал(а):
Что такое бинарный вид? Архив чтоли?

0x38313936363B30392E30382E323031333B373937303632363B413B323BC4EEF1F2E0E2EAE0202D3B30372E30382E323031332031383A33383B4E41563B53393230315F31333337313BC4313B310D0A3035503631325F41503B313B3B0D0A31352D35323738362D30315F5245494E5A3B313B3B


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Java mapping и Data types
СообщениеДобавлено: Чт, окт 17 2013, 17:50 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, дек 06 2011, 10:11
Сообщения: 78
А поле какого типа в базе?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Java mapping и Data types
СообщениеДобавлено: Чт, окт 17 2013, 17:51 
Начинающий
Начинающий

Зарегистрирован:
Чт, сен 05 2013, 15:57
Сообщения: 20
Image ну или эквивалент varbinary(max)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB