2017-05-15 5 views
0

Ich benutze hessian zwischen PHP und Java-Service.php lange int zu java lange fehlgeschlagen, wenn php java über hessische

in PHP-Client:

$proxy = new HessianClient($testurl, $options); 
$result = $proxy->waoo(309000100340); 

in Java Server:

public Long waoo(long id) { 
    System.out.println(id); 
    return id; 
} 

Aber Java gedruckt -237.544.972 und php bekam int (4057422324).

Das bedeutet, dass Java den Eingang als int betrachtet, solange er lang ist.

Wie kann ich dieses Problem lösen?

Antwort

0

Vielleicht gibt es keine Lösung für dieses Problem. Java empfing hessische Binärdaten und deserialisierte sie basierend auf den Daten der Daten. Daher wird der Int von PHP als Java Int deserialisiert. Dann transformiert java den Wert in den deklarierten Typ (long), aber im vorherigen Schritt wurde die int-Variable bereits überflogen.

Die alternative Lösung besteht darin, die Zeichenfolge zu verwenden, um Daten zwischen verschiedenen Sprachen zu übertragen.

0
class HessianWriter extends HessianProtocolHandler 
{ 
    function writeObject(&$value) 
    { 
     $type = gettype($value); 
     switch ($type) { 
      case 'integer': 
       if (defined('HESSAIN_USE_LONG') && HESSAIN_USE_LONG) 
        $dispatch = 'writeLong'; 
       else 
        $dispatch = 'writeInt'; 
       break; 
    } 
} 

die Konstante HESSAIN_USE_LONG auf true gesetzt, vor dem Aufruf der Methode und glücklich sein