原文地址:http://www.blogjava.net/libin2722/archive/2007/11/22/162444.html
今天终于搞定,贴出来分享一下
1、在www.apache.org上下载Axis1.4,将解压后的Axis目录文件复制到%TOMCATHOME%webapps目录下
2、重新启动Tomcat,访问http://localhost:8080/axis,如果能访问,表示Axis环境安装成功
3、在eclipse下建立webproject,将axis的jar包导入
![](http://www.blogjava.net/images/blogjava_net/libin2722/1.JPG)
写2个JavaBean,分别叫做Person.java和Book.java,代码如下
Book.java
Person.java
建立服务器端代码,命名为PersonInfoService.java,实现三个method,分别为public String getPersonInfo(Person person)、public Book setBookInfo(String bookname, Long isbn)、public Person getPersonInfo(),以下为全部代码:
将编译好的Java类直接放在%Tomcat%webappsaxisWEB-INFOclassess目录下。注意将整个包路径复制到上述目录中
![](http://www.blogjava.net/images/blogjava_net/libin2722/2.JPG)
在%Tomcat%webappsaxis目录下建立 server-config.wsdd 文件,内容如下
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<?xml version="1.0" encoding="UTF-8"?>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<globalConfiguration>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<parameter name="sendMultiRefs" value="true" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<parameter name="disablePrettyXML" value="true" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<parameter name="adminPassword" value="admin" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<parameter name="attachments.Directory"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
value="C:Tomcat 5.0 (iplanetldap)webappsaxisWEB-INFattachments" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<parameter name="axis.servicesPath" value="/mossWS/" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<parameter name="dotNetSoapEncFix" value="true" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<parameter name="enableNamespacePrefixOptimization"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
value="false" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<parameter name="sendXMLDeclaration" value="true" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<parameter name="sendXsiTypes" value="true" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<parameter name="attachments.implementation"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
value="org.apache.axis.attachments.AttachmentsImpl" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<requestFlow>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<handler type="java:org.apache.axis.handlers.JWSHandler">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<parameter name="scope" value="session" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</handler>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<handler type="java:org.apache.axis.handlers.JWSHandler">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<parameter name="scope" value="request" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<parameter name="extension" value=".jwr" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</handler>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</requestFlow>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</globalConfiguration>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<handler name="Authenticate"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<handler name="LocalResponder"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
type="java:org.apache.axis.transport.local.LocalResponder" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<handler name="URLMapper"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
type="java:org.apache.axis.handlers.http.URLMapper" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<handler name="soapmonitor"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
type="java:org.apache.axis.handlers.SOAPMonitorHandler">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<parameter name="wsdlURL"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
value="/axis/SOAPMonitorService-impl.wsdl" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<parameter name="namespace"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
value="http://tempuri.org/wsdl/2001/12/SOAPMonitorService-impl.wsdl" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<parameter name="serviceName" value="SOAPMonitorService" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<parameter name="portName" value="Demo" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</handler>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<service name="AdminService" provider="java:MSG">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<parameter name="allowedMethods" value="AdminService" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<parameter name="enableRemoteAdmin" value="false" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<parameter name="className" value="org.apache.axis.utils.Admin" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<namespace>http://xml.apache.org/axis/wsdd/</namespace>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</service>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<service name="SOAPMonitorService" provider="java:RPC">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<parameter name="allowedMethods" value="publishMessage" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<parameter name="className"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
value="org.apache.axis.monitor.SOAPMonitorService" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<parameter name="scope" value="Application" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</service>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<service name="AxisDemo" provider="java:RPC">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<parameter name="allowedMethod" value="*"></parameter>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<parameter name="className"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
value="com.lucky.axis.service.PersonInfoService">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</parameter>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<beanMapping qname="myNS:Person" xmlns:myNS="urn:PersonInfo"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
languageSpecificType="java:com.lucky.axis.service.Person" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<beanMapping qname="myNS:Book" xmlns:myNS="urn:PersonBookInfo"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
languageSpecificType="java:com.lucky.axis.service.Book" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</service>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<transport name="http">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<requestFlow>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<handler type="URLMapper" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<handler
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</requestFlow>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<parameter name="qs:list"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
value="org.apache.axis.transport.http.QSListHandler" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<parameter name="qs:wsdl"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
value="org.apache.axis.transport.http.QSWSDLHandler" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<parameter name="qs.list"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
value="org.apache.axis.transport.http.QSListHandler" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<parameter name="qs.method"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
value="org.apache.axis.transport.http.QSMethodHandler" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<parameter name="qs:method"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
value="org.apache.axis.transport.http.QSMethodHandler" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<parameter name="qs.wsdl"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
value="org.apache.axis.transport.http.QSWSDLHandler" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</transport>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<transport name="local">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<responseFlow>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<handler type="LocalResponder" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</responseFlow>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</transport>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</deployment>
其中
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<service name="AxisDemo" provider="java:RPC">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<parameter name="allowedMethod" value="*"></parameter>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<parameter name="className"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
value="com.lucky.axis.service.PersonInfoService">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</parameter>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<beanMapping qname="myNS:Person" xmlns:myNS="urn:PersonInfo"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
languageSpecificType="java:com.lucky.axis.service.Person" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<beanMapping qname="myNS:Book" xmlns:myNS="urn:PersonBookInfo"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
languageSpecificType="java:com.lucky.axis.service.Book" />
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
</service>
是配置服务端的WebService,name="AxisDemo" 是WebService的名称,使用http://localhost:8080/axis/services/AxisDemo?wsdl来访问,name="allowedMethod" 表示服务类中那些方法需要封装,value="*" 表示所有的方法都封装,如果值封装其中部分方法,需要把方法名称列出来,用“,”逗号分割,name="className" 表示定义WebService服务端的类,value="com.lucky.axis.service.PersonInfoService" 表示将这个类作为WebService类封装,<beanMapping qname="myNS:Person" xmlns:myNS="urn:PersonInfo"
languageSpecificType="java:com.lucky.axis.service.Person" />这个表示类中需要引入的其他类
重新启动Tomcat5.5,访问http://localhost:8080/axis/services/AxisDemo?wsdl,可以看到该Web Service的WSDL描述信息
![](http://www.blogjava.net/images/blogjava_net/libin2722/3.JPG)
编写客户端测试类,命名为Client.java。在该类中分别对PersonInfoService.java所提供的方法进行调用,代码如下:
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
package com.lucky.axis.client;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.util.HashMap;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.util.Map;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import javax.xml.namespace.QName;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.apache.axis.client.Call;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.apache.axis.client.Service;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.apache.axis.encoding.ser.BeanDeserializerFactory;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.apache.axis.encoding.ser.BeanSerializerFactory;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import com.lucky.axis.service.Book;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import com.lucky.axis.service.Person;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class Client
{
public Client() {
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public static void main(String[] args) throws Exception {
// if (args.length < 1) {
// System.out.println("错误:缺少参数");
// System.exit(0);
// }
// Web服务的URL
String url = "http://localhost:8080/axis/services/AxisDemo";
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(url);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
// 注册序列化/反序列化器
QName qn = new QName("urn:PersonInfo", "Person");
call.registerTypeMapping(Person.class, qn, new BeanSerializerFactory(
Person.class, qn),
new BeanDeserializerFactory(Person.class, qn));
QName qnb = new QName("urn:PersonBookInfo", "Book");
call.registerTypeMapping(Book.class, qnb, new BeanSerializerFactory(
Book.class, qnb), new BeanDeserializerFactory(Book.class, qnb));
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
// 设置调用方法
call.setOperationName(new javax.xml.namespace.QName("http://test",
"getPersonInfo"));
Person person = new Person();
person.setName("Kiah Han");
person.setAge(26);
Map map = new HashMap();
map.put("NAME", "李彬");
map.put("YEAR", new Integer(3));
person.setSkill(map);
Book book = new Book();
book.setBookname("<Thinking in Java>");
book.setIsbn(new Long(123456789));
book.setPrice((float) 25.98);
book.setPages(new Integer(925));
person.setMybook(book);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
// Web服务调用
java.lang.Object _resp = call.invoke(new java.lang.Object[] { person });
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
// 输出到屏幕
System.out.println(_resp.toString());
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out
.println("------------Starting setBookInfo()---------------------");
call.setOperationName(new javax.xml.namespace.QName("http://test",
"setBookInfo"));
java.lang.Object _resbook = call.invoke(new java.lang.Object[] {
"<Spring pro>", new Long(987654321) });
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Book mybook = (Book) _resbook;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println(mybook.getBookname());
System.out.println(mybook.getIsbn());
System.out.println(mybook.getPrice());
System.out.println(mybook.getPages());
System.out
.println("------------End setBookInfo()---------------------------");
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out
.println("------------Starting getPersonInfo()---------------------");
call.setOperationName(new javax.xml.namespace.QName("http://test",
"getPersonInfo"));
java.lang.Object _resperson = call.invoke(new java.lang.Object[] {});
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Person aaron = (Person) _resperson;
System.out.println(aaron.getName());
System.out.println(aaron.getAge());
Map skill = aaron.getSkill();
System.out.println(skill.get("NAME"));
System.out.println(skill.get("YEAR"));
Book aaronbook = aaron.getMybook();
System.out.println(aaronbook.getBookname());
System.out.println(aaronbook.getIsbn());
System.out.println(aaronbook.getPrice());
System.out.println(aaronbook.getPages());
System.out
.println("------------End getPersonInfo()---------------------");
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
直接运行该Client.java中的main方法,运行结果如下:
Hello, Kiah Han ! This is you information...
Ages: 26
李彬 : you have 3 years experience!
Book Name : <Thinking in Java>
ISBN : 123456789
You pay $25.98 for this book.
This book have 925 pages.
------------Starting setBookInfo()---------------------
<Spring pro>
987654321
25.65
265
------------End setBookInfo()---------------------------
------------Starting getPersonInfo()---------------------
Aaron
26
JAVA
3
<Thinking in Java>
456256821
99.8
982
------------End getPersonInfo()---------------------
成功,好就到这里了,下班了,希望能给大家一点帮助
我的联系方式:
qq:33614814
e-mail:libin2722@sohu.com
原文地址:http://www.blogjava.net/libin2722/archive/2007/11/22/162444.html