Web サービスへの SOAP 呼び出しを行うのに苦労しています。WSDL は次のようになります。
<wsdl:definitions name="Service" targetNamespace="/Service/">
<wsdl:types>
<xsd:schema targetNamespace="/#/">
<xsd:element name="authToken">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="username" type="xsd:string"/>
<xsd:element name="password" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="fault">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="faultType">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="REQUIRED"/>
<xsd:enumeration value="INVALID"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="faultData" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:simpleType name="param1">
<xsd:restriction base="xsd:int"/>
</xsd:simpleType>
<xsd:simpleType name="param2">
<xsd:restriction base="xsd:int"/>
</xsd:simpleType>
<xsd:simpleType name="param3">
<xsd:restriction base="xsd:int"/>
</xsd:simpleType>
<xsd:element name="Add">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="tns:authToken"/>
<xsd:element name="param1" type="tns:param1"/>
<xsd:element name="param2" type="tns:param2"/>
<xsd:element name="param3" type="tns:param3"/>
<xsd:choice>
<xsd:element name="Name">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="first" type="tns:namefirst"/>
<xsd:element name="last" type="tns:namelast"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
....
次に、XML:Compile を使用して、次のことを行います。
use XML::Compile::WSDL11;
use XML::Compile::SOAP11;
use XML::Compile::Transport::SOAPHTTP;
my $wsdlXml = XML::LibXML->new->parse_file("pathtowsdl");
my $wsdl = XML::Compile::WSDL11->new($wsdlXml);
my $call = $wsdl->compileClient('Add');
my %param = ('authToken' => {
'username' => 'xxx',
'password' => 'xxxx',
},
'param1' => 'xxx',
'param2' => 'xxxx',
'param3' => 'xxxx',
'Name' => {
'first' => 'xxx',
'last' => 'xxx',
});
my ($response, $trace) = $call->(\%params);
上記から障害が発生します。
非整列化エラー: 予期しない要素 (uri:""、local:"authToken")
「authToken」を取り出すと、「エラー: 要素 `authToken' に必要な値がありません」というローカル エラーが発生します。
私のparams構造が間違っていると思いますが、どうあるべきかわかりません。何か案は?
ティア