2011-11-05 15 views
10

He estado buscando este problema a través de google, stackoverflow y más. Y encontré muchas respuestas relacionadas, pero no una solución real.Invocar un servicio web Java/AXIS de .NET: el problema 'return null'

Estoy consumiendo un servicio Axis de un cliente .NET pero el retorno siempre es nulo, independientemente de los parámetros que envío, siempre es nulo.

Así que empecé a mirar, y traté de consumirlo desde el SOAPUI, ¡y funcionó !.

Así que mi primer pensamiento fue, .NET está haciendo algo mal, y busqué y busqué y encontré que hay algunos problemas con los espacios de nombres.

posterior here

relacionados Así que después de esto, me trataron de consumir el servicio a través del servicio de referencia, referencia Web, la creación de un proxy con Wsdl.exe (Fue creado bastante bien!) Y buscaron todos los espacios de nombres, pero All lok good ... Hice algunos cambios en el espacio de nombres, pero nada.

Luego descubrí que no solo los espacios de nombres son problemáticos, también los arreglos; y, de hecho, el servicio devuelve algo como esto.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <soapenv:Body> 
     <InformacionPolizaResponse xmlns="http://www.openuri.org/"> 
     <ns1:Poliza xmlns:ns1="http://www.example.org/PolizasBanorteSchema"> 
      <ns1:Numero>0036887</ns1:Numero> 
      <ns1:Serie></ns1:Serie> 
      <ns1:Ramo>00110</ns1:Ramo> 
      <ns1:Subramo>00110</ns1:Subramo> 
      <ns1:Inciso></ns1:Inciso> 
      <ns1:ClaveAgente>000270</ns1:ClaveAgente> 
      <ns1:NombreAgente>NOMBRE PENDIENTE</ns1:NombreAgente> 
      <ns1:NumeroOficina></ns1:NumeroOficina> 
      <ns1:FechaEmision>2011-02-15</ns1:FechaEmision> 
      <ns1:FechaInicioVigencia>2011-02-15</ns1:FechaInicioVigencia> 
      <ns1:FechaFinVigencia>2012-02-15</ns1:FechaFinVigencia> 
      <ns1:Estatus>03</ns1:Estatus> 
      <ns1:NombreContratante>CARLOS ZARATE JIMENEZ</ns1:NombreContratante> 
      <ns1:RfcContratante>ZAJC720213K98</ns1:RfcContratante> 
      <ns1:Telefono>0449626251463</ns1:Telefono> 
      <ns1:Moneda>1</ns1:Moneda> 
      <ns1:FormaPago>003</ns1:FormaPago> 
      <ns1:PrimaPrimerPago>237.84</ns1:PrimaPrimerPago> 
      <ns1:PrimaPagoSubsecuente>237.84</ns1:PrimaPagoSubsecuente> 
      <ns1:PrimaNeta>951.36</ns1:PrimaNeta> 
      <ns1:FinancPagofraccionado></ns1:FinancPagofraccionado> 
      <ns1:GastosExpedicion>.00</ns1:GastosExpedicion> 
      <ns1:IVA></ns1:IVA> 
      <ns1:PrimaTotal></ns1:PrimaTotal> 
      <ns1:PolizaOrigen>0036887</ns1:PolizaOrigen> 
      <ns1:PolizaRenueva>0000000</ns1:PolizaRenueva> 
      <ns1:Producto></ns1:Producto> 
      <ns1:Plan></ns1:Plan> 
      <ns1:Asegurados> 
       <ns1:item> 
        <ns1:Nombre>CARLOS ZARATE JIMENEZ</ns1:Nombre> 
        <ns1:Clave></ns1:Clave> 
        <ns1:Direccion> 
        <ns1:Calle></ns1:Calle> 
        <ns1:Colonia></ns1:Colonia> 
        <ns1:Poblacion></ns1:Poblacion> 
        <ns1:Estado></ns1:Estado> 
        <ns1:CP></ns1:CP> 
        <ns1:Texto></ns1:Texto> 
        </ns1:Direccion> 
        <ns1:FechaNacimiento>1972-02-13</ns1:FechaNacimiento> 
        <ns1:Sexo>1</ns1:Sexo> 
        <ns1:Fumador>1</ns1:Fumador> 
        <ns1:Parentesco>0</ns1:Parentesco> 
        <ns1:AntiguedadDesde></ns1:AntiguedadDesde> 
        <ns1:Coberturas> 
        <ns1:item> 
         <ns1:Clave>00150</ns1:Clave> 
         <ns1:Seccion></ns1:Seccion> 
         <ns1:NombreCobertura>SEGURO DE MUERTE ACCIDENTAL</ns1:NombreCobertura> 
         <ns1:LimiteMaximo>250,000</ns1:LimiteMaximo> 
         <ns1:Deducible>.00</ns1:Deducible> 
         <ns1:Prima>820.00</ns1:Prima> 
         <ns1:EdadCalculo>039</ns1:EdadCalculo> 
         <ns1:PlazoSeguro></ns1:PlazoSeguro> 
         <ns1:PlazoPago></ns1:PlazoPago> 
         <ns1:SumaAsegurada>250,000</ns1:SumaAsegurada> 
         <ns1:Coaseguro>.00</ns1:Coaseguro> 
        </ns1:item> 
        <ns1:item> 
         <ns1:Clave>00150</ns1:Clave> 
         <ns1:Seccion></ns1:Seccion> 
         <ns1:NombreCobertura>SEGURO DE MUERTE ACCIDENTAL</ns1:NombreCobertura> 
         <ns1:LimiteMaximo>250,000</ns1:LimiteMaximo> 
         <ns1:Deducible>.00</ns1:Deducible> 
         <ns1:Prima>95.00</ns1:Prima> 
         <ns1:EdadCalculo>039</ns1:EdadCalculo> 
         <ns1:PlazoSeguro></ns1:PlazoSeguro> 
         <ns1:PlazoPago></ns1:PlazoPago> 
         <ns1:SumaAsegurada>250,000</ns1:SumaAsegurada> 
         <ns1:Coaseguro>.00</ns1:Coaseguro> 
        </ns1:item> 
        <ns1:item> 
         <ns1:Clave>00150</ns1:Clave> 
         <ns1:Seccion></ns1:Seccion> 
         <ns1:NombreCobertura>SEGURO DE MUERTE ACCIDENTAL</ns1:NombreCobertura> 
         <ns1:LimiteMaximo>500</ns1:LimiteMaximo> 
         <ns1:Deducible>.00</ns1:Deducible> 
         <ns1:Prima>36.36</ns1:Prima> 
         <ns1:EdadCalculo>039</ns1:EdadCalculo> 
         <ns1:PlazoSeguro></ns1:PlazoSeguro> 
         <ns1:PlazoPago></ns1:PlazoPago> 
         <ns1:SumaAsegurada>500</ns1:SumaAsegurada> 
         <ns1:Coaseguro>.00</ns1:Coaseguro> 
        </ns1:item> 
        </ns1:Coberturas> 
        <ns1:Beneficiarios/> 
       </ns1:item> 
      </ns1:Asegurados> 
      <ns1:Incisos/> 
      <ns1:Recibos> 
       <ns1:item> 
        <ns1:NumeroRecibo>5183648</ns1:NumeroRecibo> 
        <ns1:FechaEmision>2011-02-15</ns1:FechaEmision> 
        <ns1:FechaEstatus>2011-02-26</ns1:FechaEstatus> 
        <ns1:FechaPago>2011-02-26</ns1:FechaPago> 
        <ns1:Estatus>00</ns1:Estatus> 
        <ns1:DescripcionEstatus>GENERADO</ns1:DescripcionEstatus> 
        <ns1:Importe>000000275.89</ns1:Importe> 
        <ns1:Recargos>.00</ns1:Recargos> 
        <ns1:DerechoPoliza>.00</ns1:DerechoPoliza> 
        <ns1:FechaInicioVigencia>2011-02-15</ns1:FechaInicioVigencia> 
        <ns1:FechaFinVigencia>2011-05-15</ns1:FechaFinVigencia> 
        <ns1:PrimaTotal xsi:nil="true"/> 
        <ns1:PrimaPagada xsi:nil="true"/> 
        <ns1:PrimaPendiente xsi:nil="true"/> 
       </ns1:item> 
       <ns1:item> 
        <ns1:NumeroRecibo>5183649</ns1:NumeroRecibo> 
        <ns1:FechaEmision>2011-02-15</ns1:FechaEmision> 
        <ns1:FechaEstatus>2011-02-15</ns1:FechaEstatus> 
        <ns1:FechaPago>1900-00-00</ns1:FechaPago> 
        <ns1:Estatus>00</ns1:Estatus> 
        <ns1:DescripcionEstatus>GENERADO</ns1:DescripcionEstatus> 
        <ns1:Importe>000000275.89</ns1:Importe> 
        <ns1:Recargos>.00</ns1:Recargos> 
        <ns1:DerechoPoliza>.00</ns1:DerechoPoliza> 
        <ns1:FechaInicioVigencia>2011-05-15</ns1:FechaInicioVigencia> 
        <ns1:FechaFinVigencia>2011-08-15</ns1:FechaFinVigencia> 
        <ns1:PrimaTotal xsi:nil="true"/> 
        <ns1:PrimaPagada xsi:nil="true"/> 
        <ns1:PrimaPendiente xsi:nil="true"/> 
       </ns1:item> 
       <ns1:item> 
        <ns1:NumeroRecibo>5183650</ns1:NumeroRecibo> 
        <ns1:FechaEmision>2011-02-15</ns1:FechaEmision> 
        <ns1:FechaEstatus>2011-02-15</ns1:FechaEstatus> 
        <ns1:FechaPago>1900-00-00</ns1:FechaPago> 
        <ns1:Estatus>00</ns1:Estatus> 
        <ns1:DescripcionEstatus>GENERADO</ns1:DescripcionEstatus> 
        <ns1:Importe>000000275.89</ns1:Importe> 
        <ns1:Recargos>.00</ns1:Recargos> 
        <ns1:DerechoPoliza>.00</ns1:DerechoPoliza> 
        <ns1:FechaInicioVigencia>2011-08-15</ns1:FechaInicioVigencia> 
        <ns1:FechaFinVigencia>2011-11-15</ns1:FechaFinVigencia> 
        <ns1:PrimaTotal xsi:nil="true"/> 
        <ns1:PrimaPagada xsi:nil="true"/> 
        <ns1:PrimaPendiente xsi:nil="true"/> 
       </ns1:item> 
       <ns1:item> 
        <ns1:NumeroRecibo>5183651</ns1:NumeroRecibo> 
        <ns1:FechaEmision>2011-02-15</ns1:FechaEmision> 
        <ns1:FechaEstatus>2011-02-15</ns1:FechaEstatus> 
        <ns1:FechaPago>1900-00-00</ns1:FechaPago> 
        <ns1:Estatus>00</ns1:Estatus> 
        <ns1:DescripcionEstatus>GENERADO</ns1:DescripcionEstatus> 
        <ns1:Importe>000000275.89</ns1:Importe> 
        <ns1:Recargos>.00</ns1:Recargos> 
        <ns1:DerechoPoliza>.00</ns1:DerechoPoliza> 
        <ns1:FechaInicioVigencia>2011-11-15</ns1:FechaInicioVigencia> 
        <ns1:FechaFinVigencia>2012-02-15</ns1:FechaFinVigencia> 
        <ns1:PrimaTotal xsi:nil="true"/> 
        <ns1:PrimaPagada xsi:nil="true"/> 
        <ns1:PrimaPendiente xsi:nil="true"/> 
       </ns1:item> 
      </ns1:Recibos> 
      <ns1:Endosos/> 
      <ns1:Siniestros/> 
     </ns1:Poliza> 
     </InformacionPolizaResponse> 
    </soapenv:Body> 
