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 String
CATALOG_NAME
static String
DATASOURCE_DESCRIPTION
static String
DATASOURCE_INFO
static String
DATASOURCE_NAME
static Map<String,String>
ENV
static String
nl
static 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".static String
SOAP_PREFIX
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static Document
extractBodyFromSoap(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 CatalogLocator
getCatalogLocator()
static DataSourcesConfig.DataSources
getDataSources(String connectString, Map<String,String> catalogNameUrls)
static String
getDataSourcesText(String connectString, Map<String,String> catalogNameUrls)
With a connection string, generate the DataSource xml.static String
getSoapBodyXPath()
static String
getSoapFaultXPath()
static String
getSoapHeaderAndBodyXPath()
static String
getSoapXmlaRootXPath(String xmlaPrefix)
static String
getXmlaRootXPath(String xmlaPrefix)
static String
getXmlaTransform(String xmlaPrefix)
This is a parameterized XSLT.static javax.servlet.Servlet
makeServlet(String connectString, Map<String,String> catalogNameUrls, String cbClassName, Map<List<String>,javax.servlet.Servlet> servletCache)
static DataSourcesConfig.DataSources
parseDataSources(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 String
readFile(File file)
Reads a file line by line, adds a '\n' after each line and returns in a String.static Document
transformSoapXmla(Document doc, String[][] namevalueParameters, String ns)
static boolean
validateEmbeddedSchema(byte[] bytes, String schemaTransform, String dataTransform)
See next method for JavaDocvalidateEmbeddedSchema(org.w3c.dom.Document, String, String)
.static boolean
validateEmbeddedSchema(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 boolean
validateNodes(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 boolean
validateSchemaSoapXmla(byte[] bytes)
Check is a byte array containing a SOAP-XMLA response method is valid.static boolean
validateSchemaXmla(byte[] bytes)
Check is a byte array containing a XMLA response method is valid.static boolean
validateSoapXmlaUsingXpath(byte[] bytes)
This validates a SOAP-XMLA response using xpaths to extract the schema and data parts.static boolean
validateXmlaUsingXpath(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:
SAXException
IOException
XPathException
-
extractNodesFromSoapXmla
public static Node[] extractNodesFromSoapXmla(Document doc) throws SAXException, IOException, XPathException
- Throws:
SAXException
IOException
XPathException
-
extractNodesFromXmla
public static Node[] extractNodesFromXmla(byte[] bytes) throws SAXException, IOException, XPathException
- Throws:
SAXException
IOException
XPathException
-
extractNodesFromXmla
public static Node[] extractNodesFromXmla(Document doc) throws SAXException, IOException, XPathException
- Throws:
SAXException
IOException
XPathException
-
extractFaultNodesFromSoap
public static Node[] extractFaultNodesFromSoap(byte[] bytes) throws SAXException, IOException, XPathException
- Throws:
SAXException
IOException
XPathException
-
extractFaultNodesFromSoap
public static Node[] extractFaultNodesFromSoap(Document doc) throws SAXException, IOException, XPathException
- Throws:
SAXException
IOException
XPathException
-
extractBodyFromSoap
public static Document extractBodyFromSoap(Document doc) throws SAXException, IOException, XPathException
- Throws:
SAXException
IOException
XPathException
-
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:
IOException
javax.servlet.ServletException
SAXException
-
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:
IOException
javax.servlet.ServletException
SAXException
-
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:
IOException
javax.servlet.ServletException
SAXException
-
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:
IOException
javax.servlet.ServletException
SAXException
-
processSoapXmla
public static byte[] processSoapXmla(Document doc, javax.servlet.Servlet servlet) throws IOException, javax.servlet.ServletException, SAXException
- Throws:
IOException
javax.servlet.ServletException
SAXException
-
processSoapXmla
public static byte[] processSoapXmla(String requestText, javax.servlet.Servlet servlet) throws IOException, javax.servlet.ServletException, SAXException
- Throws:
IOException
javax.servlet.ServletException
SAXException
-
validateSchemaSoapXmla
public static boolean validateSchemaSoapXmla(byte[] bytes) throws SAXException, IOException, ParserConfigurationException, TransformerException
Check 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:
IOException
SAXException
org.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:
IOException
SAXException
org.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:
IOException
SAXException
org.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:
IOException
SAXException
org.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:
IOException
org.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:
IOException
org.eigenbase.xom.XOMException
-
validateSchemaXmla
public static boolean validateSchemaXmla(byte[] bytes) throws SAXException, IOException, ParserConfigurationException, TransformerException
Check 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, XPathException
This 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:
SAXException
IOException
XPathException
-
validateXmlaUsingXpath
public static boolean validateXmlaUsingXpath(byte[] bytes) throws SAXException, IOException, XPathException
This 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:
SAXException
IOException
XPathException
-
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:
SAXException
IOException
-
validateEmbeddedSchema
public static boolean validateEmbeddedSchema(byte[] bytes, String schemaTransform, String dataTransform) throws SAXException, IOException, ParserConfigurationException, TransformerException
See 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
-
-