2011-11-05 10 views
10

私はすべてのgoogle、stackoverflowなどを通じてこの問題を探し求めてきました。 それに関連する多くの回答が見つかりましたが、実際の解決策ではありません。.NETからJava/AXIS Webサービスを呼び出す: 'return null'の問題

.NETクライアントからAxisサービスを消費していますが、返されるパラメータは常にnullです。送信するパラメータに関係なく、常にnullです。

私は見始めて、それを SOAPUIから消費しようとしました。

私の最初の考えは、.NETが何か間違っていて、検索して検索したところ、名前空間にいくつかの問題があることがわかりました。ポスト here

関連

だから、この後、私は(これはかなりよく作成されました!)WSDL.EXEとプロキシを作成し、サービス参照、Web参照を介したサービスを消費しようとしたすべての名前空間を探しましたしかし、すべてが良い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から入手しました)。

関連の投稿は、私も試してみましたthishere

です。

さらに、hereからリストされた項目の配列が「item」という名前の別の問題が発生しました。上記のWebServiceResponseのように、そのようにリストされています。だから私にはすべてのことがC#のデシリアライゼーションの問題だと思われました。そして、私はこのすべてに半分の解決策を見出しました。

現実には、実際には.NETが応答をかなり良くしていることがありました。これは、上記のすべての可能性のあるもの(複数の名前空間、配列、「アイテム」のような名前の配列アイテム)の逆シリアル化の問題です。

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

は、私はこのような私のプロキシでメソッドをオーバーライド:

私はサービスの結果がcatchedれたかどうかを確認するために、例外をスロー
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 ;  
    } 

、実際にはすぐそこです!

修正後のサービスパック、誰かが解決策を見つけた場合、またはWebResponseを正しく解釈できるかどうかはわかりません。または、その軸サービスを正しく消費するには、.NETのバグのように思われるため、この方法を正しくオーバーライドするだけで、これに最適な方法は、すべての配列に「アイテム」があるために問題があると思うからです。 "それに。

ありがとうございます。

私は本当に本当に助けていただければ幸いです。

もう一度おねがいします。

答えて

9

最後に私はこの問題を解決しました。私の友人が私を助けました。明らかにWSDLと名前空間に問題がありました。 C#はプロキシを間違って生成しました。それがC#の問題か軸の問題かどうかはわかりません。しかし、この回答が他の人に役立つことを願っています WebServiceのメソッドに関するすべての名前空間を見てみましょう。 C#このようなメソッドを生成しました。それはtns2名前空間 を意味し、それは.NETによって生成されたプロキシだから、xmlns:tns2="http://www.example.org/PolizasBanorteSchema"

を言う<element name="Poliza" type="tns2:Poliza"/>

/// <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にこのような何かを持っていた。..

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

ルック間違っていなければならなかったのです。このようにしなければなりませんでした。

/// <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")] 

は、コード行を変更し、すべてがそう魅力 のように働いた、軸サービスにおける配列とdiferent名前空間を使用する場合は注意してください、あなたは、AC#を生成するいくつかの問題を有していてもよくクライアント。

This postは正しかった:)ポストのため

+2

おかげで、それは私が、文書/リテラル​​・サービスおよびカスタムWSDLとOC4JベースのWebサービスを使用していた問題に正確に答えました。 – Etienne

関連する問題