加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

调用WebService 出现org.xml.sax.SAXException: SimpleDeseriali

发布时间:2020-12-17 01:26:02 所属栏目:安全 来源:网络整理
导读:? ? 1。如果出现这个异常时, 首先要确定你的 webservice 传入参数是对象还是别的, 如果是对象的话, 就说明你传入的对象有关联的对 ? 象没有被序列化,比如说, 你的传入对象 java B , 这个java? B 与 Java A 有关联, 例如 B 中引用了? A , 但是你只传

?

? 1。如果出现这个异常时, 首先要确定你的 webservice 传入参数是对象还是别的, 如果是对象的话, 就说明你传入的对象有关联的对

?

象没有被序列化,比如说, 你的传入对象 java B , 这个java? B 与 Java A 有关联, 例如 B 中引用了? A , 但是你只传入了 B 的

?

class 到 webservices,这是,必须将你的 A 对象也序列化后,客户端调用 webservice 时, 会将 A 序列化后返回到客户端, 下面给出个简单的事例:

?

??? TypeMappingRegistry registry = service.getTypeMappingRegistry();??
??????? TypeMapping mapping = registry.createTypeMapping();??
??????? registerBeanMapping(mapping,B.class,new QName("nameSpaceUrl","请求名称"));??
??????? registerBeanMapping(mapping,C.class,"相应名称"));??
??????? registerBeanMapping(mapping,A.class,"A 的名称"));??
??????? registry.register("http://schemas.xmlsoap.org/soap/encoding/",mapping);?

??????? mapping.register(type,qname,new BeanSerializerFactory(type,qname),??
??????? new BeanDeserializerFactory(type,qname));
??? }

?

?

?2。 一般情况下上述代码可以解决这个报错, 如果还是不行的话, 请检查你的客户端调用版本和服务器端webservice 版本是否一些,

?

本人就吃过一次亏,服务器端使用 axis2 生成的服务, 我用 axis 调用,也会报如上错误, 因为 axis2 在传入、传出参数的时候做了一些

?

序列化的处理, 所以如果使用 axis2 生成的服务, 需要使用 RPCServiceClient 的方式来调用。 下面给出一个简单的事例:

?

???? ??? /**?
???? * 调用WebServices方法.?
???? * <p>?
???? *? 调用WebService服务端的方法?
???? * </p>?
???? * @author liubb
???? * @throws AxisFault
???? * @throws Exception?
???? */?
??? public static String invokeGetGreeting(String value,String wsdlUrl,String nameSpace,String methodName) throws AxisFault
??? {??
??? ??String returnStr = "" ;? // 返回参数
??? ?
???? ?// 使用RPC方式调用WebService??
???????? RPCServiceClient rpcServiceClient = new RPCServiceClient();??
???????? Options options = rpcServiceClient.getOptions();??
????????
???????? OMElement om = null;
????????
???????? // 指定调用WebService的URL??
???????? EndpointReference to = new EndpointReference(wsdlUrl);??
???????? options.setTo(to);??
????????
???????? // 指定方法返回值的数据类型的Class对象??
???????? Class[] classes = new Class[]{String.class};??
????????
???????? // 指定要调用的方法及WSDL文件的命名空间??
???????? QName opAddEntry = new QName(nameSpace,methodName);
????????
???????? // 指定getGreeting方法的参数值??
???????? Object[] opAddEntryArgs = new Object[]{value};?
????????
???????? om = rpcServiceClient.invokeBlocking(opAddEntry,opAddEntryArgs);

???????? returnStr = om.toString();
????????
???????? return returnStr ;
??? }??

?

?

?? 要使用 下面事例进行调用 axis2 的话, 则需要加载 axis2 中的 jar 包, jar 引用如下:

?

?axiom-api-1.2.7.jar

?axiom-impl-1.2.7.jar

?axis2-adb-1.4.1.jar

?axis2-kernel-1.4.1.jar

?backport-util-concurrent-3.1.jar

?commons-codec-1.3.jar

?neethi-2.0.4.jar

?stax-api-1.0-2.jar

?wstx-asl-3.2.4.jar

?XmlSchema-1.4.3.jar

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读