今天终于搞定,贴出来分享一下
1、在www.apache.org 上下载Axis1.4,将解压后的 Axis 目录文件复制到 %TOMCATHOME%/webapps 目录下
2、重新启动 Tomcat,访问 http://localhost:8080/axis ,如果能访问,表示 Axis环境安装成功
3、在eclipse下建立webproject,将axis的jar包导入
写 2 个 JavaBean ,分别叫做 Person.java 和 Book.java ,代码如下
Book.java
package
com.lucky.axis.service;
public
class
Book
{
private String bookname;
private Long isbn;
private float price;
private Integer pages;
public String getBookname() {
return bookname;
}
public void setBookname(String bookname) {
this .bookname = bookname;
}
public Long getIsbn() {
return isbn;
}
public void setIsbn(Long isbn) {
this .isbn = isbn;
}
public float getPrice() {
return price;
}
public void setPrice( float price) {
this .price = price;
}
public Integer getPages() {
return pages;
}
public void setPages(Integer pages) {
this .pages = pages;
}
}
Person.java
package
com.lucky.axis.service;
import
java.util.Map;
public
class
Person
{
private String name;
private int age;
private Map skill;
private Book mybook;
public String getName() {
return name;
}
public void setName(String name) {
this .name = name;
}
public int getAge() {
return age;
}
public void setAge( int age) {
this .age = age;
}
public Map getSkill() {
return skill;
}
public void setSkill(Map skill) {
this .skill = skill;
}
public Book getMybook() {
return mybook;
}
public void setMybook(Book mybook) {
this .mybook = mybook;
}
}
建立服务器端代码,命名为 PersonInfoService.java ,实现三个 method ,分别为 public String getPersonInfo(Person person) 、 public Book setBookInfo(String bookname, Long isbn) 、 public Person getPersonInfo() ,以下为全部代码:
package
com.lucky.axis.service;
import
java.util.HashMap;
import
java.util.Map;
public
class
PersonInfoService
{
public PersonInfoService() {
}
public String getPersonInfo(Person person) {
String personinfo = "" ;
personinfo = " Hello, " + person.getName()
+ " ! This is you information
/r/n " ;
personinfo = personinfo + " Ages: " + person.getAge() + " /r/n " ;
Map skill = person.getSkill();
String strskill = "" ;
strskill = strskill + skill.get( " NAME " ) + " : you have "
+ skill.get( " YEAR " ) + " years experience!/r/n " ;
personinfo = personinfo + strskill;
personinfo = personinfo + " Book Name : "
+ person.getMybook().getBookname() + " /r/n " ;
personinfo = personinfo + " ISBN : "
+ person.getMybook().getIsbn() + " /r/n " ;
personinfo = personinfo + " You pay $ "
+ person.getMybook().getPrice() + " for this book./r/n " ;
personinfo = personinfo + " This book have "
+ person.getMybook().getPages() + " pages./r/n " ;
return personinfo;
}
public Book setBookInfo(String bookname, Long isbn) {
Book book = new Book();
book.setBookname(bookname);
book.setIsbn(isbn);
book.setPages( new Integer( 265 ));
book.setPrice(( float ) 25.65 );
return book;
}
public Person getPersonInfo() {
Person person = new Person();
person.setName( " Aaron " );
person.setAge( 26 );
Map skill = new HashMap();
skill.put( " NAME " , " JAVA " );
skill.put( " YEAR " , " 3 " );
person.setSkill(skill);
Book book = new Book();
book.setBookname( " <Thinking in Java> " );
book.setIsbn( new Long( 456256821 ));
book.setPages( new Integer( 982 ));
book.setPrice(( float ) 99.8 );
person.setMybook(book);
return person;
}
}
将编译好的 Java 类直接放在 %Tomcat%/webapps/axis/WEB-INFO/classess/ 目录下。注意将整个包路径复制到上述目录中
在%Tomcat%/webapps/axis 目录下建立 server-config.wsdd 文件,内容如下
<?
xml version="1.0" encoding="UTF-8"
?>
<
deployment
xmlns
="http://xml.apache.org/axis/wsdd/"
xmlns:java
="http://xml.apache.org/axis/wsdd/providers/java"
>
<
globalConfiguration
>
<
parameter
name
="sendMultiRefs"
value
="true"
/>
<
parameter
name
="disablePrettyXML"
value
="true"
/>
<
parameter
name
="adminPassword"
value
="admin"
/>
<
parameter
name
="attachments.Directory"
value
="C:/Tomcat 5.0 (iplanetldap)/webapps/axis/WEB-INF/attachments"
/>
<
parameter
name
="axis.servicesPath"
value
="/mossWS/"
/>
<
parameter
name
="dotNetSoapEncFix"
value
="true"
/>
<
parameter
name
="enableNamespacePrefixOptimization"
value
="false"
/>
<
parameter
name
="sendXMLDeclaration"
value
="true"
/>
<
parameter
name
="sendXsiTypes"
value
="true"
/>
<
parameter
name
="attachments.implementation"
value
="org.apache.axis.attachments.AttachmentsImpl"
/>
<
requestFlow
>
<
handler
type
="java:org.apache.axis.handlers.JWSHandler"
>
<
parameter
name
="scope"
value
="session"
/>
</
handler
>
<
handler
type
="java:org.apache.axis.handlers.JWSHandler"
>
<
parameter
name
="scope"
value
="request"
/>
<
parameter
name
="extension"
value
=".jwr"
/>
</
handler
>
</
requestFlow
>
</
globalConfiguration
>
<
handler
name
="Authenticate"
type
="java:org.apache.axis.handlers.SimpleAuthenticationHandler"
/>
<
handler
name
="LocalResponder"
type
="java:org.apache.axis.transport.local.LocalResponder"
/>
<
handler
name
="URLMapper"
type
="java:org.apache.axis.handlers.http.URLMapper"
/>
<
handler
name
="soapmonitor"
type
="java:org.apache.axis.handlers.SOAPMonitorHandler"
>
<
parameter
name
="wsdlURL"
value
="/axis/SOAPMonitorService-impl.wsdl"
/>
<
parameter
name
="namespace"
value
="http://tempuri.org/wsdl/2001/12/SOAPMonitorService-impl.wsdl"
/>
<
parameter
name
="serviceName"
value
="SOAPMonitorService"
/>
<
parameter
name
="portName"
value
="Demo"
/>
</
handler
>
<
service
name
="AdminService"
provider
="java:MSG"
>
<
parameter
name
="allowedMethods"
value
="AdminService"
/>
<
parameter
name
="enableRemoteAdmin"
value
="false"
/>
<
parameter
name
="className"
value
="org.apache.axis.utils.Admin"
/>
<
namespace
>
http://xml.apache.org/axis/wsdd/
</
namespace
>
</
service
>
<
service
name
="SOAPMonitorService"
provider
="java:RPC"
>
<
parameter
name
="allowedMethods"
value
="publishMessage"
/>
<
parameter
name
="className"
value
="org.apache.axis.monitor.SOAPMonitorService"
/>
<
parameter
name
="scope"
value
="Application"
/>
</
service
>
<
service
name
="AxisDemo"
provider
="java:RPC"
>
<
parameter
name
="allowedMethod"
value
="*"
></
parameter
>
<
parameter
name
="className"
value
="com.lucky.axis.service.PersonInfoService"
>
</
parameter
>
<
beanMapping
qname
="myNS:Person"
xmlns:myNS
="urn:PersonInfo"
languageSpecificType
="java:com.lucky.axis.service.Person"
/>
<
beanMapping
qname
="myNS:Book"
xmlns:myNS
="urn:PersonBookInfo"
languageSpecificType
="java:com.lucky.axis.service.Book"
/>
</
service
>
<
transport
name
="http"
>
<
requestFlow
>
<
handler
type
="URLMapper"
/>
<
handler
type
="java:org.apache.axis.handlers.http.HTTPAuthHandler"
/>
</
requestFlow
>
<
parameter
name
="qs:list"
value
="org.apache.axis.transport.http.QSListHandler"
/>
<
parameter
name
="qs:wsdl"
value
="org.apache.axis.transport.http.QSWSDLHandler"
/>
<
parameter
name
="qs.list"
value
="org.apache.axis.transport.http.QSListHandler"
/>
<
parameter
name
="qs.method"
value
="org.apache.axis.transport.http.QSMethodHandler"
/>
<
parameter
name
="qs:method"
value
="org.apache.axis.transport.http.QSMethodHandler"
/>
<
parameter
name
="qs.wsdl"
value
="org.apache.axis.transport.http.QSWSDLHandler"
/>
</
transport
>
<
transport
name
="local"
>
<
responseFlow
>
<
handler
type
="LocalResponder"
/>
</
responseFlow
>
</
transport
>
</
deployment
>
其中
<
service
name
="AxisDemo"
provider
="java:RPC"
>
<
parameter
name
="allowedMethod"
value
="*"
></
parameter
>
<
parameter
name
="className"
value
="com.lucky.axis.service.PersonInfoService"
>
</
parameter
>
<
beanMapping
qname
="myNS:Person"
xmlns:myNS
="urn:PersonInfo"
languageSpecificType
="java:com.lucky.axis.service.Person"
/>
<
beanMapping
qname
="myNS:Book"
xmlns:myNS
="urn:PersonBookInfo"
languageSpecificType
="java:com.lucky.axis.service.Book"
/>
</
service
>
languageSpecificType="java:com.lucky.axis.service.Person" />这个表示类中需要引入的其他类
重新启动 Tomcat5.5 ,访问 http://localhost:8080/axis/services/AxisDemo?wsdl ,可以看到该 Web Service 的 WSDL 描述信息
编写客户端测试类,命名为 Client.java。在该类中分别对 PersonInfoService.java所提供的方法进行调用,代码如下:
package
com.lucky.axis.client;
import
java.util.HashMap;
import
java.util.Map;
import
javax.xml.namespace.QName;
import
org.apache.axis.client.Call;
import
org.apache.axis.client.Service;
import
org.apache.axis.encoding.ser.BeanDeserializerFactory;
import
org.apache.axis.encoding.ser.BeanSerializerFactory;
import
com.lucky.axis.service.Book;
import
com.lucky.axis.service.Person;
public
class
Client
{
public Client() {
}
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);
// 注册序列化/反序列化器
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));
// 设置调用方法
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);
// Web服务调用
java.lang.Object _resp = call.invoke( new java.lang.Object[] { person } );
// 输出到屏幕
System.out.println(_resp.toString());
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 ) } );
Book mybook = (Book) _resbook;
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()--------------------------- " );
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[] {} );
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()--------------------- " );
}
}
直接运行该 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

被折叠的 条评论
为什么被折叠?



