今天开发项目遇到一个问题,简单记录下,希望能帮到遇到同样问题的同学

我使用Axis1.4开发webservice客户端,客户端代码如下:

Service service = new Service();

Call call;

try {

call = (Call)service.createCall();

call.setTargetEndpointAddress(d2Url);

QName qn = new QName("", "CMSID");

call.addParameter(qn, XMLType.SOAP_STRING, ParameterMode.IN);

QName qn2 = new QName("", "CorrelateID");

call.addParameter(qn2, XMLType.SOAP_STRING, ParameterMode.IN);

QName qn3 = new QName("", "ContentMngXMLURL");

call.addParameter(qn3, XMLType.SOAP_STRING, ParameterMode.IN);

call.setReturnClass(ContentDeployReqResponse.class);

QName mapping = new QName("iptv", "ContentPreloadReqResponse");

call.registerTypeMapping(ContentDeployReqResponse.class, mapping,

new BeanSerializerFactory(ContentDeployReqResponse.class, mapping),

new BeanDeserializerFactory(ContentDeployReqResponse.class, mapping));

call.setOperationName(new QName("iptv", "ContentPreloadReq"));

return call;

} catch (ServiceException e) {

e.printStackTrace();

}catch(Exception e){

e.printStackTrace();

}

return null;

ContentDeployReqResponse类代码如下:

import java.io.Serializable;

import javax.xml.bind.annotation.XmlAccessType;

import javax.xml.bind.annotation.XmlAccessorType;

import javax.xml.bind.annotation.XmlElement;

@XmlAccessorType(XmlAccessType.FIELD)

public class ContentDeployReqResponse implements Serializable{

/**

*

*/

private static final long serialVersionUID = -6709028467973715698L;

@XmlElement(name = "ErrorDescription")

private String errorDescription;

@XmlElement(name = "ResultCode")

private int resultCode;

public int getResultCode() {

return resultCode;

}

public void setResultCode(int resultCode) {

this.resultCode = resultCode;

}

public String getErrorDescription() {

return errorDescription;

}

public void setErrorDescription(String errorDescription) {

this.errorDescription = errorDescription;

}

}

调用服务端后返回的xml如下:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">

<S:Body>

<ns2:ContentPreloadReqResponse xmlns:ns2="iptv">

<return>

<ResultCode>0</ResultCode>

<ErrorDescription>success</ErrorDescription>

</return>

</ns2:ContentPreloadReqResponse>

</S:Body>

</S:Envelope>

Axis在解析xml为ContentDeployReqResponse  时出现以下错误:

[2013-12-19 17:51:24,234 ERROR] Exception: org.apache.axis.client.Call.invoke(Call.java:2469)

org.xml.sax.SAXException: Invalid element in opt.fonsview.cmm.ws.ContentDeployReqResponse - ResultCode

at org.apache.axis.encoding.ser.BeanDeserializer.onStartChild(BeanDeserializer.java:258)

at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035)

at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165)

at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141)

at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:236)

at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384)

at org.apache.axis.client.Call.invoke(Call.java:2467)

at org.apache.axis.client.Call.invoke(Call.java:2366)

at org.apache.axis.client.Call.invoke(Call.java:1812)

首先想到的是将ContentDeployReqResponse  中的属性首字母大写,发现还是出现以上问题,查看源代码,Axis用到的是javax.bean相关类来生成ContentDeployReqResponse  类信息,我猜测应该是为了跟java规范保持一致,所以在保存属性名的时候是将首字母小写,而返回的xml中首字母是大写,导致出错。

采用第二种方法,改写Axis相关源码,替换jar包中文件,运行成功,改写的源文件为org.apache.axis.encoding.ser.BeanDeserializer 的onStartChild方法

改写之前:

if (propDesc == null) {

// look for a field by this name.

propDesc = (BeanPropertyDescriptor) propertyMap.get(localName);

}

改写之后:

if (propDesc == null) {

// look for a field by this name.

for(Iterator iter = propertyMap.keySet().iterator(); iter.hasNext();){

String key = (String)iter.next();

if(key.equalsIgnoreCase(localName)){

propDesc = (BeanPropertyDescriptor) propertyMap.get(key);

break;

}

}

}

开发过程中还遇到一个问题未解决:Axis在解析返回的XML时耗费的时间过长,达10分钟之久,发现问题出在InputStream的read方法上,什么原因?欢迎碰到相同的同学一起探讨

