Foros del Web » Programación para mayores de 30 ;) » .NET »

Problemas para consumir un WS hecho en JAVA

Estas en el tema de Problemas para consumir un WS hecho en JAVA en el foro de .NET en Foros del Web. Buenas tardes a todos los foristas: Quisiera saber si alguno de ustedes me puede ayudar con este problema. Estoy tratando de invocar un WS desde ...
  #1 (permalink)  
Antiguo 27/08/2013, 10:12
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Problemas para consumir un WS hecho en JAVA

Buenas tardes a todos los foristas:

Quisiera saber si alguno de ustedes me puede ayudar con este problema. Estoy tratando de invocar un WS desde un cliente en Visual Studio 2010... sin embargo, tengo problemas para "mapear" correctamente el WSDL, trataré de explicarme a detalle.

Existe un WS desarrollado en Java con Axis 1.4 el cual recibe como parámetros una matriz de String's de dos dimensiones, el método está así:

Código MySQL:
Ver original
  1. package ws.publicar;
  2.  
  3. public class HolaMundo {
  4.     public HolaMundo() {
  5.         super();
  6.     }
  7.     public String[] Saludar(String[][] matriz) {
  8.       String[] regresar = new String[matriz.length];
  9.       for (int i = 0; i < matriz.length; i++)
  10.           regresar[i] = "hola " + matriz[i][0].toString() + " " + matriz[i][1].toString();
  11.       return regresar;
  12.     }
  13. }

Ahora bien, para consumir el WS lo hago a través del archivo WSDL donde está expuesto, es decir, tengo algo como esto:

http://127.0.0.1:7101/WSPruebas/services/HolaMundo?wsdl

Lo que me genera un XML así:

Código XML:
Ver original
  1. <wsdl:definitions xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://127.0.0.1:7101/WSPruebas/services/HolaMundo" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:intf="http://127.0.0.1:7101/WSPruebas/services/HolaMundo" targetNamespace="http://127.0.0.1:7101/WSPruebas/services/HolaMundo">
  2. <!--
  3. WSDL created by Apache Axis version: 1.4
  4. Built on Apr 22, 2006 (06:55:48 PDT)
  5. -->
  6. <wsdl:types>
  7. <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://127.0.0.1:7101/WSPruebas/services/HolaMundo">
  8. <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
  9. <complexType name="ArrayOfArrayOf_xsd_string">
  10. <complexContent>
  11. <restriction base="soapenc:Array">
  12. <attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:string[][]"/>
  13. </restriction>
  14. </complexContent>
  15. </complexType>
  16. <complexType name="ArrayOf_xsd_string">
  17. <complexContent>
  18. <restriction base="soapenc:Array">
  19. <attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:string[]"/>
  20. </restriction>
  21. </complexContent>
  22. </complexType>
  23. </schema>
  24. </wsdl:types>
  25. <wsdl:message name="SaludarRequest">
  26. <wsdl:part name="matriz" type="impl:ArrayOfArrayOf_xsd_string"/>
  27. </wsdl:message>
  28. <wsdl:message name="SaludarResponse">
  29. <wsdl:part name="SaludarReturn" type="impl:ArrayOf_xsd_string"/>
  30. </wsdl:message>
  31. <wsdl:portType name="HolaMundo">
  32. <wsdl:operation name="Saludar" parameterOrder="matriz">
  33. <wsdl:input name="SaludarRequest" message="impl:SaludarRequest"/>
  34. <wsdl:output name="SaludarResponse" message="impl:SaludarResponse"/>
  35. </wsdl:operation>
  36. </wsdl:portType>
  37. <wsdl:binding name="HolaMundoSoapBinding" type="impl:HolaMundo">
  38. <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
  39. <wsdl:operation name="Saludar">
  40. <wsdlsoap:operation soapAction=""/>
  41. <wsdl:input name="SaludarRequest">
  42. <wsdlsoap:body use="encoded" namespace="http://publicar.ws" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
  43. </wsdl:input>
  44. <wsdl:output name="SaludarResponse">
  45. <wsdlsoap:body use="encoded" namespace="http://127.0.0.1:7101/WSPruebas/services/HolaMundo" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
  46. </wsdl:output>
  47. </wsdl:operation>
  48. </wsdl:binding>
  49. <wsdl:service name="HolaMundoService">
  50. <wsdl:port name="HolaMundo" binding="impl:HolaMundoSoapBinding">
  51. <wsdlsoap:address location="http://127.0.0.1:7101/WSPruebas/services/HolaMundo"/>
  52. </wsdl:port>
  53. </wsdl:service>
  54. </wsdl:definitions>

El problema es que cuando agrego la referencia Web a mi proyecto, Visual Studio mapea el Método Saludar como si recibiera un vector, no una matriz, es decir, en el código que genera el VS para consumir el WS, la llamada al método aparece así:


Código C#:
Ver original
  1. [System.Web.Services.Protocols.SoapRpcMethodAttribute("", RequestNamespace="http://publicar.ws", ResponseNamespace="http://127.0.0.1:7101/WSPrueba/services/HolaMundo")]
  2.         [return: System.Xml.Serialization.SoapElementAttribute("SaludarReturn")]
  3.         public string[] Saludar(string[] matriz) {
  4.             object[] results = this.Invoke("Saludar", new object[] {
  5.                         matriz});
  6.             return ((string[])(results[0]));
  7.         }

Cuando en realidad, el método Saludar debería recibir una Matriz de Cadenas, de dos dimenciones, de hecho, revisando el XML está correcta la definición del tipo, en esta sección:

Código XML:
Ver original
  1. <complexType name="ArrayOfArrayOf_xsd_string">
  2. <complexContent>
  3. <restriction base="soapenc:Array">
  4. <attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:string[][]"/>
  5. </restriction>
  6. </complexContent>
  7. </complexType>

Entonces, no sé donde está el problema, desde mi punto de vista el WS es correcto y está bien mapeado. Incluso tengo un ejemplo con un cliente en java, ejecutándose sin problema... pero no sé cómo puedo hacer para indicarle al Visual Studio que está mapeando mal los tipos de dato.

Espero que alguno de ustedes tenga algún consejo.

Saludos
Leo.

Etiquetas: axis, c#, java, matriz, webservice, wsdl, xml
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:23.