From 7b3729c89c54db56da6c225ecc53db2d42ef354a Mon Sep 17 00:00:00 2001 From: Luc Boudreau Date: Wed, 29 Oct 2008 19:16:57 +0000 Subject: [PATCH] Made the fault string parsing more efficient and standard with the CellSet implementation way of doing it. git-svn-id: https://olap4j.svn.sourceforge.net/svnroot/olap4j/trunk@121 c6a108a4-781c-0410-a6c6-c2d559e19af0 --- .../driver/xmla/XmlaOlap4jConnection.java | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/org/olap4j/driver/xmla/XmlaOlap4jConnection.java b/src/org/olap4j/driver/xmla/XmlaOlap4jConnection.java index 911ef34..7b4e5e0 100644 --- a/src/org/olap4j/driver/xmla/XmlaOlap4jConnection.java +++ b/src/org/olap4j/driver/xmla/XmlaOlap4jConnection.java @@ -19,8 +19,11 @@ import org.olap4j.mdx.parser.*; import org.olap4j.mdx.parser.impl.DefaultMdxParserImpl; import org.olap4j.metadata.*; +import org.w3c.dom.DOMImplementation; import org.w3c.dom.Document; import org.w3c.dom.Element; +import org.w3c.dom.ls.DOMImplementationLS; +import org.w3c.dom.ls.LSSerializer; import org.xml.sax.SAXException; import java.io.*; @@ -662,17 +665,16 @@ Element xxx(String request) throws OlapException { */ // TODO: log doc to logfile - StringWriter writer = new StringWriter(); - writer.append("The SOAP service end-point returned an error message."); - try { - Transformer transformer = TransformerFactory.newInstance().newTransformer(); - transformer.transform(new DOMSource(findChild(fault, null, "faultstring")), new StreamResult(writer)); - } catch (TransformerException e) { - //The error message cannot be parsed... weird. - } + // A message must include the fault XML content. This is the right + // and efficient way to do it, according to + // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6181019 + // They changed the node.getString() in java... .... + DOMImplementation impl = fault.getOwnerDocument().getImplementation(); + DOMImplementationLS factory = (DOMImplementationLS) impl.getFeature("LS", "3.0"); + LSSerializer serializer = factory.createLSSerializer(); throw OlapExceptionHelper.createException( - "XMLA provider gave exception: \n" + writer.getBuffer() - + "\n Request was: \n" + request); + "XMLA provider gave exception: " + serializer.writeToString(fault) + + "\n Request was: \n" + request); } Element discoverResponse = findChild(body, XMLA_NS, "DiscoverResponse");