Axis1.x 兼容接口返回参数变化

本文详细介绍了如何修复Axis1.X版本中关于服务端返回未知参数时抛出异常的问题,提供了两种解决方案:一是直接替换类文件,二是手动修改源代码。旨在帮助用户解决在使用Axis1.X版本时遇到的错误,并通过代码示例进行说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在Axis1.X版本中,org\apache\axis\encoding\ser\BeanDeserializer这个类对于服务端返回的未知参数,采取的处理是抛出异常,中断程序

而正确的代码逻辑(我们希望的)应该是:跳过,不作为;

这是Axis1.X一个bug,在Axis 2.0、.NET、X-fire等soap引擎中都不存在此问题

解决方法:

有两种方法:

1、 Axis 1.X官方版本的用户,可以直接使用下面的类 BeanDeserializer.class 替换Axis.jar 中 org\apache\axis\encoding\ser\ 目录下的同名类:

Axis1.4请使用

 

操作方法:

1) 停止运行环境;

2) 打开 Axis.jar 包,找到 org\apache\axis\encoding\ser\BeanDeserializer.class,将其备份;

3) 用上面提供的类替换 Axis.jar 中的同名类;

4) 重新起动运行环境,以使该类生效。

 

2、 手工修改类的方法(适用于Axis1.X):

1) 找到 Axis 的源代码;

编辑类 org\apache\axis\encoding\ser\BeanDeserializer.java,

2) 找到方法

public SOAPHandler onStartChild(String namespace,
                                    String localName,
                                    String prefix,
                                    Attributes attributes,
                                    DeserializationContext context)
        throws SAXException


3) 找到如下代码:

<span style="color:#333333;">if (propDesc == null) {
            // No such field
            </span><span style="color:#ff0000;">throw new SAXException(
                    Messages.getMessage("badElem00", javaType.getName(),
                                         localName));</span><span style="color:#333333;">
}</span>


4) 将 if 中抛出异常改为返回 null,如下:

<span style="color:#333333;">if (propDesc == null) {
            // No such field
            </span><span style="color:#ff0000;">return null;</span><span style="color:#333333;">
}</span>

  

5) 重新编译该类,用新的 BeanDeserializer.calss 类文件,重复方法1的执行步骤,使用新的类即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值