从 .NET 调用 Java/AXIS Web 服务:“返回 null”问题

2024-01-01

我一直在通过谷歌、stackoverflow 等寻找这个问题。 我找到了很多相关的答案,但没有真正的解决方案。

我正在从 .NET 客户端使用 Axis 服务,但返回始终为 null,无论我发送什么参数,始终为 null。

所以我开始寻找,并尝试从 SOAPUI http://www.soapui.org/,并且成功了!

所以我的第一个想法是,.NET 做错了什么,我搜索了又搜索,发现命名空间存在一些问题。

相关帖子 here http://www.primordialcode.com/blog/post/invoking-javaaxis-web-service-net-return-null-issue

因此,在此之后,我尝试通过服务引用、Web 引用来使用服务,使用 WSDL.EXE 创建代理(创建得非常好!)并查找所有命名空间,但一切都很好。我做了一些更改它到名称空间,但什么也没有。

然后我发现不光命名空间有问题,数组也有问题;事实上,该服务返回类似这样的内容。

<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 中得到的)。

相关帖子是here https://issues.apache.org/jira/browse/AXIS-2143

我也尝试过this https://stackoverflow.com/questions/1000578/axis2-always-receives-null-parameters-even-if-soap-request-is-sent-correctly.

并遇到了另一个可能的麻烦here https://stackoverflow.com/questions/3157763/java-webservice-returning-null-object-to-a-net-client名为“item”的数组的列出项目,正如您在上面提到的 WebServiceResponse 中看到的那样,它们是这样列出的。所以在我看来,一切都是 C# 的反序列化问题。我发现了所有这一切的一半解决方案。

现实情况是,.NET 实际上得到了很好的响应,它所遇到的只是反序列化步骤的问题,可能是由于上面提到的所有可能的原因(多个命名空间、数组、名为“item”的数组项)。

http://www.codeproject.com/KB/webservices/Java_WS_NET.aspx 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 ;      
    }

我抛出异常来查看服务的结果是否被捕获并且实际上就在那里!

因此,毕竟操作系统我不知道是否有修复程序、服务包、有人找到了解决方案或任何关于如何正确取消 WebResponse 的内容。或者如何正确使用该轴服务,我认为最好的方法就是正确序列化响应并覆盖该方法,因为这似乎是.NET的一个错误,我认为它有麻烦,因为所有数组都有一个“项目” “ 在上面。

预先感谢您阅读这篇文章。

我真的非常感谢任何帮助!

再次感谢!。


最后我解决了这个问题,我的一个朋友帮助了我,显然是 WSDL 和命名空间有问题。 C# 生成的代理错误。不知道是c#的问题还是axis的问题。但希望这个答案对其他人有帮助。 查看 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 中有这样的东西..

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

