一般的な質問:
弊社では、ServiceNowという新しいITSMToolsuiteをリリースします。ServiceNowは、すぐに使用できる多くの優れたWebサービスを提供します。現在、他の内部システムへのいくつかのインターフェースを実装しており、これらのWebサービスを使用して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でも同じです。
私はいくつかの調査を行いましたが、誰もがJavaでWebサービスを利用するためにApacheAxis2を使用しているようです。それで私はその道を行くことにしました。
- ApacheAxisをインストールします
cygwinまたはcmdを開き、WSDLからクラスを生成します。WTF?何のために?
$ ./wsdl2java.sh -uri https://blah.com/incident.do?WSDL
生成されたクラスをEclipseのJavaプロジェクトにコピーします。
- このクラスを使用します。
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の何かが変更されるたびに、axisを使用してそれらを再コンパイルする必要があります。Soap-endpointなどをグローバルに構成する方法はありません。
JavaでWSDLを使用してSOAPを使用する簡単な方法はありますか?