</soapenv:Envelope> 

(obtuve este ejemplo de SOAPUI).

El post relacionado es here

Probé también this.

Y tengo otro problema posible de here con los elementos enumerados de una matriz denominada como "elemento", como se puede ver en el WebServiceResponse mencionado anteriormente, se enumeran de esa manera. Entonces todo me pareció que es un problema de deserialización de C#. Y al buscar encontré una solución a medio para todo esto. La realidad fue que realmente .NET obtiene la respuesta bastante bien, todo lo que tiene es un problema con el paso de deserialización tal vez para todas las posibles causas mencionadas anteriormente (espacios de nombres múltiples, matrices, elementos de matriz nombrados como "elemento").

http://www.codeproject.com/KB/webservices/Java_WS_NET.aspx

I overrided el método en mi proxy de la siguiente manera:

protected override System.Net.WebResponse GetWebResponse(System.Net.WebRequest request) 
    { 
     WebResponse wr = base.GetWebResponse(request); 
     StreamReader sr = new StreamReader(wr.GetResponseStream()); 
     //throw new Exception(sr.ReadToEnd()); 
     return wr ;  
    } 

que produce la excepción para ver si fue apresado el resultado del Servicio y, de hecho, es justo ahí!

Así que después de todo esto, no sé si hay una solución, un paquete de servicio, alguien encontró una solución o algo así como CÓMO DESESALIZAR CORRECTAMENTE LA RESPUESTA Web. O cómo consumir correctamente ese servicio de eje, creo que el mejor enfoque es serializar la respuesta correctamente sobreescribiendo el método, porque parece un error de .NET, creo que tiene problemas con la matriz porque todo tiene un "elemento" " en eso.

