axis1.4 使用总结

最近一个项目使用webservice,公司要求使用axis1.4.
其实个人感觉xfire更好用一点,毕竟myeclipse已近提供了生成器,从客户端到服务端都可以一次搞定,比axis方便多了.

既然是公司要求,也只有硬着头皮上了.
上网查了一下资料,发现了1.4有这么几种部署方式

1.即时发布
将需要发布的server类直接命名为jws放在src目录下,不能有包,只能放在根目录下.然后通过http://localhost:8888/axis/你的类名.jws 就可以看到生成的wsdl
这种方法最致命的问题是 不支持包 不支持复杂类型参数.如果你的业务很简单可以使用这种方式

2.定制发布wsdd(推荐这种方式)

定制发布需要你自己写一个wsdd文件,并且手动生成客户端代码.看上去很复杂,其实不难.以下是生成server-config.wsdd文件

<?xml version="1.0" encoding="UTF-8"?>
<deployment name="defaultClientConfig"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"
xmlns:handler="http://xml.apache.org/axis/wsdd/providers/handler" xmlns="http://xml.apache.org/axis/wsdd/">
<globalConfiguration name="defaultClientConfig">
<requestFlow name="RequestFlow1" type="">
<handler name="Handler1" type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="session"/>
</handler>
<handler name="Handler2" type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="request"/>
<parameter name="extension" value=".jwr"/>
</handler>
</requestFlow>
</globalConfiguration>
<handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>
<handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/>
<handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
<transport name="http" type="">
<requestFlow name="RequestFlow1" type="">
<handler name="Handler1" type="URLMapper"/>
<handler name="Handler2" type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
</requestFlow>
</transport>
<transport name="local" type="">
<responseFlow name="ResponseFlow1" type="">
<handler name="Handler1" type="LocalResponder"/>
</responseFlow>
</transport>

<!--这里配置了一个Web Service,如果有多个Web Service,就按这种格式在下面增加即可-->
<service name="DDosService" provider="java:RPC">
<parameter name="scope" value="Request"/>
<parameter name="className" value="com.zhongying.ddos.webservice.service.DDosService"/>//发布的服务
<parameter name="allowedMethods" value="*"/>
<beanMapping languageSpecificType="java:com.zhongying.ddos.webservice.common.DDosCustC" qname="ns:DDosCustC" xmlns:ns="urn:DDosCustC" />//映射的复杂类型
<beanMapping languageSpecificType="java:com.zhongying.ddos.webservice.common.DDosCustManagerC" qname="ns:DDosCustManagerC" xmlns:ns="urn:DDosCustManagerC" />
<beanMapping languageSpecificType="java:com.zhongying.ddos.webservice.common.DDosCustAndManagerListC" qname="ns:DDosCustAndManagerListC" xmlns:ns="urn:DDosCustAndManagerListC" />
</service>

</deployment>


把你需要使用的复杂参数映射到mapping中,如list map 都可以自定义一个类包装起来使用.

接下来你需要生成client,这可能是定制发布中大家最头痛的部分.以下是生成代码的批处理命令
set Axis_Lib=D:\shanghai\workspace\axis\WebRoot\WEB-INF\lib\
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Output_Path=D:\webServiceGenClass
set Package=com.zhongying.worksheet.webservice.client //代码所在包名

%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% http://127.0.0.1:88/axis/services/DDosService?wsdl

运行这个命令程序会自动生成client.
但是大部分人都会在这步卡住,这个地方有个窍门,就是不要使用resin,要用tomcat,resin生成的wsdl和tomcat生成的wsdl不同,这样就导致了axis不能解析.生成代码就更不可能了.我估计是resin的xml解析器和tomcat不一样.
生成完代码大家就可以直接调用,添加自己的业务代码了.

如果是基本类型组成的map,可以直接传送参数,不需要映射参数类型;调用代码如下即可:

package com.flyzonemu.client;

import java.rmi.RemoteException;
import java.util.HashMap;
import java.util.Map;

import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

