diff -r 4061e0c7f907 -r 0fb3b92e01c5 java/sql-dk/src/info/globalcode/sql/dk/formatting/XmlFormatter.java --- a/java/sql-dk/src/info/globalcode/sql/dk/formatting/XmlFormatter.java Tue Feb 26 15:49:57 2019 +0100 +++ b/java/sql-dk/src/info/globalcode/sql/dk/formatting/XmlFormatter.java Tue Feb 26 15:57:49 2019 +0100 @@ -25,8 +25,10 @@ import info.globalcode.sql.dk.configuration.PropertyDeclaration; import static info.globalcode.sql.dk.formatting.AbstractXmlFormatter.qname; import java.sql.Array; +import java.sql.ResultSet; import java.sql.SQLException; import java.sql.SQLXML; +import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -171,11 +173,33 @@ printArray(array); printEndElement(); } catch (SQLException e) { + // FIXME: rewrite array formatting, remember array mode, don't try sqlArray.getArray() again and again if it has failed log.log(Level.SEVERE, "Unable to format array", e); + try { + ResultSet arrayResultSet = sqlArray.getResultSet(); + //int columnCount = arrayResultSet.getMetaData().getColumnCount(); + ArrayList arrayList = new ArrayList<>(); + while (arrayResultSet.next()) { + arrayList.add(arrayResultSet.getObject(2)); + // for (int i = 1; i <= columnCount; i++) { + // log.log(Level.INFO, "Array column {0} = {1}", new Object[]{i, arrayResultSet.getObject(i)}); + // } + } + + printStartElement(qname("column"), attributes); + // FIXME: instanceof SQLXML, see below + printArray(arrayList.toArray()); + printEndElement(); + + } catch (SQLException e2) { + // FIXME: fix logging, error recovery + log.log(Level.SEVERE, "Second level fuck up !!!", e2); + } + writeColumnValue(String.valueOf(value)); } - } else if (value instanceof SQLXML) { + } else if (value instanceof SQLXML) { // FIXME: move to separate method, to AbstractFormatter? SQLXML xml = (SQLXML) value; // TODO: parse DOM/SAX and transplant XML, don't escape (optional) try {