2011-11-05 1 views
10

나는 모든 google, stackoverflow 등을 통해이 문제를 찾고있다. 그리고 그에 대한 많은 답변을 발견했지만 실제 해결책은 아닙니다..NET에서 Java/AXIS 웹 서비스 호출 : 'return null'문제

.NET 클라이언트에서 Axis 서비스를 사용하고 있지만 반환 값은 항상 null이며, 어떤 매개 변수를 보내더라도 항상 null입니다.

내가보기 시작했고, SOAPUI에서 소비하려고 시도했습니다.

내 첫 번째 생각은. NET에서 잘못된 일을하고 있으며 검색 및 검색 한 결과 네임 스페이스에 문제가 있음을 발견했습니다. 포스트 here

관련

그래서,이 후에, 나는 (그것은 꽤 잘 만들었습니다!) WSDL.EXE와 프록시를 생성, 서비스 참조, 웹 참조를 통해 서비스를 소비하기 위해 노력하고 모든 네임 스페이스를 찾았다 하지만 모두 좋은 lokked .. 나는 네임 스페이스하지만 그것에 대한 몇 가지 변경 사항을 만들었지 만.

그런 다음 네임 스페이스가 문제가 아니라 배열이라는 것을 알았습니다. 사실이 서비스는 이와 같은 것을 반환합니다.

<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> 

(이 예는 SOAPUI에서 가져 왔습니다.)

관련 게시물을 나는 또한 this 시도 here

입니다.

그리고 위에서 언급 한 WebServiceResponse에서 볼 수있는 것처럼 "items"라는 배열의 나열된 항목으로 here에서 또 다른 문제가 발생할 수 있습니다. 그래서 모든 것이 제게는 C#에서의 deserialization 문제라고 생각되었습니다. 그리고 저는이 모든 것에 대한 절반의 해결책을 찾았습니다.

현실은 실제로. NET에서 응답이 꽤 좋았습니다. 모든 것은 위의 모든 항목 (원인 항목이 여러 개일 수있는 배열 항목)과 같은 항목을 deserialize하는 데 문제가있을 수 있습니다.

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

나는 이런 식으로 내 프록시의 메소드를 오버라이드 :

나는 서비스의 결과가 사로 잡았되었는지 확인하기 위해 예외를 던져
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 ;  
    } 

사실이 바로 거기입니다!

그래서 모든 수정이 끝나면이 수정 팩, 서비스 팩이 있는지, 누군가 해결책을 찾았는지, 아니면 웹 응답을 정확하게 해석 할 수 있는지를 알 수 없습니다. 또는 그 축 서비스를 올바르게 소비하는 방법,이 방법은 .NET의 버그처럼 보이기 때문에 응답을 올바르게 재정의하는 것이 가장 좋습니다. 모든 배열에 "항목이 있기 때문에 문제가 있다고 생각합니다. " 그 위에.

미리 읽어 주셔서 감사합니다.

나는 정말 도움이 정말 감사 할거야!.

다시 한번 감사드립니다.

답변

9

마지막으로 나는이 문제를 해결했다. 내 친구가 나를 도왔다. 분명히 WSDL과 네임 스페이스에 문제가 있었다. C#이 프록시를 잘못 생성했습니다. C# 문제인지 축 문제인지는 모르겠다. 그러나이 답변이 다른 누구에게 도움이되기를 바랍니다. WebService의 메소드에 대한 모든 네임 스페이스를 살펴보십시오. C#이 같은 메서드를 생성했습니다.

/// <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])); 
     } 

하지만 WSDL에서

는 .. 그것이 tns2 네임 스페이스 참조하는 <element name="Poliza" type="tns2:Poliza"/>에서

<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> 

봐 이런 일이 있었다 그리고 .NET에 의해 xmlns:tns2="http://www.example.org/PolizasBanorteSchema"

그래서 생성 된 프록시를 말한다 틀렸어. 이런 식 이었어.

/// <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])); 
     } 

네임 스페이스가 마법을했다,

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

코드의 라인을 변경하고 모든 축 서비스의 배열 및 다른 네임 스페이스를 사용하는 경우 그래서, 당신은 교류 번호를 생성하는 몇 가지 문제가있을 수 있습니다주의 매력 처럼 일 고객.

This post

잘했다 :)이 게시물에 대한

+2

덕분에, 내가 서/리터 서비스 및 사용자 정의 WSDL과 OC4J 기반의 웹 서비스를 사용하여 한 문제에 정확히 대답했다. – Etienne