public JAXBElement processFile(File file){
Class clazz = SomePojo.class;
JAXBElement jaxbElement = null;
try {
JAXBContext jaxbContext = JAXBContext.newInstance(clazz);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
jaxbElement = unmarshaller.unmarshal(new StreamSource(file), clazz);
} catch (Exception e) {
e.printStackTrace();
}
return jaxbElement;
}
Показаны сообщения с ярлыком XML. Показать все сообщения
Показаны сообщения с ярлыком XML. Показать все сообщения
23.07.2018
Анмаршаллинг XML в класс при помощи JAXB
27.08.2015
Парсер SAX
SAX - альтернатива стандартному парсеру DOM, который в силу особенностей реализации (создание в памяти объекта XMLDocument, содержащего целиком весь файл), подходит только для распарсивания маленьких xml-документов.
Фишка парсера в том, что поток InputStream обрабатывается последовательно и к тем или иным событиям применяется пользовательская логика:
Фишка парсера в том, что поток InputStream обрабатывается последовательно и к тем или иным событиям применяется пользовательская логика:
SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser; parser = factory.newSAXParser(); MySAXParser prsHandler = new MySAXParser(); parser.parse(is, prsHandler);, где is - объект класса InputStream, MySAXParser - класс с перекрытыми методами обработки событий
public class MySAXParser extends DefaultHandler{
private String currentParameterTypes;
private String currentQName;
@Override
public void startDocument(){ //событие начала парсинга
System.out.println("start parse document;");
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes){
// встретили элемент
this.currentParameterTypes = qName;
}
@Override
public void endElement(String uri, String localName, String qName){
// вышли из элемента
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
// получает значение тега/атрибута this.currentParameterTypes
String value = new String(ch, start, length);
}
}
Ниже - график заполнения heap'a во время распарсивания файда в 150МБ.08.06.2014
Отчет из данных ViewObject
Мы можем выдать пользователю отчет сразу по нажатию кнопки, без создания конкаррента. Такое удобно, например, при выгрузке в Excel результатов с поисковой формы.
Ключевые моменты.
1) Формирование XMLNode c данными из VO. Первый параметр - глубина структуры XML.
Шаблон для нашего отчета будет иметь особенности. Имя группы будет составлено как Имя_VO || 'Row'. Например, если VO отчета назывался ReportVO, то группа будет названа ReportVORow. Имена элементов будут совпадать с именами атрибутов VO. Отдельная группа - вручную добавленные параметры шапки:
Ключевые моменты.
1) Формирование XMLNode c данными из VO. Первый параметр - глубина структуры XML.
XMLNode xmlNode = (XMLNode)reportVO.writeXML(4, XMLInterface.XML_OPT_ALL_ROWS);2) Добавление доп.параметров в XML (параметры шапки)
XMLNode xmlNode = (XMLNode)am.invokeMethod("fillWithVODataset");
XMLDocument doc = xmlNode.getDocument();
Element elem = doc.createElement("ReportInfo");
Element elemPeriod = doc.createElement("SomeParameter");
Text startPeriodVal = doc.createTextNode((String)someBean.getValue(pageContext));
elemPeriod.appendChild(startPeriodVal);
elem.appendChild(elemPeriod);
XMLNode firstChild = (XMLNode)xmlNode.getFirstChild();
// xmlNode пуст, если VO был пуст
if (firstChild != null){
XMLNode parent = (XMLNode)firstChild.getParentNode();
parent.appendChild(elem);
}else{
// добавляем элемент в корень
xmlNode.appendChild(elem);
}
3) Натягиваем данные на существующий шаблон XDOselect lb.file_data from xdo_templates_b tmp, xdo_lobs lb where tmp.template_code = :1 and tmp.application_short_name = :2 and lb.application_short_name = tmp.application_short_name and lb.lob_code = tmp.data_source_code and lb.lob_type = 'TEMPLATE' and sysdate between tmp.start_date and nvl(tmp.end_date,sysdate)4) Формируем выходной поток с помощью класса oracle.apps.xdo.template.FOProcessor
Шаблон для нашего отчета будет иметь особенности. Имя группы будет составлено как Имя_VO || 'Row'. Например, если VO отчета назывался ReportVO, то группа будет названа ReportVORow. Имена элементов будут совпадать с именами атрибутов VO. Отдельная группа - вручную добавленные параметры шапки:
<dataStructure> <group name="reportVORow" source="reportVORow"> <element name="ATTR1" value="ATTR1"/> <element name="ATTR2" value="ATTR2"/> ... <group name="ReportInfo" source="ReportInfo"> <element name="SomeParameter" value="SomeParameter"/> ...
25.06.2012
Oracle XML Publisher: простейший отчет в RTF
Процесс создания отчета состоит из этапов: создание Шаблона определения данных (Data Definition), создание RTF шаблона представления данных конечному пользователю, создание Параллельного (concurrent) приложения, добавление созданного приложения в группу запросов пользователя, выполнение отчета с параметрами.
13.03.2012
Передача XML>32k через ADO в Oracle
При работе с XML+ADO+Oracle всё прекрасно, пока размер потока с XML не превышает 32k
18.01.2012
Формирование XML c помощью DBMS_XMLDOM
Создание объекта XML с помощью пакета DBMS_XMLDOM с передачей в виде CLOB