Текущее время: Вс, дек 28 2025, 06:25

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Yandex [Bot]


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

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