public class MapClient {

/**
* @param args
* @throws ServiceException
* @throws RemoteException
*/
public static void main(String[] args) throws ServiceException, RemoteException {
// TODO Auto-generated method stub

String url = "http://127.0.0.1:88/axis/services/MapTest?wsdl";

Map map = new HashMap();

map.put("sss", "yyy");

Service service = new Service();

Call call = (Call)service.createCall();

call.setTargetEndpointAddress(url);

call.setOperationName(new QName(url,"printMap"));

call.invoke(new Object[]{map});
}

}




最后附赠一个很好的教程!!!!


ps:有时会遇到Can't find bundle for base name i18n, locale zh_CN错误,请将源码class中的属性文件复制到工程目录下即可解决问题
已标记关键词 清除标记
相关推荐
1.TOMCAT+AXIS的安装配置 首先机子上应该安装JDK1.5版本以上(带有XML解析包)。我这里是1.5.0.6 从APACHE的官方网站(www.apache.org)下载TOMCAT安装软件。下载版本要在4.0以上。这里用的是5.0版本。安装完后,启动TOMCAT,访问http://localhost:8080/安装成功应该出现Apache启动页面。以下用TOMCAT_HOME表示TOMCAT的安装主目录。 解压缩AXIS软件包(这里为1.4版本axis.war包)。 将axis项目放在某个盘的根目录下,(因在tomcat的安装目录在版本号前有个空格,配置axis环境变量时系统认不到对应的变量路径) 如:D:\axis;然后在TOMCAT的server.xml的添加项目加载的<Context>: <Context path="/axis" docBase="D:/axis" debug="0" reloadable="true" crossContext="true"></Context> 重新启动TOMCAT,访问http://localhost:8080/axis/,出现Apache-Axis启动页面。点击链接Validation进入页面。上面会显示已经找到的jar包和未找到的jar包。对于未找到的jar包。可以从它提示的链接中下载。我缺少activation.jar,mail.jar,xerces.jar这里在可选组件(optional components)中提示缺少xml-security包。从它提示的地址下载软件包后,解压缩后在lib文件夹下,将xalan.jar和xmlsec-1.2.1.jar复制到TOMCAT_HOME\webapps\axis\WEB-INF\lib下。重新启动TOMCAT,再点击链接Validation进入页面后。将没有未找到包的提示了。 接下来配置类路径。右键点击我的电脑——属性——高级——环境变量。在系统变量中选择ClassPath进行编辑。增加下列类路径(以“;”间隔符)。 D:\axis\WEB-INF\lib\activation.jar; D:\axis\WEB-INF\lib\axis.jar; D:\axis\WEB-INF\lib\axis-ant.jar; D:\axis\WEB-INF\lib\axis-schema.jar; D:\axis\WEB-INF\lib\commons-discovery-0.2.jar; D:\axis\WEB-INF\lib\commons-logging-1.0.4.jar; D:\axis\WEB-INF\lib\jaxrpc.jar; D:\axis\WEB-INF\lib\log4j-1.2.8.jar; D:\axis\WEB-INF\lib\mail.jar; D:\axis\WEB-INF\lib\saaj.jar; D:\axis\WEB-INF\lib\wsdl4j-1.5.1.jar; D:\axis\WEB-INF\lib\xmlsec.jar 启动TOMCAT,浏览器输入http://localhost:8080/axis/HelloWorldService.jws?wsdl 会出现wsdl页面。说明可以提供正常服务了。 现在可以制作客户端了程序了, 命令参数的形式: java org.apache.axis.wsdl.WSDL2Java http://localhost:8080/axis/HelloWorldService.jws?wsdl -p test.webservice -o C:\prj 参数说明: -p 指定生成的java文件包名 (可省略默认为 HelloWorldService内的包名路径) -o 指定生成的java文件输出目录 如果你看到这样的画面就表示正常运作并自动产生四个.JAVA的档案了,如果出现 org/apache/...CLASS NOT FOUND之类的话可能你的ClASSPATH设置的有问题。 在C:\prj\localhost\axis\HelloWorldService_jws下面产生以下四个文件 HelloWorldService.java HelloWorldServiceService.java HelloWorldServiceServiceLocator.java HelloWorldServiceSoapBindingStub.java 现在可以将以上生成的四个类进行调用已发布的webservice 注:HelloWorldService 的webservice已经创建在axis1.4.rar包内,只要运行axis项目即可访问到该webservice
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页