gpt4 book ai didi

python - 将复杂数据类型与 python SUDS 客户端一起使用

转载 作者:行者123 更新时间:2023-11-28 19:28:23 25 4
gpt4 key购买 nike

我正在尝试使用 SUDS 从 python 客户端调用网络服务。当我调用具有复杂数据类型作为输入参数的函数时,它未正确传递,但复杂数据类型从 Web 服务调用中正确返回。

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

}

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

所以,问题是这样的:

调用: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"
}

我在这里做错了什么??

最佳答案

从它的外观来看,服务器端操作 printParamBean 仅打印您传递给它的内容,但不返回任何内容。与同时打印和返回值的 modifyParamBean 相比。这可能是你的问题吗?

我推测将 printParamBean 重命名(严格来说是为了清楚起见)到 getParamBean 并让它返回您传递给它的内容,可能会达到您的预期。

关于python - 将复杂数据类型与 python SUDS 客户端一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2588768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com