68 lines
2.5 KiB
Java
68 lines
2.5 KiB
Java
package org.gcube.informationsystem.collector.impl.porttypes;
|
|
|
|
import org.globus.wsrf.utils.FaultHelper;
|
|
import org.xmldb.api.base.ResourceSet;
|
|
import org.xmldb.api.modules.XMLResource;
|
|
|
|
import org.gcube.common.core.contexts.GCUBEServiceContext;
|
|
import org.gcube.common.core.porttypes.GCUBEPortType;
|
|
import org.gcube.common.core.utils.logging.GCUBELog;
|
|
import org.gcube.informationsystem.collector.impl.contexts.ICServiceContext;
|
|
import org.gcube.informationsystem.collector.impl.xmlstorage.exist.State;
|
|
import org.gcube.informationsystem.collector.impl.xmlstorage.exist.XQuery;
|
|
import org.gcube.informationsystem.collector.stubs.XQueryExecuteRequest;
|
|
import org.gcube.informationsystem.collector.stubs.XQueryExecuteResponse;
|
|
import org.gcube.informationsystem.collector.stubs.XQueryFaultType;
|
|
|
|
/**
|
|
* <em>XQueryAccess</em> portType implementation
|
|
*
|
|
* @author Manuele Simi (ISTI-CNR)
|
|
*
|
|
*/
|
|
public class XQueryAccess extends GCUBEPortType {
|
|
|
|
private final GCUBELog logger = new GCUBELog(XQueryAccess.class);
|
|
|
|
/** {@inheritDoc} */
|
|
@Override
|
|
protected GCUBEServiceContext getServiceContext() {
|
|
return ICServiceContext.getContext();
|
|
}
|
|
|
|
/**
|
|
* Executes a XQuery expression in the XML storage
|
|
* @param XQueryExpression the XQuery expression
|
|
* @return a formatted XML document
|
|
* @throws XQueryFaultType if the execution fails
|
|
*/
|
|
public XQueryExecuteResponse XQueryExecute(XQueryExecuteRequest request) throws XQueryFaultType {
|
|
StringBuilder dataset = new StringBuilder();
|
|
XQueryExecuteResponse response = new XQueryExecuteResponse();
|
|
try {
|
|
logger.debug("executing XQuery: " + request.getXQueryExpression());
|
|
|
|
XQuery q = new XQuery(request.getXQueryExpression());
|
|
ResourceSet result = State.query_manager.executeXQuery(q);
|
|
response.setSize(result.getSize());
|
|
logger.debug("number of returned documents: " + result.getSize());
|
|
dataset.append("<Resultset>\n");
|
|
for (int i = 0; i < (int) result.getSize(); i++) {
|
|
XMLResource xmlres = (XMLResource) result.getResource((long) i);
|
|
dataset.append("<Record>\n" + xmlres.getContent() + "\n</Record>\n");
|
|
}
|
|
dataset.append("</Resultset>");
|
|
response.setDataset(dataset.toString());
|
|
|
|
} catch (Exception e) {
|
|
XQueryFaultType fault = new XQueryFaultType();
|
|
FaultHelper faultHelper = new FaultHelper(fault);
|
|
faultHelper.addFaultCause(e);
|
|
faultHelper.addDescription("IC service: Exception when executing the requested XQuery");
|
|
throw fault;
|
|
}
|
|
return response;
|
|
}
|
|
|
|
}
|