axis2生成wsdl回执参数首字母大小写问题

124 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第十天,点击查看活动详情


在跟局方对接接口的时候,局方回执我的wsdl接口,发现收不到同步回执,怀疑问题为回执参数首字母小写导致

image.png 代码中的参数对象首字母确实是大写,但生成的wsdl文件确变成了小写,目前是用axis2生成的

用axis2发布的webservice的,但是axis2发布成WSDL文件以后,会根据getXXX()方法 截取属性名,比如说有个属性是“Name”,那么对应的get方法就是getName(),如果他判断首字母是小写就会设置为小写,发现了变为小写的原因,选择使用xFire

运行过程中发现: xfire-spring-1.2.6.jar xfire-all-1.2.6.jar 中都有xfire.xml和xfireXmlBeans.xml以及customEditors.xml文件,所以最好两个文件一起修改替换

修改回执对象,通过 org.codehaus.xfire.aegis.type.java5.XmlElement 来定义参数的名称

image.png 运行后首字母成功变为大写

image.png

之后研究发现axis2也可以自定义设置首字母,在回执参数对象中加入

private static org.apache.axis.description.TypeDesc typeDesc =
    new org.apache.axis.description.TypeDesc(CSPResult.class, true);

static {
    typeDesc.setXmlType(new javax.xml.namespace.QName("iptv", "CSPResult"));
    org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc();
    //设置匹配的字段名称
    elemField.setFieldName("result");
    //修改之后的名称
    elemField.setXmlName(new javax.xml.namespace.QName("", "Result"));
    elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "int"));
    elemField.setNillable(false);
    typeDesc.addFieldDesc(elemField);
    elemField = new org.apache.axis.description.ElementDesc();
    //设置匹配的字段名称
    elemField.setFieldName("errorDescription");
    //修改之后的名称
    elemField.setXmlName(new javax.xml.namespace.QName("", "ErrorDescription"));
    elemField.setXmlType(new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"));
    elemField.setNillable(true);
    typeDesc.addFieldDesc(elemField);
}

即可自定义回执参数