Saxon Xquery

flashray

Erfahrenes Mitglied
Hallo,

in einer praktischen SOAP Veranstaltung ist unsere Aufgabe XQuery Anfragen mit Saxon und Java zu implementieren.

Saxon hat eine sehr umfangreiche API:
http://www.saxonica.com/documentation/javadoc/index.html

Unzwar sollen die XQuery Anfragen in Dateien gespeichert werden, und bei Requests an den Server mit diesen vorliegenden Anfragen dem Clienten geantwortet werden.

echo.xq
Code:
declare namespace wsprak="http://db.informatik.uni-mannheim.de/xmlprak"; 
	<env:Envelope xmlns:env='http://www.w3.org/2003/05/soap-envelope'> 
		<env:Header/>
		<env:Body>
			{/env:Envelope/env:Body/wsprak:echo}
		</env:Body>
</env:Envelope>


Mein Problem ist jetzt, wie rufe ich diese von Java aus auf? Welche Klassen aus der Saxon API sind da relevant?


Vg Erdal
 
Hallo,

hab es nach langem Suchen und Probieren doch noch lösen können. Habe ein Saxon XQuery Beispiel das ich im Netz gefunden habe entsprechend angepasst:

Code:
import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.Properties;



import javax.xml.transform.OutputKeys;

import javax.xml.transform.sax.SAXSource;

import javax.xml.transform.stream.StreamResult;



import net.sf.saxon.Configuration;

import net.sf.saxon.om.DocumentInfo;

import net.sf.saxon.query.DynamicQueryContext;

import net.sf.saxon.query.StaticQueryContext;

import net.sf.saxon.query.XQueryExpression;



import org.xml.sax.InputSource;



import com.sun.net.httpserver.HttpExchange;

import com.sun.net.httpserver.HttpHandler;



public class EchoHistogramSeverHandler implements HttpHandler {



	public void handle(HttpExchange httpExchange) throws IOException {



		InputStream is = httpExchange.getRequestBody();



		InputStream queryStream = null;

		String queryFileName = "histogram.xq";



		OutputStream destStream = httpExchange.getResponseBody();



		XQueryExpression exp = null;



		Configuration C = new Configuration();



		StaticQueryContext SQC = new StaticQueryContext(C);

		DynamicQueryContext DQC = new DynamicQueryContext(C);



		Properties props = new Properties();

		props.setProperty(OutputKeys.METHOD, "xml");

		props.setProperty(OutputKeys.INDENT, "yes");



		try {

			queryStream = new FileInputStream(queryFileName);

			SQC.setBaseURI(new File(queryFileName).toURI().toString());



			exp = SQC.compileQuery(queryStream, null);

			SQC = exp.getStaticContext();

		} catch (net.sf.saxon.trans.XPathException e) {

			System.err.println(e.getMessage());

		} catch (java.io.IOException e) {

			System.err.println(e.getMessage());

		}



		try {

			InputSource XMLSource = new InputSource(is);

			SAXSource SAXs = new SAXSource(XMLSource);

			DocumentInfo DI = SQC.buildDocument(SAXs);

			DQC.setContextNode(DI);

			

			httpExchange.getResponseHeaders().add("Content-type",

					"application/soap+xml");

			httpExchange.sendResponseHeaders(200, 0);



			exp.run(DQC, new StreamResult(destStream), props);

			destStream.close();

		} catch (net.sf.saxon.trans.XPathException e) {

			System.err.println(e.getMessage());

		} catch (java.io.IOException e) {

			System.err.println(e.getMessage());

		}

	}

}


Vg Erdal
 
Zurück