一般問題:消費SOAP Web服務 - Java VS PHP
我們正在我們公司推出一個名爲ServiceNow的新ITSM Toolsuite。 ServiceNow提供了很多不錯的開箱即用Web服務。 當前我們正在實現一些與其他interal系統的接口,並且我們使用這些Webservices來使用Servicenow的數據。
我們怎麼做的在PHP:
<?php
$credentials = array('login'=>'user', 'password'=>'pass');
$client = new SoapClient("https://blah.com/incident.do?WSDL", $credentials);
$params = array('param1' => 'value1', 'param1' => 'value1');
$result = $client->__soapCall('getRecords', array('parameters' => $params));
// result array stored in $result->getRecordsResult
?>
而這就是它! 5分鐘的工作,美麗而簡單 - 從我的角度來看。
好了,現在在的Java相同:
我做了一些研究,似乎感到沉淪在使用Apache Axis2的在Java Web服務消費。所以我決定走下去。
- 安裝Apache Axis
開放的cygwin或cmd並從WSDL生成類..跆拳道?做什麼的?
$ ./wsdl2java.sh -uri https://blah.com/incident.do?WSDL
複製生成的類Java項目在Eclipse。
- 使用此類:
ServiceNow_incidentStub proxy = new ServiceNow_incidentStub();
proxy._getServiceClient().getOptions().setProperty(org.apache.axis2.transport.http.HTTPConstants.CHUNKED, Boolean.FALSE);
ServiceNow_incidentStub.GetRecords defectsGetRecords = new ServiceNow_incidentStub.GetRecords();
ServiceNow_incidentStub.GetRecordsResponse defectsResult = new ServiceNow_incidentStub.GetRecordsResponse();
proxy._getServiceClient().getOptions().setManageSession(true);
HttpTransportProperties.Authenticator basicAuthentication = new HttpTransportProperties.Authenticator();
basicAuthentication.setUsername("user");
basicAuthentication.setPassword("pass");
proxy._getServiceClient().getOptions().setProperty(org.apache.axis2.transport.http.HTTPConstants.AUTHENTICATE, basicAuthentication);
defectsResult = proxy.getRecords(defectsGetRecords);
com.service_now.www.ServiceNow_incidentStub.GetRecordsResult_type0[] defects = defectsResult.getGetRecordsResult();
for (int j=0; j < defects.length; j++) {
// do something
}
它的工作,但我認爲這種方式是非常複雜的.. 每次的東西在WSDL的變化 - 我必須和軸重新編譯。 沒有辦法像Soap-endpoint或類似的東西配置全局的東西。
有沒有一種更簡單的方法在Java中使用WSDL來使用SOAP?
我喜歡Netbeans的網絡服務嚮導,(它這個最適合你),但我真的沒有廣泛使用它們。 – madth3
@felixsigl希望你在這個時候爲你的問題找到了解決方案。你能分享一下嗎? 因爲我也遇到了同樣的問題,我發現Json Service作爲替代解決方案。但是我在連接到ServiceNow時遇到了一些問題。如果你有一些代碼片段,這將是有幫助的。 –