我正在尝试运行我在这里找到的客户端 - 服务器示例=> examples/guide1但它似乎没有按预期工作。
虽然消息似乎到达服务器并且收到了答案,但是从不调用ExampleServer的方法“processRequest”,这意味着永远不会实际处理该消息。正如我所说,在客户端上调用“receivedSuccessMessage”,但它只处理原始消息。
我看到由于服务器日志中的这个日志,服务器收到了消息: “接收消息类型[686]到peer [aaa:// localhost:47269]”
我还注意到有两个StackImpl类可以在“org.jdiameter.server.impl”下找到,而另一个在“org.jdiameter.client.impl”下。然而,客户端使用服务器下的那个看起来很奇怪,并且从快速浏览一下就不一样了。
我也找不到javadocs,我找到的唯一文档是here,但实际上并没有多说。
答案 0 :(得分:2)
好的,我解决了大部分问题。
首先,jdiameter
版本无法通过Maven解决,需要更改(这不是我上面提到的问题,但很高兴知道)。我使用 1.5.6.0.-build501 。还使用Java 1.6(即通过maven-compiler-plugin)来避免丑陋的编译错误。 (构建路径指定Java 1.5,我的机器上有1.6和/或更高版本。)
关于我的第二个问题,StackImpl
下的org.jdiameter.server.impl
实现org.jdiameter.client.impl
下的XMLConfiguration
。但是,您不能将其与客户端一起使用(至少在此示例中)。不知道为什么他们这样做。此外,客户端配置使用服务器的org.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
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
应从ExampleClient.java
中移除,AVP 293(目的地主机)应与服务器的主机匹配。
我在仔细研究了日志文件并进行了大量调试后发现了这一点。
ExampleServer.java
请注意,缺少' 3'来自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
和{{1}}的applicationID成员。这似乎不会影响示例,但如果你开始搞乱配置,你可能会面临这样的问题:
{{1}}