The Pentaho BI server ships a lightweight general purpose webservice for accessing metadata. This is implemented as a webservice plugin by the org.pentaho.common.ui.metadata.service.MetadataService class. This forms a more generic and independent API as compared to the (unmaintained) WAQR metadata services.
The common ui metadata service is part of the common ui plugin. You can find this in pentaho-solutions/system/common-ui
. Here's a snippet from the common-ui plugin.xml
that defines the metadata service:
<webservice id="metadataService" type="xml,gwt" /> |
The Common UI Metadata service can be accessed both as an ordinary non-GWT webservice and as a GWT webservice.
All Common UI Metadata services are accessed using urls of this form:
http://localhost:8080/pentaho/content/ws-run/metadataService/<method-name>
where <method-name> represents the name of a java method of the org.pentaho.common.ui.metadata.service.MetadataService class.
The non-GWT Webservice API has both XML and JSON capabilities. Application developers can choose to use either JSON or XML, or mix and match as desired.
For an up-to-date overview of the available methods, refer to the source. At the time of writing, these methods are known:
GET http://localhost:8080/pentaho/content/ws-run/metadataService/listBusinessModels <?xml version="1.0"?> <ns:listBusinessModelsResponse xmlns:ns="http://service.metadata.ui.common.pentaho.org" xmlns:ax2950="http://util.java/xsd" xmlns:ax2944="http://impl.model.metadata.ui.common.pentaho.org/xsd" xmlns:ax2942="http://logging.commons.apache.org/xsd" xmlns:ax2946="http://marshal.connection.commons.pentaho.org/xsd" xmlns:ax2947="http://connection.commons.pentaho.org/xsd" xmlns:ax2939="http://io.java/xsd" > <return type="org.pentaho.common.ui.metadata.model.impl.ModelInfo"> <domainId>steel-wheels/metadata.xmi</domainId> <modelDescription>This model contains information about Employees.</modelDescription> <modelId>BV_HUMAN_RESOURCES</modelId> <modelName>Human Resources</modelName> </return> <return type="org.pentaho.common.ui.metadata.model.impl.ModelInfo"> <domainId>steel-wheels/metadata.xmi</domainId> <modelDescription>This model contains information about products and product inventory.</modelDescription> <modelId>BV_INVENTORY</modelId> <modelName>Inventory</modelName> </return> <return type="org.pentaho.common.ui.metadata.model.impl.ModelInfo"> <domainId>steel-wheels/metadata.xmi</domainId> <modelDescription>This model contains information about customers and their orders.</modelDescription> <modelId>BV_ORDERS</modelId> <modelName>Orders</modelName> </return> </ns:listBusinessModelsResponse> |
GET http://localhost:8080/pentaho/content/ws-run/metadataService/listBusinessModelsJson <ns:listBusinessModelsJsonResponse xmlns:ns="http://service.metadata.ui.common.pentaho.org"> <return> [ { "class":"org.pentaho.common.ui.metadata.model.impl.ModelInfo", "domainId":"steel-wheels/metadata.xmi", "modelDescription":"This model contains information about Employees.", "modelId":"BV_HUMAN_RESOURCES", "modelName":"Human Resources" }, { "class":"org.pentaho.common.ui.metadata.model.impl.ModelInfo", "domainId":"steel-wheels/metadata.xmi", "modelDescription":"This model contains information about products and product inventory.", "modelId":"BV_INVENTORY", "modelName":"Inventory" }, { "class":"org.pentaho.common.ui.metadata.model.impl.ModelInfo", "domainId":"steel-wheels/metadata.xmi", "modelDescription":"This model contains information about customers and their orders.", "modelId":"BV_ORDERS", "modelName":"Orders" } ] </return> </ns:listBusinessModelsJsonResponse> |
GET http://localhost:8080/pentaho/content/ws-run/metadataService/loadModel?domainId=steel-wheels%2Fmetadata.xmi&modelId=BV_ORDERS <?xml version="1.0"?> <ns:loadModelResponse xmlns:ns="http://service.metadata.ui.common.pentaho.org"> <return type="org.pentaho.common.ui.metadata.model.impl.Model"> <categories type="org.pentaho.common.ui.metadata.model.impl.Category"> <columns type="org.pentaho.common.ui.metadata.model.impl.Column"> <aggTypes>NONE</aggTypes> <category>CAT_PAYMENTS</category> <defaultAggType>NONE</defaultAggType> <description xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> <fieldType>FACT</fieldType> <formatMask>$#,##0.00;($#,##0.00)</formatMask> <horizontalAlignment>RIGHT</horizontalAlignment> <id>BC_PAYMENTS_AMOUNT</id> <name>Amount</name> <selectedAggType>NONE</selectedAggType> <type>NUMERIC</type> </columns> ...many more <columns></columns>... <description>This category contains details about customer payments.</description> <id>CAT_PAYMENTS</id> <name>Payments</name> </categories> ...more <categories></categories>... <description>This model contains information about customers and their orders.</description> <domainId>steel-wheels/metadata.xmi</domainId> <id>BV_ORDERS</id> <name>Orders</name> </return> </ns:loadModelResponse> |
GET http://localhost:8080/pentaho/content/ws-run/metadataService/loadModelJson?domainId=steel-wheels%2Fmetadata.xmi&modelId=BV_ORDERS <Exception>org.apache.axis2.AxisFault: Error trying to deepSerialize at org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:158) at org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:40) at org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:100) at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:176) |
...
</Exception>
This document does not describe the GWT style of the API. (Community, feel free to add this documentation).