为什么 RvdProxy.getServices() 可能错误地返回空数组?

发布于 2024-08-25 12:49:03 字数 867 浏览 7 评论 0原文

以下代码片段尝试创建连接到特定 rvd 的 Tib DaemonManager,然后查询该 rvd 的服务。

public static void main(String[] args) throws RuntimeException {
    DaemonManager daemonManager = new DaemonManager("http://foo.com:7580");
    if(daemonManager.getDaemonType() == DaemonManager.RVD) {
        DaemonProxy daemonProxy = daemonManager.getDaemonProxy();
        final RvdProxy rvdProxy = (RvdProxy) daemonProxy;
        Service[] services = rvdProxy.getServices();
        System.out.println(services.length); //prints 0
        for (Service service : services) {
            System.out.println(service.getNetwork());
        }
    }
}

即使此 rvd 的 Web 界面列出了多个可用服务,这也会打印零。 为什么会发生这种情况?

我连接的守护进程正在运行该软件的 v 7.5.1,而我使用的 rvconfig.jar 来自 v 7.5.1以及。

使用 Tibco 的 DaemonManager 时是否存在导致我陷入困境的问题?

The following code snippet attempts to create a Tib DaemonManager connecting to a particular rvd, and then query for that rvd's services.

public static void main(String[] args) throws RuntimeException {
    DaemonManager daemonManager = new DaemonManager("http://foo.com:7580");
    if(daemonManager.getDaemonType() == DaemonManager.RVD) {
        DaemonProxy daemonProxy = daemonManager.getDaemonProxy();
        final RvdProxy rvdProxy = (RvdProxy) daemonProxy;
        Service[] services = rvdProxy.getServices();
        System.out.println(services.length); //prints 0
        for (Service service : services) {
            System.out.println(service.getNetwork());
        }
    }
}

This prints zero, even though the web interface for this rvd lists multiple available services. Why might this happen?

The daemon I am connecting to is running v 7.5.1 of the software, and the rvconfig.jar that I am using is from v 7.5.1 as well.

Is there a gotcha when using Tibco's DaemonManager that is causing me to come unstuck?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

最丧也最甜 2024-09-01 12:49:03

我使用 Wireshark 来查看我的 RvdProxy 和 RVD 之间发送的流量它本身,看起来像是大量的 HTTP GET 流量。例如:

0000  00 1e 0b a4 d1 7c 00 12  d9 7c 8a bf 08 00 45 00   .....|.. .|....E.
0010  03 87 a4 58 40 00 3d 06  66 90 0a 09 14 15 0a 0a   ...X@.=. f.......
0020  07 61 1d 9c bf 09 fe 1e  d6 82 6e 77 b9 52 80 18   .a...... ..nw.R..
0030  00 1b 05 43 00 00 01 01  08 0a ac 1c 6f 67 07 b2   ...C.... ....og..
0040  86 1f 72 3d 23 30 30 38  30 38 30 3e 3c 66 6f 6e   ..r=#008 080><fon
0050  74 20 66 61 63 65 3d 48  65 6c 76 65 74 69 63 61   t face=H elvetica
0060  2c 41 72 69 61 6c 20 73  69 7a 65 3d 32 20 63 6f   ,Arial s ize=2 co
0070  6c 6f 72 3d 23 46 46 46  46 46 46 3e 3c 62 3e 43   lor=#FFF FFF><b>C

果然,经过进一步检查,代理发出的请求是针对由守护进程本身提供服务的网页 - 因此代理 API 只是一个屏幕-刮刀

但是,如果服务出现在屏幕抓取的网页上,为什么我得不到服务?

打开调试:

System.setProperty("com.tibco.tibrv.config.debug","classes-to-debug")

您会发现该模式用于从网页中提取服务。 ..

/services,GET~~~~~\
service_detail\\?(\\d+)>\\1</a>.*?size=2>(\\d+\\.\\d+\\.\\d+\\.\\d+)</td>.*?size=2>
(\\d+)</td>.*?size=2>(\\d+)</td>~~~~~\

...无法匹配任何内容!就我而言,这是因为我的服务网络采用 (\\d+\\.\\d+\\.\\d+\\.\\d+) 的形式> 而是 ;(\\d+\\.\\d+\\.\\d+\\.\\d+) 的形式 - 请注意前导分号。这种微妙的差异是我所有问题的根源!

这看起来像是 rvconfig jar 中的错误 - 需要通过 Tibco 引发! :(

I used Wireshark to look at the traffic being sent between my RvdProxy and the RVD itself, and it looks like a lot of HTTP GET traffic. For example:

0000  00 1e 0b a4 d1 7c 00 12  d9 7c 8a bf 08 00 45 00   .....|.. .|....E.
0010  03 87 a4 58 40 00 3d 06  66 90 0a 09 14 15 0a 0a   ...X@.=. f.......
0020  07 61 1d 9c bf 09 fe 1e  d6 82 6e 77 b9 52 80 18   .a...... ..nw.R..
0030  00 1b 05 43 00 00 01 01  08 0a ac 1c 6f 67 07 b2   ...C.... ....og..
0040  86 1f 72 3d 23 30 30 38  30 38 30 3e 3c 66 6f 6e   ..r=#008 080><fon
0050  74 20 66 61 63 65 3d 48  65 6c 76 65 74 69 63 61   t face=H elvetica
0060  2c 41 72 69 61 6c 20 73  69 7a 65 3d 32 20 63 6f   ,Arial s ize=2 co
0070  6c 6f 72 3d 23 46 46 46  46 46 46 3e 3c 62 3e 43   lor=#FFF FFF><b>C

Sure enough, upon further inspection, it turns out that the requests being made by the proxy are to the web pages served by the Daemon itself - so the proxy API is just a screen-scraper.

But why am I getting no services if they appear on the web pages that are being screen-scraped?

Switch on debugging:

System.setProperty("com.tibco.tibrv.config.debug","classes-to-debug")

And you find that the pattern being used to extract the services from the web-page...

/services,GET~~~~~\
service_detail\\?(\\d+)>\\1</a>.*?size=2>(\\d+\\.\\d+\\.\\d+\\.\\d+)</td>.*?size=2>
(\\d+)</td>.*?size=2>(\\d+)</td>~~~~~\

...fails to match anything! In my case it is because my service networks are not of the form (\\d+\\.\\d+\\.\\d+\\.\\d+) but rather of the form ;(\\d+\\.\\d+\\.\\d+\\.\\d+) - note the leading semicolon. This subtle difference is the source of all of my problems!

This looks like a bug in the rvconfig jar - which needs to be raised with Tibco! :(

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文