Текущее время: Ср, апр 17 2024, 02:59

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




Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Нужна помощь в java-mapping
СообщениеДобавлено: Пн, авг 20 2012, 03:57 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 29 2011, 08:54
Сообщения: 318
Откуда: Владивосток, Россия
Пол: Мужской
Здравствуйте!

Пытаюсь начать делать преобразования с использованием java (PI 7.1). Вот сразу налетел:
в примерах большинство использует определение класса типа:
public class ... extends DefaultHandler implements StreamTransformation
В хелпах же написано, что в PI 7.1 используется абстрактный класс AbstractTransformation, т.е.:
public class ... extends AbstractTransformation

У меня NetBeans тут же начинает ругаться, что AbstractTransformation - это не класс, а интерфейс.
Если использую StreamTransformation, то требует включить abstract в определение моего класса.

Можно какой-нибудь не сильно сложный пример для 7.1, чтобы хотя бы по коду поразбираться, что там и как должно быть?

_________________
У меня два правила:
1. Не говорить всего, что знаю.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Нужна помощь в java-mapping
СообщениеДобавлено: Пн, авг 20 2012, 08:44 
Директор
Директор

Зарегистрирован:
Вт, июл 18 2006, 17:44
Сообщения: 1001
Откуда: что и все
Пол: Мужской
в 7.1 можно и старые меппинги использовать.

com.sap.aii.mapping.api.AbstractTransformation -- это всё-таки класс, см. в ..../j2ee/cluster/bin/ext/com.sap.xi.mapping.api.lib/lib/com.sap.xpi.ib.mapping.lib.jar (для 7.3, для 7.1 не помню точно, схожее).

Пример простой в хелпе есть, что по 7.0 что по 7.1. Или SCN :) Но у вас видимо в зависимостях что-то неверное.

_________________
Telegram-chat: PO, CPI-PI, java, groovy


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Нужна помощь в java-mapping
СообщениеДобавлено: Пн, авг 20 2012, 08:58 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 29 2011, 08:54
Сообщения: 318
Откуда: Владивосток, Россия
Пол: Мужской
Вроде с первым вопросом разобрался. Сейчас другое:

при тестировании мэппинга
java.lang.NoClassDefFoundError: myJavaMappingClass (wrong name: MyJavaMappingPackage/myJavaMappingClass)

Я загрузил в PI архив, там:
myJavaMappingClass$SAXStructureHandler.class
myJavaMappingClass.class
myJavaMappingClass.java

Вот что ему не нравится?


Сам код:
package MyJavaMappingPackage;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import com.sap.aii.mapping.api.*;
import java.io.*;
import java.util.Map;
import java.util.HashMap;
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;

public class myJavaMappingClass extends AbstractTransformation{

private boolean sqlMsgInput;

public void transform(TransformationInput inputMsg, TransformationOutput outputMsg) throws StreamTransformationException {

this.execute(inputMsg.getInputPayload().getInputStream(), outputMsg.getOutputPayload().getOutputStream());
}
public void execute(InputStream inStream, OutputStream outStream) throws StreamTransformationException {

try{
SAXParserFactory saxFactory = SAXParserFactory.newInstance();
SAXStructureHandler saxHandler = new SAXStructureHandler();

saxHandler.out = outStream;

try{
SAXParser saxParser = saxFactory.newSAXParser();
saxParser.parse(inStream, saxHandler);
}
catch (Throwable t) {
t.printStackTrace();
}

}
catch (Throwable t){
t.printStackTrace();
}
}

/* Создаем свой обработчик парсинга, переопределив стандартный обработчик
* "DefaultHandler". */
public class SAXStructureHandler extends DefaultHandler{
public OutputStream out;

/* Пользовательский метод write используется для записи строки "s"
* в выходной поток "out". */
private void write(String s) throws SAXException {
try {
out.write(s.getBytes());
out.flush();
}
catch (IOException e) {
throw new SAXException("I/O Error", e);
}
}

/* Обработчик начала парсинга документа. */
public void startDocument() throws SAXException {
write("");
}

/* Обработчик начала парсинга элемента XML-структуры */
public void startElement(String namespaceURI, String localName, String rawName, Attributes atts) {
String elementName = localName;
if ("".equals(localName)) elementName = rawName;
if (elementName.equals("SQLString")) sqlMsgInput = true;
}

/* Обработчик парсинга тела текущего элемента XML-структуры */
public void characters(char[] chars, int startIndex, int endIndex) throws SAXException {
if (sqlMsgInput){
String dataString = new String(chars, startIndex, endIndex).trim();
write("" + dataString + "");
}
}

/* Обработчик окончания парсинга элемента XML-структуры */
public void endElement(String namespaceURI, String localName, String rawName) {
String elementName = localName;
if ("".equals(localName)) elementName = rawName;
if (elementName.equals("SQLString")) sqlMsgInput = false;
}

/* Обработчик окончания парсинга документа */
public void endDocument() throws SAXException {
write("");
try {
out.flush();
}
catch (IOException e) {
throw new SAXException("I/O Error", e);
}
}
}
}

_________________
У меня два правила:
1. Не говорить всего, что знаю.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Нужна помощь в java-mapping
СообщениеДобавлено: Пн, авг 20 2012, 09:02 
Старший специалист
Старший специалист