看着那(这<element name="Poliza" type="tns2:Poliza"/>它指的是tns2名称空间 它说xmlns:tns2="http://www.example.org/PolizasBanorteSchema"

所以.NET生成的代理是错误的,它必须是这样的

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

更改了那行代码,一切都像魅力一样工作 因此,在轴服务中使用数组和不同的命名空间时要小心,生成 C# 客户端时可能会遇到一些问题。

这个帖子 http://www.primordialcode.com/blog/post/invoking-javaaxis-web-service-net-return-null-issue是正确的 :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 .NET 调用 Java/AXIS Web 服务:“返回 null”问题 的相关文章

随机推荐

  • std::setw 和 unicode 字符

    我的问题如以下最小示例所示 include
  • 如何向此 CSS“切换器”“切换开关”添加文本

    这是实际的 Switcher 生成器 https proto io freebies onoff https proto io freebies onoff 我不清楚如何向事件添加文本 因此 当开关处于默认状态时 会显示某些文本 反之亦然
  • Mathematica 绘图中多个函数的检测和样式设置

    This https stackoverflow com questions 5597566 这个问题让我开始思考 Mathematica 如何检测正在绘制的多个函数 我发现我实在是看不懂这个流程 考虑 Plot 1 Sequence 2
  • 如何为二维数组的 qsort 编写比较器函数?

    我有一个 n 2 大小的数组 我想根据第二列的值使用 qsort 对它们进行排序 include
  • IEquatable,如何正确实施[重复]

    这个问题在这里已经有答案了 我正在使用 net 2 0 和 c 并且我已经在我的类中实现了 IEquatible 接口 如下所示 public MyClass IEquatable
  • 如何计算 char 数组中的元素数量?

    我试图计算数组中的元素数量 并被告知该行 int r sizeof array sizeof array 0 会给我数组中元素的数量 我发现该方法确实有效 至少对于 int 数组而言 然而 当我尝试这段代码时 事情就崩溃了 include
  • 为 Galaxy S8 创建模拟器? - 安卓工作室

    我创建了一个新的硬件配置文件 试图为 Galaxy S8 S8 制作模拟器 我将屏幕尺寸设置为 5 8 6 2 英寸 取决于 S8 还是 S8 尽管事实上这似乎不会影响模拟器 屏幕分辨率设置为 1440 x 2960 就像设备一样 模拟器看
  • 如何将文件分成相等的部分而不破坏单独的行? [复制]

    这个问题在这里已经有答案了 我想知道是否可以将文件分成相等的部分 edit 除了最后一个之外都相等 而不破坏线 在 Unix 中使用 split 命令 行可能会分成两半 有没有一种方法可以将一个文件分成 5 个相等的部分 但仍然只包含整行
  • DirectoryInfo.EnumerateFiles(...) 导致 UnauthorizedAccessException (和其他异常)

    我最近需要枚举整个文件系统 寻找特定类型的文件以进行审计 由于对要扫描的文件系统的权限有限 这导致我遇到了一些异常 其中 最为普遍的是未经授权的访问异常 http msdn microsoft com en us library syste
  • 在 Visual Studio Code 中添加模块的 Python 路径

    我很难指定包含另一个目录甚至同一项目的文件夹中的模块 包的 python 路径 当我尝试导入时出现错误 ModuleNotFoundError 没有名为 感知 的模块 在 Spyder 中 这只需使用 UI 选择 python 将查找的附加
  • 这是一个通用函数指针吗?它危险吗?

    在学习和搞乱函数指针时 我注意到一种初始化 void 函数指针并强制转换它们的方法 然而 虽然我没有收到任何警告或错误 无论是使用 GCC 还是 VS 的编译器 我想知道这样做是否危险或不好的做法 因为我经常在网上看到这种初始化函数指针的方
  • 生成颜色渐变

    我有一个想法以编程方式生成匹配的配色方案 但是我需要能够在给定一组两种颜色 十六进制或 RGB 值 的情况下生成线性渐变 任何人都可以向我提供 伪 代码或为我指明完成此任务的正确方向吗 EDIT 我忘了提及 但我还需要指定 或知道 从颜色
  • 推荐一个 HTML5/Javascript 的开发环境吗? [复制]

    这个问题在这里已经有答案了 可能的重复 用于 JavaScript 开发的 IDE https stackoverflow com questions 788978 ide for javascript development 我想自学 H
  • 如何创建类的实例并从 Bag 对象(如会话)设置属性

    该类将在runtime and values存储在一个Bag类似物体session or ViewBag 现在我想创建一个instance类并设置其属性使用袋子数据 我知道我应该使用reflection 但不知道有没有什么方法开箱即用做这样
  • JQueryUI 滑块在 IE 上不起作用

    我一直在尝试让滑块在控件旁边显示其当前值 本教程http www ryancoughlin com demos interactive slider http www ryancoughlin com demos interactive s
  • 将委托方法放入类别中

    到目前为止我开发了一些应用程序 现在我正在编写一个新的项目 在这个项目中我希望保持代码非常干净 因此很容易找到方法 我想从UI视图控制器 whose view have a UI表格视图作为子视图 我希望有一个名为DetailViewCon
  • 在按钮单击事件中旋转文本

    我需要在单击按钮时以不同角度旋转文本 我需要两个按钮 一个用于顺时针移动文本 另一个用于逆时针移动文本 尝试这个 html
  • Eclipse Subversive 提交变更列表?

    我刚刚创建了一个忽略提交更改列表 如中所述SVN 有没有办法将文件标记为 不提交 https stackoverflow com questions 635446 svn is there a way to mark a file as d
  • ReferenceError: $ 未定义 yii2

    在我的视图中添加 JavaScript 会导致ReferenceError is not defined 我认为问题是由于 Yii2 最后在我的页面上注入脚本造成的 如何解决这个问题 或者如何阻止 Yii2 自动加载脚本文件 My view
  • 从 .NET 调用 Java/AXIS Web 服务:“返回 null”问题

    我一直在通过谷歌 stackoverflow 等寻找这个问题 我找到了很多相关的答案 但没有真正的解决方案 我正在从 NET 客户端使用 Axis 服务 但返回始终为 null 无论我发送什么参数 始终为 null 所以我开始寻找 并尝试从