Использование сложного типа данных с клиентом Python SUDS

Я пытаюсь вызвать веб-сервис из клиента Python, используя SUDS. Когда я вызываю функцию со сложным типом данных в качестве входного параметра, она передается неправильно, но сложный тип данных правильно возвращается из вызова веб-службы.

Webservice Type:
    Soap Binding 1.1
    Document/Literal 
Webserver: 
    Weblogic 10.3 
Python Version: 2.6.5, SUDS version: 0.3.9

вот код, который я использую:

Клиент Python:

from suds.client import Client
url = 'http://192.168.1.3:7001/WebServiceSecurityOWSM-simple_ws-context-root/SimpleServicePort?WSDL'
client = Client(url)
print client

#simple function with no operation on input...
result = client.service.sopHello()
print result
result = client.service.add10(10)
print result

params = client.factory.create('paramBean')
print params

params.intval = 10
params.longval = 20
params.strval = 'string value'
#print "params"
print params

try:
    result = client.service.printParamBean(params)
    print result
except WebFault, e:
    print e

try:
    result = client.service.modifyParamBean(params)
    print result
except WebFault, e:
    print e

print params

Java-класс веб-сервиса:

package simple_ws;

import javax.jws.Oneway;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;


public class SimpleService {
    public SimpleService() {

    }

    public void sopHello(int i) {
        System.out.println("sopHello: hello");
    }


    public int add10(int i) {
        System.out.println("add10:");
        return 10+i;
    }


    public void printParamBean(ParamBean pb) {
        System.out.println(pb);

    }
    public ParamBean modifyParamBean(ParamBean pb) {
        System.out.println(pb);
        pb.setIntval(pb.getIntval()+10);
        pb.setStrval(pb.getStrval()+"blah blah");
        pb.setLongval(pb.getLongval()+200);
        return pb;
    }

}

и класс бобов:

package simple_ws;

public class ParamBean {
    int intval;
    String strval;
    long longval;

    public void setIntval(int intval) {
        this.intval = intval;
    }

    public int getIntval() {
        return intval;
    }

    public void setStrval(String strval) {
        this.strval = strval;
    }

    public String getStrval() {
        return strval;
    }

    public void setLongval(long longval) {
        this.longval = longval;
    }

    public long getLongval() {
        return longval;
    }

    public String toString() {
        String stri = "\nInt val:" +intval;
        String strstr = "\nstrval val:" +strval;
        String strl = "\nlong val:" +longval;

        return stri+strstr+strl;
    }
}

Итак, поскольку проблема такова:

по вызову: client.service.printParamBean(params) в клиенте Python, вывод на стороне сервера:

Int val:0
strval val:null
long val:0

но по вызову: client.service.modifyParamBean(params)

Вывод клиента:

(reply){
   intval = 10
   longval = 200
   strval = "nullblah blah"
 }

Что я здесь делаю не так??


person sachin    schedule 06.04.2010    source источник


Ответы (1)


Судя по всему, серверная операция printParamBean печатает только то, что вы ей передаете, но ничего не возвращает. По сравнению с modifyParamBean, который одновременно печатает и возвращает значение. Может ли это быть вашей проблемой?

Я предполагаю, что переименование (строго для ясности) printParamBean в getParamBean и возврат того, что вы передали, может сделать то, что вы ожидаете.

person jathanism    schedule 07.04.2010