0

我正在尝试运行我在这里找到的客户端-服务器示例 => examples/guide1,但它似乎没有按预期工作。

尽管消息似乎到达了服务器并收到了答复,但从不调用 ExampleServer 的方法“processRequest”,这意味着消息从未真正得到处理。正如我所说,在客户端调用“receivedSuccessMessage”,但它只处理原始消息。

我看到由于服务器日志中的此日志而在服务器中收到了消息:“接收消息类型 [686] 对等 [aaa://localhost:47269]”

我还注意到有两个 StackImpl 类,一个可以在“org.jdiameter.server.impl”下找到,另一个在“org.jdiameter.client.impl”下。然而,客户端使用服务器下的那个,这看起来很奇怪,并且一眼看去它们是不一样的。

我也找不到javadocs,我找到的唯一文档是here,它并没有说太多。

4

1 回答 1

2

好的,我解决了大部分问题。

首先,jdiameter版本无法通过 Maven 解决,需要更改(这不是我上面提到的问题,但很高兴知道)。我使用了 1.5.6.0.-build501。还使用 Java 1.6(即通过 maven-compiler-plugin)来避免丑陋的编译错误。(构建路径指定 Java 1.5,我的机器上有 1.6 和/或更高版本)。

关于我的第二个问题,StackImplunderorg.jdiameter.server.impl实现了 under org.jdiameter.client.impl。但是,您不能将其与客户端一起使用(至少在此示例中)。不知道他们为什么这样做。此外,客户端配置使用服务器的XMLConfigurationorg.jdiameter.server.impl.helpers.XMLConfiguration而不是org.jdiameter.server.impl.helpers. 它不能使用客户端包中的那个。

因此,为了使示例按预期工作,您需要更改ExampleClient.java. 具体如下方法。

    private void sendNextRequest(int enumType) throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
    Request r = this.session.createRequest(commandCode, this.authAppId, realmName);
    AvpSet requestAvps = r.getAvps();
    Avp exchangeType = requestAvps.addAvp(exchangeTypeCode, (long) enumType, vendorID, true, false, true);
    Avp exchengeData = requestAvps.addAvp(exchangeDataCode, TO_SEND[toSendIndex++], vendorID, true, false, false); 
    requestAvps.addAvp(Avp.DESTINATION_HOST, "127.0.0.1", true, false, true);
    this.session.send(r, this);
    dumpMessage(r,true);
}

serverURI应从中删除,createRequest并且 AVP 293 (DESTINATION HOST) 应与服务器的主机匹配。

在仔细研究日志文件并进行大量调试后,我发现了这一点。

DEBUG PeerTableImpl  - In getPeerByName for peer name [aaa://127.0.0.1:3868]. going to loop through peerTable and find a matching entry
DEBUG PeerTableImpl  - Checking to see if peer name [aaa://127.0.0.1:3868] matches peertable value of [aaa://127.0.0.1:49150] or [127.0.0.1]
DEBUG controller.PeerTableImpl  - No peer found in getPeerByName for peer [aaa://127.0.0.1:3868] will return null

另请注意, 和 的 applicationID 成员中缺少“3 ExampleClient.javaExampleServer.java。这似乎不会影响示例,但如果您开始搞乱配置,您可能会遇到如下问题:

DEBUG org.jdiameter.client.impl.parser.MessageImpl  - Application Ids in this message are:
DEBUG org.jdiameter.client.impl.parser.MessageImpl  - [AppId [Vendor-Id:0; Auth-Application-Id:33333; Acct-Application-Id:0]]
DEBUG org.jdiameter.client.impl.parser.MessageImpl  - Returning [AppId [Vendor-Id:0; Auth-Application-Id:33333; Acct-Application-Id:0]] as the first application id because there are no vendor specific ones found
DEBUG org.jdiameter.client.impl.controller.PeerImpl  - Could not process request. Result Code = [3007], Error Message: [null]
DEBUG org.jdiameter.client.impl.controller.PeerImpl  - Sending response indicating we could not process request
于 2014-10-15T10:23:04.957 回答