我是个对webservice,axis原理一点都不了解的人,可没办法老大安排下来这样的任务,只有google先模模糊糊了解一下,再寻求同事们的帮助,生成相应的WSDD等文件,对里面的一些key,value值对都不懂,为什么key是它,对应的值又为什么是它,只有看着值去猜想。
服务器端生成了,接着就进行相应的客户端调用测试,事实并不那么如我想像简单,抛出了org.xml.sax.SAXParseException: The root element is required in a well-formed document. 异常,不懂,这是什么意思,再看看后台,说XXX类没有被序列化(因为我的返回结果是自定义的bean,所以才会有此问题),本想着找到原因就不怕了,进入google,都是说要在server-config.wsdd文件的自配<service>中加入typemapping项配置,于是又进一步的查找,看前辈们都是怎么配置的,好,我加上了,却又抛出了另一个Exception,问题还是不能解决哎!真是唔呼唉哉!怎么就会有这么多的问题呢,看看时间,两三个小时就这样过去了。请教有经验的同事,都说没碰到过这个问题,没办法,只有耐着性子继续找原因,修改,测试,不断的重复着,嗯!嗯!还好,就在耐心快要被磨灭的同时,问题有了新的进展,抛出了org.xml.sax.SAXException: No deserializer for ... (不能被反序列化)这个Exception,前面看到了希望,给了我力量继续寻找亮光,终于,找到一个我觉得和我所出的问题一样的解决办法,依葫芦画瓢,OK,SUCCESS!具体解决办法:
没有加typemapping项,而是加的beanMapping项。如下:
<beanMapping
languageSpecificType="java:package.XxxBean "
qname="ns1:xxxBean" xmlns:ns1="http://localhost:8000/services/MySvc"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
在这里有个问题就是qname="ns1:xxxBean" ,xxxBean不是XxxBean!!!!
我去掉typemapping,保留beanmapping!!!然后建立client测试,代码如下:
public class TestClient ...{
public static void main(String[] args) ...{
String endPoint = "http://localhost:8000/services/MySvc";
Call call = null;
try {
Service service = new Service();
call = (Call) service.createCall();
QName qn = new QName(endPoint,"xxxBean");
call.registerTypeMapping(XxxBean.class, qn, new BeanSerializerFactory(XxxBean.class,qn), new BeanDeserializerFactory(XxxBean.class,qn));
call.setTargetEndpointAddress(endPoint);
call.setOperationName(new QName(endPoint, "executMyMethod"));
return (java.lang.Object[])call.invoke(new Object[]{});
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
}
这里也要注意的是
QName qn = new QName(endPoint,"xxxBean");
也要与配置文件server-config.wsdd中的对应,xxxBean也不是XxxBean!!!!!然后就是注册对这个namespace命名的类进行加序列,解序列工厂类!!
QName qn = new QName(endPoint,"xxxBean");
call.registerTypeMapping(XxxBean.class, qn, new BeanSerializerFactory(XxxBean.class,qn), new BeanDeserializerFactory(XxxBean.class,qn));
这是地网上找到了一个范例,然后参照修改,就此问题终于解决了!如果再有碰到此问题同仁可以就此借鉴一下,按照上面的都做了,如果还是抛出Exception,那就要看看你的调用方法了,是不是把call.setOperationName写成了call.setOperation这两个方法差别是很大的哦!!!!!!
分享到:
相关推荐
本人在项目开发中用的axis2开发,这个excel是开发中一步一步截图下来的,讲的特别详细,基本上照着我的思路就不会出错。
SPS-D07:基于axis框架的webservice培训.ppt
【标题】中的“基于axis2实现的webservice简单实现(客户端+服务端)”表明了本文将探讨如何使用Apache Axis2框架来创建和消费Web服务。Apache Axis2是Apache软件基金会开发的一个Web服务引擎,它提供了高效且灵活的...
【基于Axis2的Web服务详解】 ...总结,基于Axis2的Web服务提供了强大且灵活的Web服务解决方案,适合企业级应用的开发。了解并掌握Axis2的使用,能够帮助开发者更有效地构建和维护Web服务,实现不同系统之间的无缝集成。
基于apache第三方架包axis编写的一套简单webservice示例项目(含源码),该项目基于myeclipse环境部署,可以直接导入myeclipse部署到tomcat等服务器运行。
在本文中,我们将深入探讨如何使用SpringBoot框架开发基于Axis的Web服务。SpringBoot以其便捷的启动和配置方式,已经成为Java开发中的首选框架之一。而 Axis 是一个流行的Apache项目,用于创建和部署Web服务,它提供...
描述中的“一个基于axis的webservice接口例子”进一步明确了这是一个基于Apache Axis2的Web服务接口实现。Axis2是Apache SOAP(Simple Object Access Protocol)项目的继任者,它不仅支持SOAP,还支持RESTful风格的...
标题中的“Axis2 Axis WebService Web 服务”指的是Apache Axis2,它是一个强大的Web服务框架,主要用于构建和部署Web服务。Axis2是Apache SOAP(Simple Object Access Protocol)项目的第二代实现,专门设计用于...
### Webservice架构,基于axis:深入解析与应用 #### Webservice架构概述 Web服务(Webservice)是一种在不同操作系统和编程语言之间进行通信的技术标准,它允许程序通过HTTP协议访问远程对象,使得不同系统之间的...
【基于Axis的Web服务示例】讲解了如何使用Apache Axis2框架开发和发布Web服务,以及如何用Java实现客户端调用。Axis2是SOAP 1.1和1.2的支持者,同时也支持RESTful Web服务和Spring、JSON等技术。在本教程中,我们将...
【标题】"Axis WebService 实例源码"的解析与详解 在IT行业中,Web服务是一种重要的技术,它允许不同的应用程序之间通过网络交换数据。Apache Axis是Java平台上的一个开源工具,专门用于创建和部署Web服务。本实例...
通过对Axis2 WebService源码的学习,开发者不仅可以了解Web服务的基本原理,还可以深入理解Java在Web服务开发中的应用,以及如何利用开源工具解决实际问题。这将有助于提升开发者的技能,为未来的项目开发提供坚实的...
它基于XML,使得数据可以在不同平台之间交换。 2. **Web Service**: 是一组通过网络进行访问的接口,提供特定功能,可以被不同系统调用。Web Service通常通过SOAP协议传输数据,也可以使用RESTful API。 3. **Axis...
在IT行业中,Axis2是Apache软件基金会开发的一个用于构建Web服务和Web服务客户端的框架,主要基于Java语言。本文将详细讲解如何使用Axis2来发布Web服务以及如何生成客户端代码来调用这些服务。 首先,让我们了解...
WebService 是基于开放标准(如 WSDL、SOAP 和 UDDI)的分布式计算模型,使得不同系统之间的数据交换变得简单。WSDL(Web Service Description Language)用于描述 WebService 的接口,SOAP(Simple Object Access ...
**基于Axis2的WebService实例详解** 在Web服务领域, Axis2是Apache软件基金会开发的一个用于构建和部署Web服务的开放源代码平台。它提供了一种高效、灵活且可扩展的框架,使得开发者能够轻松地创建和消费Web服务。...
【标题】:“利用Axis编写简单的WebService” 在Java世界中,创建和使用Web服务是一个常见的任务,而Axis是一个流行的开源工具,用于实现基于SOAP(简单对象访问协议)的Web服务。本篇文章将指导你如何利用Axis来...
在开发Web服务时,Axis是一个常用的工具,尤其在基于Java的环境中。Axis1.4是其一个稳定版本,用于创建和使用Web服务。...同时,了解每个jar包的作用有助于更好地理解和解决问题,从而提高开发效率。