2010-04-06 85 views
3

我想從使用SUDS的python客戶端調用webservice。當我使用複雜的數據類型作爲輸入參數調用函數時,它沒有正確傳遞,但是複雜的數據類型從Web服務調用中正確返回。使用複雜的數據類型與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 

webservice的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; 
    } 

} 

和bean類:

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; 
    } 
} 

所以,問題是這樣的:

的通話:在Python客戶端client.service.printParamBean(params),在服務器端 輸出爲:

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

但電話:client.service.modifyParamBean(params)

客戶端輸出是:

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

我在做什麼錯在這裏?

回答

0

從它的外觀來看,服務器端操作printParamBean只是打印您傳遞它的內容,但不返回任何內容。與modifyParamBean相比,它既有打印價值,也有返回價值。這可能是你的問題嗎?

我推測,重命名(嚴格爲清晰起見)printParamBeangetParamBean並讓它返回你通過它的內容,可能會做你期望的。

相關問題