使用Perl访问SOAP API。长期的问题?

时间:2014-01-20 20:14:11

标签: perl api soap wsdl long-integer

我手头有一个具有丰富功能的SOAP API,但我只需要两种方法:将用户添加到数据库并从数据库中删除用户。

目前我被Perl锁定为此任务的语言。

因为删除用户作为用户“id”的唯一参数(而不是用户名中的“userId”),我需要自己定义它而不是依赖于MySQL的auto_increment。

WSDL的相关部分:

<xs:element name="saveLocalUserEx">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="user" nillable="true" type="ns2:LocalUser"/>
<xs:element minOccurs="0" name="requestingUser" nillable="true" type="xs:string"/></xs:sequence>
</xs:complexType>
</xs:element>

<xs:complexType name="LocalUser">
<xs:sequence>
<xs:element minOccurs="0" name="dbData" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="description" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="displayName" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="domainName" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="enabled" type="xs:boolean"/>
<xs:element minOccurs="0" name="firstName" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="id" nillable="true" type="xs:long"/>
<xs:element minOccurs="0" name="lastName" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="loginId" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="loginPasswordHash" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="loginPasswordHashType" type="xs:int"/>
<xs:element minOccurs="0" name="preOrSelfProvisioned" type="xs:boolean"/>
<xs:element minOccurs="0" name="DEFAULT_PASSWORD_HASH_TYPE" type="xs:int"/>
<xs:element minOccurs="0" name="PKCS5_REVERSIBLE_HASH_TYPE" type="xs:int"/>
<xs:element minOccurs="0" name="SHA1_NON_REVERSIBLE_HASH_TYPE" type="xs:int"/>
<xs:element minOccurs="0" name="STR_DEFAULT_ADMIN_NAME" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="STR_DEFAULT_DOMAIN" nillable="true" type="xs:string"/><xs:element minOccurs="0" name="STR_DEFAULT_SPONSOR_NAME" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>

以下是我第一次写的代码的(相关部分)。

my $soap = SOAP::Lite
    ->uri($uri)
    ->proxy($proxy);

sub SOAP::Transport::HTTP::Client::get_basic_credentials {
    return 'abc' => 'abc';
    }

my $test_id = 1515;

# Preparing data for API query for saving the new user.
my $data = SOAP::Data->name("LocalUser" => 
    \SOAP::Data->value(
    SOAP::Data->name("loginId" => $new_username),
    SOAP::Data->name("enabled" => true),
    SOAP::Data->name("domainName" => $domainname),
    SOAP::Data->name("loginPasswordHash" => $hash),
    SOAP::Data->name("id" => $test_id),
    SOAP::Data->name("description" => 'Guest User Account generated on: ' . localtime()),
    SOAP::Data->name("displayName" => 'Guest')
    )
 );

my $som = $soap->saveLocalUserEx($data);
print Dumper $som->result();

它几乎完成了这项工作。事实上; API接受此查询,结果成功并生成新用户。问题是,数据库中的id字段仍然是MySQL auto_incremented,而不是1515我试图这次给它。然后我开始想我可能需要明确地将参数键入long,因为wsdl声明id的类型是xs:long。

我尝试用以下代码修改我的代码:

SOAP::Data->type('xs:long')->name("id" => $test),

SOAP::Data->type('long')->name("id" => $test),

但这些没有帮助。 API查询成功,但不会将ID设置为1515.

你们有任何想法如何使这项工作?谢谢!

0 个答案:

没有答案