2014-03-27 149 views
1

我想用幾個參數調用soap函數。我做了python,但我怎麼能在java上做到這一點?Java soap客戶端到wsdl url

我的代碼上的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嗎?

感謝所有

回答

1

首先您需要生成代理類。你可以這樣做,使用wsimport(這是一個Java SE工具):

wsimport -keep http://78.188.50.246:8086/iskultur?singleWsdl 

這將生成類(在包中),並將結果在當前目錄。我測試了你的URL,它生成了兩個包層次結構(一個以'org'開頭,另一個以'com'開頭)。上面的命令將保留源代碼,以便您可以將這些目錄移動到Java項目源路徑(稍後,您應該在構建過程中包含此代碼生成步驟)。

在您的類路徑中生成的類,現在您可以從WSDL(傳遞服務的URL和命名空間限定名稱)中創建一個Service實例。我從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); 

然後你得到一個代理,你可以打電話給你的SOAP方法與Service.getPort()通過端口(IEbWCFtoLogo)的接口。現在您有一個可以調用遠程SOAP方法的參考。

IEbWCFtoLogo proxy = service.getPort(IEbWCFtoLogo.class); 

wsimport工具生成接收3個參數的stok()方法。我打了一些你使用的值,它返回-1.0的代碼如下:

double value = proxy.stok("a", "b", "code"); 
System.out.println("Result: " + value); 
+0

嗨,非常感謝您的詳細描述。我做了wsimport它會生成兩個文件夾,就像你說的。如何將他們包含在我的NetBeans項目中? –

+0

非常感謝,最後我管理它謝謝你:)非常感謝 –