2017-02-13 1 views
1

Ich muss einen Webdienst von UltiPro in Java verwenden. Alle Beispiele von UltiPro sind für C# (siehe unten) und ich kann nicht sehen, wie man das in Java übersetzt.Java-Client für den Zugriff auf den WSHTTPBINDING-API-Dienst erstellen

Meine Forschung zeigt, dass der Schlüssel WSHttpBinding ist.

UltiPro in der Dokumentation eine XML-Datei enthält, dass sie sagen ...

Der folgende Code ist ein XML-Beispiel zu Ihren UltiPro Daten zur Authentifizierung. Sie können den gesamten Inhalt kopieren und die Werte in der Anfrage aktualisieren. Das Antwortbeispiel zeigt, wie eine erfolgreiche Antwort formatiert wird.

Ich habe schon viele Webdienste und RESTful-Programme geschrieben, aber ich stecke auf diesem fest.

<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# -Code:

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; 
      } 
     } 
+0

Sie nicht allein sind. Java ->. NET Interop-Probleme sind die schlimmsten. – Matt1776

+1

Ich gab es auf, dies zu versuchen. Wir wechseln zu .NET, so dass es sowieso einfacher wird ... –

Antwort

0

Ich verstehe Sie suchen es in JAVA zu schreiben, aber vielleicht etwas von meinem Code helfen.

konnte ich mit dem folgenden Code erfolgreich authentifizieren:

<?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); 
} 
?> 
Verwandte Themen