Imam wsdl based Java SOAP server, i pokušavam da pozovem soap metod iz php klijenta koji ima arrayList kao jedan od argumenata. Ostali metodi rade normalno, ali prilikom poziva tog metoda, prateći soap request vidim da nusoap ne šalje ništa za arrayList_2 unutar tog poziva, kao na primer:
tako da dobijam poruku o grešci:
JAXRPC.TIE.01: caught exception while handling request: malformed array
type: <arrayType attribute missing>
Verzija NUSOAP-a je 0.6.8 (1.76)
Evo koda koji sam koristio:
Evo opisa arrayList tipa u wsdl fajlu:
i opisa metoda koji se poziva:
Da li postoji neko na ovom forumu koji bi imao ideju kako ovo rešiti ?
Hvala na pomoći
Code:
<SOAP-ENV:Body><tns:loadStabloGaTipFilt
xmlns:tns="urn:Navigator"><int_1
xsi:type="xsd:int">1</int_1><ArrayList_2
xsi:type="ns2:arrayList"></ArrayList_2></tns:loadStabloGaTipFilt></SOAP-ENV:Body>
<SOAP-ENV:Body><tns:loadStabloGaTipFilt
xmlns:tns="urn:Navigator"><int_1
xsi:type="xsd:int">1</int_1><ArrayList_2
xsi:type="ns2:arrayList"></ArrayList_2></tns:loadStabloGaTipFilt></SOAP-ENV:Body>
tako da dobijam poruku o grešci:
JAXRPC.TIE.01: caught exception while handling request: malformed array
type: <arrayType attribute missing>
Verzija NUSOAP-a je 0.6.8 (1.76)
Evo koda koji sam koristio:
Code:
<?php
require_once("nusoap.php");
//nova sesija kako bi pokupio JSESSIONID zbog java sesije
session_start();
$client = new
soapclient("http://localhost:15000/b04/navigator?WSDL",true);
$proxy = $client->getProxy();
$response = $proxy->loadKorisnik("user","pass");
$header_array = explode("\n",$proxy->response);
foreach($header_array as $line)
{
if(strstr($line,"Set-Cookie"))
{
$java_session_id = substr($line,23,32);
$_SESSION["JSESSIONID"] = $java_session_id;
}
}
//ovo sam pokupio sa jednog drugog threada
//zati sto prvobitni pokusaj sa jednostavnim
//nizom $arraylist nije radio
$arraylist = new soapval("arrayList_2","arrayList",array("1"),false,
"http://java.sun.com/jax-rpc-ri/internal",
array("SOAP-ENC:arrayType" => "xsd:anyType[2]"));
$result = $proxy->loadStabloGaTipFilt(1,$arraylist);
/* takodje sam probao i ovo, ali bez rezultata
$params = array("int_1"=>"1",
"arrayList_2" => new
soapval("arrayList_2","arrayList",array("1"=>"1"),false,
"http://java.sun.com/jax-rpc-ri/internal",
array("SOAP-ENC:arrayType" => "xsd:anyType[2]")));
$result = $client->call("loadStabloGaTipFilt",$params);*/
// Display the request and response
echo "<h2>Request</h2>";
echo "" . htmlspecialchars($proxy->request, ENT_QUOTES) . "";
echo "<h2>Response</h2>";
echo "" . htmlspecialchars($proxy->response, ENT_QUOTES) . "";
?>
<?php
require_once("nusoap.php");
//nova sesija kako bi pokupio JSESSIONID zbog java sesije
session_start();
$client = new
soapclient("http://localhost:15000/b04/navigator?WSDL",true);
$proxy = $client->getProxy();
$response = $proxy->loadKorisnik("user","pass");
$header_array = explode("\n",$proxy->response);
foreach($header_array as $line)
{
if(strstr($line,"Set-Cookie"))
{
$java_session_id = substr($line,23,32);
$_SESSION["JSESSIONID"] = $java_session_id;
}
}
//ovo sam pokupio sa jednog drugog threada
//zati sto prvobitni pokusaj sa jednostavnim
//nizom $arraylist nije radio
$arraylist = new soapval("arrayList_2","arrayList",array("1"),false,
"http://java.sun.com/jax-rpc-ri/internal",
array("SOAP-ENC:arrayType" => "xsd:anyType[2]"));
$result = $proxy->loadStabloGaTipFilt(1,$arraylist);
/* takodje sam probao i ovo, ali bez rezultata
$params = array("int_1"=>"1",
"arrayList_2" => new
soapval("arrayList_2","arrayList",array("1"=>"1"),false,
"http://java.sun.com/jax-rpc-ri/internal",
array("SOAP-ENC:arrayType" => "xsd:anyType[2]")));
$result = $client->call("loadStabloGaTipFilt",$params);*/
// Display the request and response
echo "<h2>Request</h2>";
echo "" . htmlspecialchars($proxy->request, ENT_QUOTES) . "";
echo "<h2>Response</h2>";
echo "" . htmlspecialchars($proxy->response, ENT_QUOTES) . "";
?>
Evo opisa arrayList tipa u wsdl fajlu:
Code:
<schema targetNamespace="http://java.sun.com/jax-rpc-ri/internal">
<import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
<import namespace="urn:Navigator"/>
<complexType name="arrayList">
<complexContent>
<extension base="tns:list">
<sequence/>
</extension>
</complexContent>
</complexType>
<complexType name="list">
<complexContent>
<extension base="tns:collection">
<sequence/>
</extension>
</complexContent>
</complexType>
<complexType name="collection">
<complexContent>
<restriction base="soap11-enc:Array">
<attribute ref="soap11-enc:arrayType" wsdl:arrayType="anyType[]"/>
</restriction>
</complexContent>
</complexType>
</schema>
<schema targetNamespace="http://java.sun.com/jax-rpc-ri/internal">
<import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
<import namespace="urn:Navigator"/>
<complexType name="arrayList">
<complexContent>
<extension base="tns:list">
<sequence/>
</extension>
</complexContent>
</complexType>
<complexType name="list">
<complexContent>
<extension base="tns:collection">
<sequence/>
</extension>
</complexContent>
</complexType>
<complexType name="collection">
<complexContent>
<restriction base="soap11-enc:Array">
<attribute ref="soap11-enc:arrayType" wsdl:arrayType="anyType[]"/>
</restriction>
</complexContent>
</complexType>
</schema>
i opisa metoda koji se poziva:
Code:
<message name="NavigatorIF_loadStabloGaTipFilt">
<part name="int_1" type="xsd:int"/>
<part name="ArrayList_2" type="ns2:arrayList"/>
</message>
<message name="NavigatorIF_loadStabloGaTipFilt">
<part name="int_1" type="xsd:int"/>
<part name="ArrayList_2" type="ns2:arrayList"/>
</message>
Da li postoji neko na ovom forumu koji bi imao ideju kako ovo rešiti ?
Hvala na pomoći