附件为修改后的axis jar包

org.xml.sax.SAXException: Invalid element相关推荐

  1. WebService using Spring throwed org.xml.sax.SAXException: Bad envelope tag: htm

    最近在公司做一个项目用到Spring中包涵Webservice时,服务端部署成功,也就是http://127.0.0.1:8080/itzc/AxisDeviceServerImpl.jws?wsdl ...

  2. android xml sax解析,《android用SAX解析xml》

    主要的Acivity package com.xml.xml; import java.io.Serializable; import java.util.ArrayList; import java ...

  3. java xml stax_java XML -- SAX和StAX分析XML

    Java与XML 之 SAX和StAX 本文由大关收集整理所得,不保证内容的正确性,转载请标明出处,谢谢! 上一次,我们讲述了使用Dom方式解析XML,并通过修改Dom树结构,最终改变XML文档内容. ...

  4. Caused by: org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'beans'.

    信息: Initializing Spring root WebApplicationContext log4j:WARN No appenders could be found for logger ...

  5. org.xml.sax.SAXParseException: The markup in the document following the root element must be well-fo

    部署项目报错:org.xml.sax.SAXParseException: The markup in the document following the root element must be ...

  6. Spring如何加载XSD文件(org.xml.sax.SAXParseException: Failed to read schema document错误的解决方法)...

    本文原文连接: http://blog.csdn.net/bluishglc/article/details/7596118 ,转载请注明出处! 有时候你会发现过去一直启动正常的系统,某天启动时会报出 ...

  7. java 文件提前结束_java – org.xml.sax.SAXParseException:过早结束文件

    我目前有以下 XML文件. 我的XMLParser.java类. package edu.unsw.comp9321.assignment1; import java.io.File; import ...

  8. org.xml.sax.SAXParseException: Failed to read schema document错误的完美解决方法 以及 Spring如何加载XSD文件

    有时候你会发现过去一直启动正常的系统,某天启动时会报出形如下面的错误: org.xml.sax.SAXParseException: schema_reference.4: Failed to rea ...

  9. SVN checkout报错The XML response contains invalid XML

    The XML response contains invalid XML Malformed XML: no element found 1.先clean up,如果失败,按照下述方法进行处理,使之 ...

最新文章

  1. 在GridView中设置每个单元格的数据
  2. 绝了!一个妹子 rm -rf 把公司整个数据库删没了
  3. 【Python基础】用Python制作漂亮的流动桑基图
  4. delphi之模糊找图
  5. mysql主从复制深入研究_mysql主从复制原理,深入探讨
  6. Openstack Havana的两个排错过程
  7. python如何识别中文_python如何识别图片中的文字
  8. 局域网电脑使用同一台鼠标键盘控制
  9. VS2010 下载与安装
  10. Spark机器学习环境搭建
  11. numpy中按条件查找,搜索某些值的方法
  12. 转 Unity绳子插件Obi+Rope下载与简单使用方法
  13. 网易云商-七鱼客服使用感受
  14. hackme inndy pwn onepunch writeup
  15. 拼多多2018校招内推编程题汇总 详解
  16. 面向对象三大特性,五大原则
  17. android dolphin 手柄,使用安卓手机充当PC上WII模拟器手柄
  18. C语言 经典例题 无重复三位数
  19. 众昂矿业:萤石需求异军突起
  20. Android智能电视应用程序开发浅谈(三)

热门文章

  1. 自定义高德地图导航界面
  2. 修改FoxitReader (福昕PDF阅读器)最近打开文档数目的上限
  3. easyu tree节点的拖拽(1)
  4. Meetup 回顾 | 多场景下的 H5 混合开发与 Flutter 多平台应用开发
  5. 产融对接 数智服务 | 用友云服务亮相2020中国5G+工业互联网大会
  6. linux arp 工具下载,linux如何ARP嗅探 Linux下嗅探工具Dsniff安装记录(示例代码)
  7. python 图片识别 机械手_6图片识别物品_清华编程高手尹成带你用python大战机器学习_机器学习视频-51CTO学院...
  8. 金融低代码开发平台建设要点与方法论
  9. 电影业整体下行趋势中,猫眼怎么做到的扭亏转盈?
  10. 低速自动驾驶技术:APA