解决axis2 wsdl与请求soap报文中字段顺序不一致的问题:Unexpected subelement XXXX

原创 2013年12月04日 14:27:58

axis2报错:org.apache.axis2.AxisFault: org.apache.axis2.databinding.ADBException: Unexpected subelement XXXX

因为wsimport命令生成的类是按照wsdl中字段的顺序进行校验的,所以当字段顺序不一致或者请求中的字段在wsdl不存在时,均会报此错误。

修改生成的类中的Factory.parse(...)方法,去除多数字段的校验,增加字段循环设值:

 // --------------------zhaigx20131202
                String fieldName = null;
                String fieldVal = null;
                QName qName = null;
                while (reader.isStartElement()) {
                    qName = reader.getName();
                    fieldName = qName.getLocalPart();
                    nillableValue = reader.getAttributeValue(
                            "http://www.w3.org/2001/XMLSchema-instance", "nil");
                    if ("true".equals(nillableValue)
                            || "1".equals(nillableValue)) {
                        throw new org.apache.axis2.databinding.ADBException(
                                "The element: " + fieldName
                                + "  cannot be null");
                    }
                    fieldVal = org.apache.axis2.databinding.utils.ConverterUtil
                            .convertToString(reader.getElementText());
                    MapperUtil.setPropertyVal(object, fieldName, fieldVal);

                    reader.next();// skip text
                    // skip other like space,tab
                    while (!reader.isStartElement() && !reader.isEndElement()) {
                        reader.next();
                    }
                    // move to next
                    if (reader.isEndElement()) {
                        reader.next();
                    }
                }
                // skip other like space,tab
                while (!reader.isStartElement() && !reader.isEndElement()) {
                    reader.next();
                }

                // --------------------end


 public static void setPropertyVal(Object dest, String key, Object val) {
        Class<?> clazz = dest.getClass();
        try {
            java.lang.reflect.Method setMethod = clazz.getMethod("set"
                    + StringUtils.capitalize(key), String.class);
            setMethod.invoke(dest, val);
        } catch (Exception e) {
            log.error("Error: {}={}", key, val);
        }
    }



soap报文中的对应类结尾标签可能需要增加reader.hashNext:

 while (!reader.isStartElement() && !reader.isEndElement()
                        && reader.hasNext()) {
                    reader.next();
                }

axis2问题解决方法:org.apache.axis2.databending.ADBException:Unexpedted subelement return

axis2报错:org.apache.axis2.databending.ADBException:Unexpedted subelement return 大致异常是以上内容, 经过很长时间...
  • fy_kenny
  • fy_kenny
  • 2012年02月21日 16:54
  • 4172

org.apache.axis2.databinding.ADBException: Unexpected subelement arg0的一种解决办法

用Axis2的WSDL2Java工具生成Skeleton(服务端),然后客户端用RPC的方式调用服务,报org.apache.axis2.AxisFault: org.apache.axis2.dat...
  • nongyan90
  • nongyan90
  • 2013年11月28日 11:28
  • 5123

webservice接口soap请求报文的xml字段顺序必须与wsdl中定义的顺序一致才能解析正确

ServiceMessageReceiverInOut 99 -  org.apache.axis2.AxisFault: org.apache.axis2.databinding.ADBExcep...
  • tower888
  • tower888
  • 2013年12月01日 15:54
  • 13496

Axis2: 复杂数据类型传输

Axis2: 复杂数据类型传输 1.开发一个web services (1)新建一个java project,目录结构如下: IDataForm.java package service...
  • liuzongxi
  • liuzongxi
  • 2015年04月28日 23:36
  • 2499

Axis2 webservice下出现org.apache.axis2.AxisFault报错问题

下面是一个service.xml                 Web Service例子                       com.axis2webservice...
  • x6582026
  • x6582026
  • 2016年05月06日 15:15
  • 4862

Axis2开发WebService客户端的三种方式

第一RPC方式,不生成客户端代码 第二,document方式,不生成客户端代码 第三,用wsdl2java工具,生成客户端方式调用 package samples.quickstart.clie...
  • zhangmeng_07
  • zhangmeng_07
  • 2017年01月23日 16:17
  • 937

axis2 发送报文报告Dangling meta character '*' near index 0 异常

最近在用Mac Pro做开发,一直好好地,直到有一天,项目上用了axis2来做Webservice的客户端,结果一运行,就出现了以下的异常: java.util.regex.PatternS...
  • oarsman
  • oarsman
  • 2017年04月12日 15:27
  • 682

Axis2调用webservice Client

Axis2调用webservice,很多人和网上都使用的RPCServiceClient进行调用webservice,但是有时候并不是一定都满足需求,接下来会展示下RPCServiceClient的简...
  • pk490525
  • pk490525
  • 2013年12月04日 15:37
  • 21219

Axis2用法(3)soap消息携带消息头

1、消息头定义 一般soap消息中,消息体是携带消息的核心内容;消息头中的字段,多数用于校验。定义消息头,就相当于定义一个bean对象。本例中,在上一篇的继承上,为消息增加消息头,其中消息头核心内容...
  • yanghaitaohhh
  • yanghaitaohhh
  • 2013年12月31日 23:06
  • 8383

Webservice axis2打印请求、响应报文方法

Webservice axis2打印请求、响应报文方法 包:axis2-kernel-1.7.4.jar 包路径:org.apache.axis2.description 类:OutInAxis...
  • ardo_pass
  • ardo_pass
  • 2017年11月07日 22:48
  • 259
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:解决axis2 wsdl与请求soap报文中字段顺序不一致的问题:Unexpected subelement XXXX
举报原因:
原因补充:

(最多只允许输入30个字)