Зарегистрирован:
Сб, окт 21 2006, 20:34
Сообщения: 280
по моему и StreamTransformation и AbstractTransformationто оба интерфейсы - надо писать implements вместо extends и если библиотеки подключены должно все компилиться


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Нужна помощь в java-mapping
СообщениеДобавлено: Пн, авг 20 2012, 09:06 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 29 2011, 08:54
Сообщения: 318
Откуда: Владивосток, Россия
Пол: Мужской
Да в том-то и дело, что компилится. Ругань в PI уже идет.
Разве что при компиляции предупреждение:

warning: [options] bootstrap class path not set in conjunction with -source 1.5

_________________
У меня два правила:
1. Не говорить всего, что знаю.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Нужна помощь в java-mapping
СообщениеДобавлено: Пн, авг 20 2012, 09:12 
Старший специалист
Старший специалист

Зарегистрирован:
Сб, окт 21 2006, 20:34
Сообщения: 280
я загружал в PI один архив с классом своим и все нормально было. Вот еще ссылка http://techplay.plozzle.com/?p=21


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Нужна помощь в java-mapping
СообщениеДобавлено: Пн, авг 20 2012, 09:42 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 29 2011, 08:54
Сообщения: 318
Откуда: Владивосток, Россия
Пол: Мужской
Эту ссылку я видел.

При компиляции со StreamTransformation выдается warning:

javaXMLParser.java uses or overrides a deprecated API.

И в САПовском хелпе написано, что StreamTransformation больше не используется, вместо него использовать AbstractTransformation

_________________
У меня два правила:
1. Не говорить всего, что знаю.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Нужна помощь в java-mapping
СообщениеДобавлено: Пн, авг 20 2012, 09:54 
Старший специалист
Старший специалист

Зарегистрирован:
Сб, окт 21 2006, 20:34
Сообщения: 280
у меня тоже такое сообщение и все работает на 7.1


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Нужна помощь в java-mapping  Тема решена
СообщениеДобавлено: Пн, авг 20 2012, 10:17 
Директор
Директор

Зарегистрирован:
Вт, июл 18 2006, 17:44
Сообщения: 1001
Откуда: что и все
Пол: Мужской
MyJavaMappingPackage должен быть каталогом в jar-файле. Но вам для простоты проще без пакета обойтись.

_________________
Telegram-chat: PO, CPI-PI, java, groovy


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Нужна помощь в java-mapping
СообщениеДобавлено: Вт, авг 21 2012, 02:59 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 29 2011, 08:54
Сообщения: 318
Откуда: Владивосток, Россия
Пол: Мужской
Спасибо! Разобрался. Я просто сам себя перехитрил: решил, что достаточно просто взять сгенерированные классы, положить их в ZIP и в PI импортировать. Сейчас сделал экспорт в JAR, а его потом загрузил в PI, и все заработало.

Теперь вот вопрос такой: что-то я пока не совсем понимаю, как сложные мэппинги через парсинг на java строить. Там какой принцип? А то мне пока видится только собирание исходных элементов по массивам, а потом создание структуры выходного сообщения из этих массивов.
Обращений к узлам структуры, как в XSLT, здесь нет, как я понимаю? Или кроме SAXParser'а есть другие методы? Просветите новичка в Java, пожалуйста :-)

_________________
У меня два правила:
1. Не говорить всего, что знаю.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Нужна помощь в java-mapping
СообщениеДобавлено: Вт, авг 21 2012, 08:02 
Директор
Директор

Зарегистрирован:
Вт, июл 18 2006, 17:44
Сообщения: 1001
Откуда: что и все
Пол: Мужской
можно по узлам шариться вручную.
можно xpath выбирать Nodeset'ы.
можно через JAXB и подобные ему нагенерить по xsd прокси-объекты и ходить по ним как по джаве. Но именно JAXB не умеет искать, так что с ним будет много быдлокода. Кое-кто из умных умеет и прокси и поиск.

Upd: это всё либо полный DOM либо частичный его аналог (JAXB). Конечно, можно (иногда и выгоднее) SAX.

_________________
Telegram-chat: PO, CPI-PI, java, groovy


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Нужна помощь в java-mapping
СообщениеДобавлено: Вт, авг 21 2012, 09:48 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 29 2011, 08:54
Сообщения: 318
Откуда: Владивосток, Россия
Пол: Мужской
А как по узлам вручную шариться? Где посмотреть можно пример какой-нибудь? И насчет xpath? А то у SAXParser'а только StartElement да EndElement. Или там еще что-то есть?

_________________
У меня два правила:
1. Не говорить всего, что знаю.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Нужна помощь в java-mapping
СообщениеДобавлено: Вт, авг 21 2012, 10:30 
Директор
Директор

Зарегистрирован:
Вт, июл 18 2006, 17:44
Сообщения: 1001
Откуда: что и все
Пол: Мужской
Chaser009 написал:
А как по узлам вручную шариться? Где посмотреть можно пример какой-нибудь? И насчет xpath? А то у SAXParser'а только StartElement да EndElement. Или там еще что-то есть?


Тут уже не PI а обычная джава разработка под XML, лучше книжку почитать, чтобы сложилось понимание в башке:
* McLaughlin, Edelson. Java and XML 3ed 2006 (O'Reilly)
* McLaughlin. Java and XML Data Binding 2002
* Vohra A., Vohra D.. Pro XML Development with Java Technology, 2006 (Apress)

_________________
Telegram-chat: PO, CPI-PI, java, groovy


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

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


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

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


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

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