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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top