Gracias de antemano por leer esta publicación.

Realmente agradecería cualquier ayuda !.

Gracias de nuevo !.

Respuesta

9

Finalmente resolví este problema, un amigo mío me ayudó, aparentemente había problemas con el WSDL y los espacios de nombres. C# generó el proxy incorrecto. No sé si se trata de un problema de C# o eje. Pero espero que esta respuesta ayude a los demás. Eche un vistazo a todos los espacios de nombres en los métodos del servicio web. C# generó un método como este.

/// <remarks/> 
     [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://www.openuri.org/InformacionPoliza", RequestNamespace = "http://www.openuri.org/", ResponseNamespace = "http://www.openuri.org/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] 
     [return: System.Xml.Serialization.XmlElementAttribute("Poliza")] 
     public Poliza InformacionPoliza(CriteriosPoliza CriteriosPoliza) 
     { 
      object[] results = this.Invoke("InformacionPoliza", new object[] { 
        CriteriosPoliza}); 
      return ((Poliza)(results[0])); 
     } 

Pero en el WSDL tenían algo como esto ..

<wsdl:definitions xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://www.openuri.org/" xmlns:intf="http://www.openuri.org/" xmlns:tns1="http://www.example.org/PolizasBanorteSchemaCriterios" **xmlns:tns2="http://www.example.org/PolizasBanorteSchema"** xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.openuri.org/"> 
<!-- 
WSDL created by Apache Axis version: 1.4 Built on Apr 22, 2006 (06:55:48 PDT) 
--> 
<wsdl:types> 
<schema xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://www.openuri.org/"> 
<import namespace="http://www.example.org/PolizasBanorteSchema"/> 
<import namespace="http://www.example.org/PolizasBanorteSchemaCriterios"/> 
<element name="InformacionPoliza"> 
<complexType> 
<sequence> 
<element name="CriteriosPoliza" type="tns1:CriteriosPoliza"/> 
</sequence> 
</complexType> 
</element> 
<element name="InformacionPolizaResponse"> 
<complexType> 
<sequence> 
**<element name="Poliza" type="tns2:Poliza"/>** 
</sequence> 
</complexType> 
</element> 
</schema> 

Mira el <element name="Poliza" type="tns2:Poliza"/> se refiere al espacio de nombres tns2 y dice xmlns:tns2="http://www.example.org/PolizasBanorteSchema"

Así que el proxy generada por .NET estaba equivocado tenía que ser así

/// <remarks/> 
     [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://www.openuri.org/InformacionPoliza", RequestNamespace = "http://www.openuri.org/", ResponseNamespace = "http://www.openuri.org/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] 
     [return: System.Xml.Serialization.XmlElementAttribute("Poliza", Namespace = "http://www.example.org/PolizasBanorteSchema")] 
     public Poliza InformacionPoliza(CriteriosPoliza CriteriosPoliza) 
     { 
      object[] results = this.Invoke("InformacionPoliza", new object[] { 
        CriteriosPoliza}); 
      return ((Poliza)(results[0])); 
     } 

El espacio de nombres hizo la magia,

[return: System.Xml.Serialization.XmlElementAttribute("Poliza", Namespace = "http://www.example.org/PolizasBanorteSchema")] 

cambiado esa línea de código y todo funcionaba como un encanto tanto, tenga cuidado al utilizar matrices y diferentes espacios de nombres en un servicio de eje, es posible que tenga algunos problemas para generar corriente alterna # cliente.

This post estaba bien :)

+2

Gracias por el puesto, respondió exactamente a un problema que tuve uso de los servicios web basados ​​en OC4J con el documento/servicios literales y un WSDL personalizado. – Etienne

Cuestiones relacionadas