[英]Creating Java Client to access WSHTTPBINDING API Service
我需要使用Java中的UltiPro使用Web服務。 UltiPro的所有示例都是針對C#的(見下文),我看不到如何將其轉換為Java。
我的研究表明關鍵是WSHttpBinding。
UltiPro的文檔包含一個XML文件,他們說...
以下代碼是對UltiPro數據進行身份驗證的XML示例。 您可以復制整個內容並更新請求中的值。 響應示例顯示了如何格式化成功的響應。
我以前寫了很多Web服務和RESTful程序,但我堅持這個。
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">http://www.ultipro.com/services/loginservice/ILoginService/Authenticate</a:Action>
<h:ClientAccessKey xmlns:h="http://www.ultipro.com/services/loginservice">CAK</h:ClientAccessKey>
<h:Password xmlns:h="http://www.ultipro.com/services/loginservice">PASSWORD</h:Password>
<h:UserAccessKey xmlns:h="http://www.ultipro.com/services/loginservice">USER API KEY</h:UserAccessKey>
<h:UserName xmlns:h="http://www.ultipro.com/services/loginservice">USERNAME</h:UserName>
</s:Header>
<s:Body>
<TokenRequest xmlns="http://www.ultipro.com/contracts" />
</s:Body>
</s:Envelope>
C#代碼:
namespace ConsoleSample
{
using System;
using System.ServiceModel;
using System.ServiceModel.Channels;
using ConsoleSample.LoginService;
public class Program
{
internal static void Main(string[] args)
{
// Setup your user credentials:
const string UserName = "";
const string Password = "";
const string UserApiKey = "";
const string CustomerApiKey = "";
// Create a proxy to the login service:
var loginClient = new LoginServiceClient("WSHttpBinding_ILoginService");
try
{
// Submit the login request to authenticate the user:
string message;
string authenticationToken;
AuthenticationStatus loginRequest =
loginClient
.Authenticate(
CustomerApiKey,
Password,
UserApiKey,
UserName,
out message,
out authenticationToken);
if (loginRequest == AuthenticationStatus.Ok)
{
// User is authenticated and the authentication token is provided.
Console.WriteLine("User authentication successful.");
}
else
{
// User authentication has failed. Review the message for details.
Console.WriteLine("User authentication failed: " + message);
}
loginClient.Close();
Console.WriteLine("Press a key to exit...");
Console.ReadKey(true);
}
catch (Exception ex)
{
Console.WriteLine("Exception: " + ex);
loginClient.Abort();
throw;
}
}
我知道您希望在JAVA中編寫它,但也許我的代碼中的某些東西會有所幫助。
我能夠使用以下代碼成功進行身份驗證:
<?php
$url = 'https://rental5.ultipro.com/services/LoginService';
$action = 'http://www.ultipro.com/services/loginservice/ILoginService/Authenticate';
$username = 'MY_USERNAME';
$password = 'MY_PASSWORD';
$userAccessKey = 'MY_USER_ACCESS_KEY';
$clientAccessKey = 'MY_CLIENT_ACCESS_KEY';
$loginPayload =<<<EOD
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">{$action}</a:Action>
<h:ClientAccessKey xmlns:h="http://www.ultipro.com/services/loginservice">{$clientAccessKey}</h:ClientAccessKey>
<h:Password xmlns:h="http://www.ultipro.com/services/loginservice">{$password}</h:Password>
<h:UserAccessKey xmlns:h="http://www.ultipro.com/services/loginservice">{$userAccessKey}</h:UserAccessKey>
<h:UserName xmlns:h="http://www.ultipro.com/services/loginservice">{$username}</h:UserName>
</s:Header>
<s:Body>
<TokenRequest xmlns="http://www.ultipro.com/contracts" />
</s:Body>
</s:Envelope>
EOD;
$client = new SoapClient(
null,
array(
'location' => $url,
'uri' => '',
'trace' => 1,
'encoding' => 'UTF-8',
'use' => SOAP_LITERAL,
'soap_version' => SOAP_1_2
)
);
try {
$order_return = $client->__doRequest($loginPayload, $url, $action, SOAP_1_2, 0);
$getLastRequestHeaders = $client->__getLastRequestHeaders();
$getLastRequest = $client->__getLastRequest();
$getLastResponseHeaders = $client->__getLastResponseHeaders();
$getLastResponse = $client->__getLastResponse();
echo "<pre>";
echo $getLastRequestHeaders;
echo '<br>';
echo $getLastResponseHeaders;
echo '<br>';
print_r($order_return);
echo "</pre>";
} catch (SoapFault $exception) {
var_dump(get_class($exception));
var_dump($exception);
}
?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.