Les comparto nuestros avances y pruebas:
Código PHP:
<?php
class Cliente{
public $nombre;
public $direccion;
function __construct($n,$d){
$this->nombre = $n;
$this->direccion = $d;
}
}
$clientSoap = new SoapClient("http://sitio.com:8080/WSFinancialFacade?wsdl ");
$unCliente = new Cliente("enrique", "parque posadas");
$unObjetoRetornado = $clientSoap->hola( $unCliente ) ;
var_dump($unObjetoRetornado);
echo "Retorno: ".$unObjetoRetornado->nombre;
?>
Resultado Código PHP:
object(stdClass)#4 (2) {
["nombre"]=> string(20)
["direccion"]=> string(20)
}
Retorno: Mi nombre es "enrique"
Otras pruebas Código PHP:
var_dump($clientSoap->__getFunctions());
Retorna Código PHP:
array(1) {
[0]=> string(27) "Cliente hola(Cliente $c)"
}
Ejecuto Código PHP:
var_dump($clientSoap->__getTypes());
Retorna Código PHP:
array(1) {
[0]=> string(53) "struct Cliente { string nombre; string direccion; }"
}
Resumiendo
Se logra a través del wsdl armar algo de lo que está del lado del servidor, pero dinámicamente. Según me comenta mi colega en java tiene la opción de hacer wsdl2java (o algo similar) y generar estáticamente la estructura del lado del cliente (como un cabezal), así, si quiere usarla sabe como hacerlo sin tener que solicitar información extra. En el caso opuesto (php), estaríamos armando siempre dinámicamente la estructura pero de forma incompleta (mucho menos información).
Los DTOs sería en este caso la clase Cliente que viaja por el WS.
¿No estamos tan lejos ni tan mal, no?