2015-08-05 9 views
1

Я пытаюсь отправить сообщение AMF с использованием API соединений AMF, но получаю следующую ошибку, как показано ниже.Получение неподдерживаемой ошибки версии AMF при использовании соединения AMF для отправки сообщения flex

ClientStatusException 
message: Unsupported AMF version 

Для этой цели я использую blazeds-core-4.0.1.21287.jar.

Следующий мой код.

String url = "https://10.222.73.251:9443/vsphere-client/#"; 
     try { 
      amfConnection.connect(url); 
      System.out.println(amfConnection.getUrl()); 
     } catch (ClientStatusException cse) { 
      System.out.println("Error connecting url: " + cse); 
      return; 
     } 

     try { 

      amfConnection.addHttpRequestHeader("Cookie", 
        "6250CED9FBC7D5894B79973DEC1503A6"); 
      amfConnection.addHttpRequestHeader("Content-type", 
        "application/x-amf"); 
      amfConnection.setAmfTrace(new AmfTrace()); 
      //amfConnection.setObjectEncoding(3); 
      System.out.println(amfConnection.getObjectEncoding()); 

      CommandMessage cmsg = new CommandMessage(); 
      cmsg.setOperation(CommandMessage.CLIENT_PING_OPERATION); 
      cmsg.setMessageId(UUIDUtils.createUUID()); 
      cmsg.setHeader(Message.FLEX_CLIENT_ID_HEADER, "706E5399-D81A-11C8-11F7-BE5F1940632E"); 
      cmsg.setHeader(Message.ENDPOINT_HEADER, "amf"); 
      AcknowledgeMessage ack = (AcknowledgeMessage)amfConnection.call(null, cmsg); 

Любая помощь приветствуется. :)

ответ

1

У меня была та же проблема. Дело в том, что сервер ожидал «автономный пакет AMF».

См https://en.wikipedia.org/wiki/Action_Message_Format#AMF_self-contained_packet

В основном это означает, что вам необходимо добавить следующие байты перед «нормальным» AMF сообщения:

byte[] header = 
    { 0x00, 0x03,  // version 
    0x00, 0x00,  // nr of "header-type-structures" to follow (none) 
    0x00, 0x01,  // nr of "message-type-structures" to follow (one) 
    0x00, 0x04,  // target-uri-length 
    0x6e, 0x75, 0x6c, 0x6c, // target uri "null" 
    0x00, 0x04,  // response uri length 
    0x6e, 0x75, 0x6c, 0x6c, // response uri "null" 

    ??, ??, ??, ?? // the length of the "normal" message, 32 bits 
    };