[Geoserver-users] Error on getting multiple values from python scripted WPS

Hi all,

I'm working on a python WPS script in geoserver. Therefore I use the following manual:

ref: http://docs.geoserver.org/latest/en/user/community/scripting/py/index.html

According to the manual I return my values like:
  return {
         'mykey1':myvalue1,
         'mykey2':myvalye2,
         'mykey3':myvalye3
     }

However, this is the error I get:
     ERROR [geoserver.wps] - Process execution failed
     org.geotools.process.ProcessException: java.lang.IllegalStateException: Process returned 1 values, should have returned 3

Aside from that, there is a warn on the Responsedocument:
     WARN [geoserver.wps] - cvc-complex-type.2.4.b: The content of element 'wps:ResponseDocument' is not complete. One of '{"http://www.opengis.net/wps/1.0.0":Output\}' is expected.

Using only 1 output value it works correctly.
Does anyone have a clue?

Regards,
   Tom

Folowing up on my previous post:
It turns out that the service always successfully gives 'Error' when returning a python dict object.

Here's how to reproduce:

from geoserver.wps import process

@process(
   title='Test WPS',
   description='None..',
   inputs={
     'name': (str,'Name of process')
   },
   outputs={
       'name': (str,'Name of process')
       #,'bogus':(str,'Bogus output')
   }
)

def run(name):
     return {'name':name} # succeeds but actually returns 'Error'
     #return name #succeeds
     #return {'name':name,'bogus':'Hello world'} # fails: Process failed during execution java.lang.IllegalStateException: Process returned 1 values, should have returned 2 Process returned 1 values, should have returned 2
     #return name, 'Hello world' #fails: Process failed during execution java.lang.ClassCastException: java.lang.String cannot be cast to org.python.core.PyObject java.lang.String cannot be cast to org.python.core.PyObject

Result of return {'name':name} :

<wps:ExecuteResponsexmlns:wps="http://www.opengis.net/wps/1.0.0&quot;xmlns:ows=&quot;http://www.opengis.net/ows/1.1&quot;xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;xml:lang=&quot;en&quot;service=&quot;WPS&quot;serviceInstance=&quot;http://localhost/geoserver/ows?&quot;version=&quot;1\.0\.0&quot;&gt;
<wps:Processwps:processVersion="1.0.0">
<ows:Identifier>py:test</ows:Identifier>
<ows:Title>Test WPS</ows:Title>
<ows:Abstract>None..</ows:Abstract>
</wps:Process>
<wps:StatuscreationTime="2013-04-19T08:56:25.508Z">
<wps:ProcessSucceeded>Process succeeded.</wps:ProcessSucceeded>
</wps:Status>
<wps:ProcessOutputs>
<wps:Output>
<ows:Identifier>name</ows:Identifier>
<ows:Title>Name of process</ows:Title>
<wps:Data>
<wps:LiteralData>Error</wps:LiteralData>
</wps:Data>
</wps:Output>
</wps:ProcessOutputs>
</wps:ExecuteResponse>

On 17-4-2013 13:51, Tom van Tilburg wrote:

Hi all,

I'm working on a python WPS script in geoserver. Therefore I use the following manual:

ref: http://docs.geoserver.org/latest/en/user/community/scripting/py/index.html

According to the manual I return my values like:
return {
        'mykey1':myvalue1,
        'mykey2':myvalye2,
        'mykey3':myvalye3
    }

However, this is the error I get:
    ERROR [geoserver.wps] - Process execution failed
    org.geotools.process.ProcessException: java.lang.IllegalStateException: Process returned 1 values, should have returned 3

Aside from that, there is a warn on the Responsedocument:
    WARN [geoserver.wps] - cvc-complex-type.2.4.b: The content of element 'wps:ResponseDocument' is not complete. One of '{"http://www.opengis.net/wps/1.0.0&quot;:Output\}' is expected.

Using only 1 output value it works correctly.
Does anyone have a clue?

Regards,
  Tom