WPS icon indicating copy to clipboard operation
WPS copied to clipboard

WPS Client : Complex Data as non XML String

Open Gnatit opened this issue 7 years ago • 0 comments

Hello,

When using the WPS Client API, I have a problem using the method addComplexData of class ExecuteRequestBuilder (the one using an IData object as value). In case the generator used returns a stream that is no XML, the method setComplexData will fail to read the stream.

Here is an example :

Geometry geometry = geometryFactory.createPoint(new Coordinate(0, 0));
IData data = new JTSGeometryBinding(geometry);
executeBuilder.addComplexData("start", data, null, null, "application/wkt");

The JTSGeometryBinding is used with WKTGenerator to generate a WKT description of the geometry (i.e. POINT(0 0)). This non XML String is not parsed by method setComplexData. So an empty input is generated.

Error is due to this code :

try {
	data.set(XmlObject.Factory.parse(stream));
} catch (XmlException e) {

LOGGER.warn("error parsing data stream as xml node, trying to parse data as xs:string");

String text = "";

int i = -1;

try {
	while ((i = stream.read()) != -1) {
		text = text + (char) i;
	}
} catch (IOException e1) {
	LOGGER.error("error parsing stream", e);
}

The stream is read twice but the position is not reseted so the second time, stream is empty. A solution would be to convert stream to a String before parsing.

If this is not clear, I can provide additional infos. Thanks for your work

Gnatit avatar Aug 14 '17 09:08 Gnatit