我想用一些参数调用soap函数。我做了它python但我怎么能在java上做到这一点?
我在python上的代码:
url = 'http://78.188.50.246:8086/iskultur?singleWsdl'
client = Client(url)
d = dict(UserId='a', UserPass='b', Barkod=str(value))
result = client.service.Stok(**d)
return int(result)
我怎么能在java上做到这一点?
全部谢谢
答案 0 :(得分:1)
首先,您需要生成代理类。您可以使用wsimport
(它是Java SE工具)来实现这一点:
wsimport -keep http://78.188.50.246:8086/iskultur?singleWsdl
这将生成类(在包中)并将结果放在当前目录中。我测试了您的网址,它生成了两个包层次结构(一个在' org'中开始,另一个在' com'中)。上面的命令将保留源代码,因此您可以将这些目录移动到Java项目源路径(稍后您应该在构建过程中包含此代码生成步骤)。
使用类路径中生成的类,现在可以从Service
创建WSDL
实例(传递URL和命名空间限定名称的服务)。我从WSDL获得了这些信息。
URL wsdlLocation = new URL("http://78.188.50.246:8086/iskultur?singleWsdl");
QName serviceName = new QName("http://tempuri.org/", "EbWCFtoLogo");
Service service = Service.create(wsdlLocation, serviceName);
然后,您将获得一个代理,您可以使用Service.getPort()
调用SOAP方法来传递端口(IEbWCFtoLogo
)的接口。现在您有了一个可以调用远程SOAP方法的引用。
IEbWCFtoLogo proxy = service.getPort(IEbWCFtoLogo.class);
wsimport
工具生成了stok()
方法,该方法接收3个参数。我调用了您使用的一些值,并在下面的代码中返回-1.0
:
double value = proxy.stok("a", "b", "code");
System.out.println("Result: " + value);