Jax-WS devuelve listas vacías
Pregunta
Soy nuevo en los servicios web. He enfrentado algún problema. En el lado del servidor estoy usando Spring-WS. Al lado del cliente estoy usando Jax-WS. Con la herramienta WSIMPORT, he generado clases de Java de acuerdo con mi WSDL.
Todo funciona bien, pero por alguna razón Jax-WS no analiza las matrices y la lista correctamente, todas las listas están vacías
Estoy absolutamente seguro de que esa respuesta se forma correctamente, la prueba con SoapUi, también estoy usando el interceptor de registro para las respuestas de operación de registro.
A continuación se muestran los fragmentos de la respuesta
La respuesta parece
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<firstElementResponse>
<name>hello world text</name>
<name>hello world text</name>
<name>hello world text</name>
</firstElementResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
y los fragmentos de WSDL
<xs:complexType name="sayHelloResponseType">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
Para generar el código del cliente, uso WSIMPORT.
SayHelloResponseType resp = serv.sayHello(r);
List<String> name = resp.getName();
System.out.println(name.size());
Gracias. Cualquier ayuda será muy apreciada.
Solución
Parece que es solo un cuerpo de respuesta inválido, lo que no mató a Math WSDL Shema. Ni Spring-WS ni Jax-WS lanza una excepción. Simplemente analiza los datos no válidos a la lista vacía sin ninguna Warrnings.
org.springframework.ws.soap.server.endpoint.interceptor.PayloadValidatingInterceptor
salvé mi día
Probablemente tengo que ajustar el registro de jax-ws para evitarlo la próxima vez
Otros consejos
Acabo de responder una pregunta similar en ¿Cómo puedo manejar la desamparación de los mensajes SOAP de Castor cuando el espacio de nombres se define dentro de la etiqueta de operación? -Si está utilizando Spring-WS, está escribiendo servicios web de contrato, así que asegúrese de realmente clavar ese contrato. Ponga todos sus elementos en un espacio de nombres, asegúrese de que su esquema XSD espera que los elementos estén calificados, y declare NS-URI y NS-Prefixes en sus asignaciones de ricino. Vale la pena el esfuerzo.