java - 使用 AMF 连接发送 Flex 消息时出现不支持的 AMF 版本错误

标签 java apache-flex amf

我尝试使用 AMF 连接 API 发送 AMF 消息,但收到如下错误,如下所示。

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);

感谢任何帮助。 :)

最佳答案

我也遇到了同样的问题。原因是服务器期望一个“独立的 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
  };

关于java - 使用 AMF 连接发送 Flex 消息时出现不支持的 AMF 版本错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31824589/

相关文章:

apache-flex - AMF 和跨站脚本漏洞混淆

c# - 将 Mate 的 RemoteObjectInvoker 与 C# 类一起使用

java - 如何用JAVA解析flash cookies(.SOL文件)

java - 使用 Hibernate,我可以在同一个表中混合每个子类表和 <map> 吗?

java - 在特定模式之前拆分所有内容

java - 在 eclipse indigo 中找不到 Window builder pro

java - 为 Flex/BlazeD 设置多种 channel 类型 (AMF/AMFX)

apache-flex - Actionscript 3/Flex 中的双冒号 ('::' ) 是什么意思?

apache-flex - Flex 在处理大量数据时导致浏览器无响应

java - 如何使用 Scanner.nextLine()