Использование сложного типа данных с клиентом Python SUDS - PullRequest
3 голосов
/ 07 апреля 2010

Я пытаюсь вызвать веб-сервис из клиента 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"
 }

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

1 Ответ

0 голосов
/ 07 апреля 2010

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

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

...