簡體   English   中英

創建Java客戶端以訪問WSHTTPBINDING API服務

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM