【问题标题】:Can't locate object method "simple_request" via package "RPC::XML::Client::new: Unable to get RPC::XML::Parser object"无法通过包“RPC::XML::Client::new: Unable to get RPC::XML::Parser object”找到对象方法“simple_request”
【发布时间】:2014-05-13 18:39:20
【问题描述】:

这里似乎有十几个与缺少方法和OO Perl有关的问题,但据我所知,其中很多都与自制的Perl模块有关。但是,我的问题涉及 CPAN 模块中明显缺失的方法。我正在尝试使用 Confluence::Client::XMLRPC 模块创建一个脚本,该脚本将在调用时将文本上传到我们的 Confluence Wiki 页面。

我在我们的私人服务器上编程,无法直接访问 CPAN。我不得不从另一个盒子手动下载所有需要的包作为 tarball 并通过 FTP 传输它们。然后我使用make 以正确的顺序安装它们,注意依赖关系。

此外,公司的政策是将所有额外的 Perl 模块安装在我们主目录中的自定义 /lib 文件夹中,并且我们不允许更改系统的 Perl 库(尽管我们仍然可以使用默认包)。我也没有root权限。

现在我只是想用这个简单的代码 (pulled mostly from the Confluence module CPAN page) 测试 XML-RPC 服务器的功能:

#!/usr/bin/env perl

use strict;
use warnings;
use RPC::XML::Parser;
use Confluence::Client::XMLRPC;

my $username = 'username';
my $password = 'password';
my $proxyurl = '.../confluence/rpc/xmlrpc';

my $wiki = Confluence::Client::XMLRPC->new($username, $password, $proxyurl);

我应该在这里注意,我在这里没有使用use lib,因为我的自定义lib目录已经包含在$PERL5LIB中(也许这是错误的来源——方法被覆盖了?)

代码吐出如下错误:

Can't locate object method "simple_request" via package "RPC::XML::Client::new: Unable to get RPC::XML::Parser object" (perhaps you forgot to load "RPC::XML::Client::new: Unable to get RPC::XML::Parser object"?) at /home/myID/lib/share/perl5/Confluence/Client/XMLRPC.pm line 141.

如果它是一个自定义模块,我会怀疑我这里的编码错误,但它是一个标准 CPAN 模块,制作、测试和安装都非常好。我已经验证包 RPC/XML/Parser.pm 确实存在。我尝试打印 @INC 位置以验证我使用的是正确的模块:

print($INC{"Confluence/Client/XMLRPC.pm"}, "\n");
print($INC{"RPC/XML/Client.pm"}, "\n");
print($INC{"RPC/XML/Parser.pm"}, "\n");

打印出来:

/home/myID/lib/share/perl5/Confluence/Client/XMLRPC.pm
/home/myID/lib/share/perl5/RPC/XML/Client.pm
/home/myID/lib/share/perl5/RPC/XML/Parser.pm

看起来和我预期的差不多。自从试图找出问题所在以来,我一直在扯头发,但还没有取得比这更大的进展。任何建议和/或建议将不胜感激!

其他信息:

  • perl:revision 5 version 10 subversion 1
  • 字段:2.14
  • %ENV:PERL5LIB="/home/myID/lib/share/perl5"
  • @INC:
    • /home/myID/lib/share/perl5
    • /usr/local/lib64/perl5
    • /usr/local/share/perl5
    • /usr/lib64/perl5/vendor_perl
    • /usr/share/perl5/vendor_perl
    • /usr/lib64/perl5
    • /usr/share/perl5

【问题讨论】:

  • 问题与 simply_request 正在包 RPC::XML::Client::new 中查找这一事实有关,请发布您的 perl 和 @ 987654336@版本信息。
  • 啊,我可以得到perl 的版本,但是我如何得到fields 的版本信息呢?
  • perl -Mfields -e 'print $fields::VERSION'
  • 您对Confluence::Client::XMLRPC->new 的参数有问题。它期望( <URL>, <user>, <pass> )。这可能会导致级联错误,因为您的 RPC 客户端现在使用您的用户名作为 URL。
  • 哦,很好理解那个。没有解决问题,谢谢!我添加了我的版本信息以及 %ENV 和 @INC。

标签: perl oop xml-rpc perl-module confluence


【解决方案1】:

看起来我忽略了源代码附带的一些过于方便而不真实的示例。对Confluence-Client-XMLRPC-2.5/examples 中的upload_files.pl 进行五秒钟观察,发现我只在use Confluence::Client::XMLRPC; 之前遗漏了一行代码use lib qw(../lib);。在那之后,一切都像发条一样运转。

遗憾的是,我不知道 use lib qw(../lib); 现在做了什么,所以我认为这里的教训是了解更多关于 OO Perl 和一般 Perl 库的信息。如果我一开始就停下来阅读 CPAN 页面,我可能会为自己节省大量时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多