Package mondrian.tui
Class XmlaSupport
- java.lang.Object
-
- mondrian.tui.XmlaSupport
-
public class XmlaSupport extends Object
Support for making XMLA requests and looking at the responses.- Author:
- Richard M. Emberson
-
-
Field Summary
Fields Modifier and Type Field Description static StringCATALOG_NAMEstatic StringDATASOURCE_DESCRIPTIONstatic StringDATASOURCE_INFOstatic StringDATASOURCE_NAMEstatic Map<String,String>ENVstatic Stringnlstatic StringROW_SET_PREFIXThis is the prefix used in xpath and transforms for the xmla rowset namespace "urn:schemas-microsoft-com:xml-analysis:rowset".static StringSOAP_PREFIX
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static DocumentextractBodyFromSoap(Document doc)static Node[]extractFaultNodesFromSoap(byte[] bytes)static Node[]extractFaultNodesFromSoap(Document doc)static Node[]extractNodes(Node node, String xpath, String[][] nsArray)Given a Document and an xpath/namespace-array pair, extract and return the Nodes resulting from applying the xpath.static Node[]extractNodesFromSoapXmla(byte[] bytes)static Node[]extractNodesFromSoapXmla(Document doc)static Node[]extractNodesFromXmla(byte[] bytes)static Node[]extractNodesFromXmla(Document doc)static CatalogLocatorgetCatalogLocator()static DataSourcesConfig.DataSourcesgetDataSources(String connectString, Map<String,String> catalogNameUrls)static StringgetDataSourcesText(String connectString, Map<String,String> catalogNameUrls)With a connection string, generate the DataSource xml.static StringgetSoapBodyXPath()static StringgetSoapFaultXPath()static StringgetSoapHeaderAndBodyXPath()static StringgetSoapXmlaRootXPath(String xmlaPrefix)static StringgetXmlaRootXPath(String xmlaPrefix)static StringgetXmlaTransform(String xmlaPrefix)This is a parameterized XSLT.static javax.servlet.ServletmakeServlet(String connectString, Map<String,String> catalogNameUrls, String cbClassName, Map<List<String>,javax.servlet.Servlet> servletCache)static DataSourcesConfig.DataSourcesparseDataSources(String dataSourcesConfigString, org.apache.logging.log4j.Logger logger)static byte[]processSoapXmla(File file, String connectString, Map<String,String> catalogNameUrls, String cbClassName)Process the given input file as a SOAP-XMLA request.static byte[]processSoapXmla(String requestText, String connectString, Map<String,String> catalogNameUrls, String cbClassName, Role role, Map<List<String>,javax.servlet.Servlet> servletCache)static byte[]processSoapXmla(String requestText, javax.servlet.Servlet servlet)static byte[]processSoapXmla(Document doc, String connectString, Map<String,String> catalogNameUrls, String cbClassName, Role role, Map<List<String>,javax.servlet.Servlet> servletCache)static byte[]processSoapXmla(Document doc, javax.servlet.Servlet servlet)static byte[]processXmla(File file, String connectString, Map<String,String> catalogNameUrls)Processes the given input file as an XMLA request (no SOAP elements).static byte[]processXmla(File file, String connectString, Map<String,String> catalogNameUrls, Map<List<String>,MondrianServer> cache)static byte[]processXmla(File file, String connectString, Map<String,String> catalogNameUrls, Role role, Map<List<String>,MondrianServer> cache)static byte[]processXmla(String requestText, String connectString, Map<String,String> catalogNameUrls, Map<List<String>,MondrianServer> cache)static byte[]processXmla(Document requestDoc, String connectString, Map<String,String> catalogNameUrls, Role role, Map<List<String>,MondrianServer> cache)static byte[]processXmla(Element requestElem, String connectString, Map<String,String> catalogNameUrls, Role role, Map<List<String>,MondrianServer> cache)static StringreadFile(File file)Reads a file line by line, adds a '\n' after each line and returns in a String.static DocumenttransformSoapXmla(Document doc, String[][] namevalueParameters, String ns)static booleanvalidateEmbeddedSchema(byte[] bytes, String schemaTransform, String dataTransform)See next method for JavaDocvalidateEmbeddedSchema(org.w3c.dom.Document, String, String).static booleanvalidateEmbeddedSchema(Document doc, String schemaTransform, String dataTransform)A given Document has both content and an embedded schema (where the schema has a single root node and the content has a single root node - they are not interwoven).static booleanvalidateNodes(Node[] nodes)Validate Nodes with throws an error if validation was attempted but failed, returns true if validation was successful and false if validation was not tried.static booleanvalidateSchemaSoapXmla(byte[] bytes)Check is a byte array containing a SOAP-XMLA response method is valid.static booleanvalidateSchemaXmla(byte[] bytes)Check is a byte array containing a XMLA response method is valid.static booleanvalidateSoapXmlaUsingXpath(byte[] bytes)This validates a SOAP-XMLA response using xpaths to extract the schema and data parts.static booleanvalidateXmlaUsingXpath(byte[] bytes)This validates a XMLA response using xpaths to extract the schema and data parts.
-
-
-
Field Detail
-
nl
public static final String nl
-
SOAP_PREFIX
public static final String SOAP_PREFIX
- See Also:
- Constant Field Values
-
CATALOG_NAME
public static final String CATALOG_NAME
- See Also:
- Constant Field Values
-
DATASOURCE_NAME
public static final String DATASOURCE_NAME
- See Also:
- Constant Field Values
-
DATASOURCE_DESCRIPTION
public static final String DATASOURCE_DESCRIPTION
- See Also:
- Constant Field Values
-
DATASOURCE_INFO
public static final String DATASOURCE_INFO
- See Also:
- Constant Field Values
-
ROW_SET_PREFIX
public static final String ROW_SET_PREFIX
This is the prefix used in xpath and transforms for the xmla rowset namespace "urn:schemas-microsoft-com:xml-analysis:rowset".- See Also:
- Constant Field Values
-
-
Method Detail
-
getXmlaTransform
public static String getXmlaTransform(String xmlaPrefix)
This is a parameterized XSLT. The parameters are: "soap" with values "none" or empty "content" with values "schemadata", "schema", "data" or empty With these setting one can extract from an XMLA SOAP message the soap wrapper plus body or simply the body; the complete body (schema and data), only the schema of the body, only the data of the body or none of the body
-
getCatalogLocator
public static CatalogLocator getCatalogLocator()
-
getDataSources
public static DataSourcesConfig.DataSources getDataSources(String connectString, Map<String,String> catalogNameUrls) throws org.eigenbase.xom.XOMException
- Throws:
org.eigenbase.xom.XOMException
-
parseDataSources
public static DataSourcesConfig.DataSources parseDataSources(String dataSourcesConfigString, org.apache.logging.log4j.Logger logger)
-
getDataSourcesText
public static String getDataSourcesText(String connectString, Map<String,String> catalogNameUrls)
With a connection string, generate the DataSource xml. Since this is used by directly, same process, communicating with XMLA Mondrian, the fact that the URL contains "localhost" is not important.- Parameters:
connectString- Connect stringcatalogNameUrls- array of catalog names, catalog url pairs
-
getSoapFaultXPath
public static String getSoapFaultXPath()
-
getSoapHeaderAndBodyXPath
public static String getSoapHeaderAndBodyXPath()
-
getSoapBodyXPath
public static String getSoapBodyXPath()
-
extractNodesFromSoapXmla
public static Node[] extractNodesFromSoapXmla(byte[] bytes) throws SAXException, IOException, XPathException
- Throws:
SAXExceptionIOExceptionXPathException
-
extractNodesFromSoapXmla
public static Node[] extractNodesFromSoapXmla(Document doc) throws SAXException, IOException, XPathException
- Throws:
SAXExceptionIOExceptionXPathException
-
extractNodesFromXmla
public static Node[] extractNodesFromXmla(byte[] bytes) throws SAXException, IOException, XPathException
- Throws:
SAXExceptionIOExceptionXPathException
-
extractNodesFromXmla
public static Node[] extractNodesFromXmla(Document doc) throws SAXException, IOException, XPathException
- Throws:
SAXExceptionIOExceptionXPathException
-
extractFaultNodesFromSoap
public static Node[] extractFaultNodesFromSoap(byte[] bytes) throws SAXException, IOException, XPathException
- Throws:
SAXExceptionIOExceptionXPathException
-
extractFaultNodesFromSoap
public static Node[] extractFaultNodesFromSoap(Document doc) throws SAXException, IOException, XPathException
- Throws:
SAXExceptionIOExceptionXPathException
-
extractBodyFromSoap
public static Document extractBodyFromSoap(Document doc) throws SAXException, IOException, XPathException
- Throws:
SAXExceptionIOExceptionXPathException
-
extractNodes
public static Node[] extractNodes(Node node, String xpath, String[][] nsArray) throws SAXException, IOException, XPathException
Given a Document and an xpath/namespace-array pair, extract and return the Nodes resulting from applying the xpath.- Throws:
SAXException- on errorIOException- on errorXPathException
-
processSoapXmla
public static byte[] processSoapXmla(File file, String connectString, Map<String,String> catalogNameUrls, String cbClassName) throws IOException, javax.servlet.ServletException, SAXException
Process the given input file as a SOAP-XMLA request.- Throws:
IOExceptionjavax.servlet.ServletExceptionSAXException
-
processSoapXmla
public static byte[] processSoapXmla(Document doc, String connectString, Map<String,String> catalogNameUrls, String cbClassName, Role role, Map<List<String>,javax.servlet.Servlet> servletCache) throws IOException, javax.servlet.ServletException, SAXException
- Throws:
IOExceptionjavax.servlet.ServletExceptionSAXException
-
processSoapXmla
public static byte[] processSoapXmla(String requestText, String connectString, Map<String,String> catalogNameUrls, String cbClassName, Role role, Map<List<String>,javax.servlet.Servlet> servletCache) throws IOException, javax.servlet.ServletException, SAXException
- Throws:
IOExceptionjavax.servlet.ServletExceptionSAXException
-
makeServlet
public static javax.servlet.Servlet makeServlet(String connectString, Map<String,String> catalogNameUrls, String cbClassName, Map<List<String>,javax.servlet.Servlet> servletCache) throws IOException, javax.servlet.ServletException, SAXException
- Throws:
IOExceptionjavax.servlet.ServletExceptionSAXException
-
processSoapXmla
public static byte[] processSoapXmla(Document doc, javax.servlet.Servlet servlet) throws IOException, javax.servlet.ServletException, SAXException
- Throws:
IOExceptionjavax.servlet.ServletExceptionSAXException
-
processSoapXmla
public static byte[] processSoapXmla(String requestText, javax.servlet.Servlet servlet) throws IOException, javax.servlet.ServletException, SAXException
- Throws:
IOExceptionjavax.servlet.ServletExceptionSAXException
-
validateSchemaSoapXmla
public static boolean validateSchemaSoapXmla(byte[] bytes) throws SAXException, IOException, ParserConfigurationException, TransformerExceptionCheck is a byte array containing a SOAP-XMLA response method is valid. Schema validation occurs if the XMLA response contains both a content and schmema section. This includes both the SOAP elements and the SOAP body content, the XMLA response.
-
processXmla
public static byte[] processXmla(File file, String connectString, Map<String,String> catalogNameUrls) throws IOException, SAXException, org.eigenbase.xom.XOMException
Processes the given input file as an XMLA request (no SOAP elements).- Throws:
IOExceptionSAXExceptionorg.eigenbase.xom.XOMException
-
processXmla
public static byte[] processXmla(File file, String connectString, Map<String,String> catalogNameUrls, Map<List<String>,MondrianServer> cache) throws IOException, SAXException, org.eigenbase.xom.XOMException
- Throws:
IOExceptionSAXExceptionorg.eigenbase.xom.XOMException
-
processXmla
public static byte[] processXmla(File file, String connectString, Map<String,String> catalogNameUrls, Role role, Map<List<String>,MondrianServer> cache) throws IOException, SAXException, org.eigenbase.xom.XOMException
- Throws:
IOExceptionSAXExceptionorg.eigenbase.xom.XOMException
-
processXmla
public static byte[] processXmla(String requestText, String connectString, Map<String,String> catalogNameUrls, Map<List<String>,MondrianServer> cache) throws IOException, SAXException, org.eigenbase.xom.XOMException
- Throws:
IOExceptionSAXExceptionorg.eigenbase.xom.XOMException
-
processXmla
public static byte[] processXmla(Document requestDoc, String connectString, Map<String,String> catalogNameUrls, Role role, Map<List<String>,MondrianServer> cache) throws IOException, org.eigenbase.xom.XOMException
- Throws:
IOExceptionorg.eigenbase.xom.XOMException
-
processXmla
public static byte[] processXmla(Element requestElem, String connectString, Map<String,String> catalogNameUrls, Role role, Map<List<String>,MondrianServer> cache) throws IOException, org.eigenbase.xom.XOMException
- Throws:
IOExceptionorg.eigenbase.xom.XOMException
-
validateSchemaXmla
public static boolean validateSchemaXmla(byte[] bytes) throws SAXException, IOException, ParserConfigurationException, TransformerExceptionCheck is a byte array containing a XMLA response method is valid. Schema validation occurs if the XMLA response contains both a content and schmema section. This should not be used when the byte array contains both the SOAP elements and content, but only for the content.
-
validateSoapXmlaUsingXpath
public static boolean validateSoapXmlaUsingXpath(byte[] bytes) throws SAXException, IOException, XPathExceptionThis validates a SOAP-XMLA response using xpaths to extract the schema and data parts. In addition, it does a little surgery on the DOMs removing the schema nodes from the XMLA root node.- Throws:
SAXExceptionIOExceptionXPathException
-
validateXmlaUsingXpath
public static boolean validateXmlaUsingXpath(byte[] bytes) throws SAXException, IOException, XPathExceptionThis validates a XMLA response using xpaths to extract the schema and data parts. In addition, it does a little surgery on the DOMs removing the schema nodes from the XMLA root node.- Throws:
SAXExceptionIOExceptionXPathException
-
validateNodes
public static boolean validateNodes(Node[] nodes) throws SAXException, IOException
Validate Nodes with throws an error if validation was attempted but failed, returns true if validation was successful and false if validation was not tried.- Returns:
- true if validation succeeded, false if validation was not tried
- Throws:
SAXExceptionIOException
-
validateEmbeddedSchema
public static boolean validateEmbeddedSchema(byte[] bytes, String schemaTransform, String dataTransform) throws SAXException, IOException, ParserConfigurationException, TransformerExceptionSee next method for JavaDocvalidateEmbeddedSchema(org.w3c.dom.Document, String, String).
-
validateEmbeddedSchema
public static boolean validateEmbeddedSchema(Document doc, String schemaTransform, String dataTransform) throws SAXException, IOException, ParserConfigurationException, TransformerException
A given Document has both content and an embedded schema (where the schema has a single root node and the content has a single root node - they are not interwoven). A single xsl transform is provided to extract the schema part of the Document and another xsl transform is provided to extract the content part and then the content is validated against the schema.If the content is valid, then nothing happens, but if the content is not valid an execption is thrown (currently a RuntimeException).
When Mondrian moves to Java 5 or includes the JAXP 1.3 jar, then there is a utility in JAXP that does something like this (but allows for multiple schema/content parts).
-
transformSoapXmla
public static Document transformSoapXmla(Document doc, String[][] namevalueParameters, String ns) throws SAXException, IOException, ParserConfigurationException, TransformerException
-
readFile
public static String readFile(File file) throws IOException
Reads a file line by line, adds a '\n' after each line and returns in a String.- Throws:
IOException
-
-