??xml version="1.0" encoding="utf-8" standalone="yes"?> 首先Q列出在《如何在Tomcat上安装配|Axis》所用Y件基之上q需要用到的软gQ?br />1QEclipse SDKQeclipse-SDK-3.2-win32.zip 一Q?tng)安装配|Eclipse 二. (tng)在Eclipse中创建Axis应用
我这样利用Axis和Tomcat发布服务的方法是单的Q因而,服务在可靠性、安全性和客户定w{等斚w都是脆弱的,如果要保证这些特性,q必进一步深入对Axis和Tomcatq行更深层次的应用研I。似乎把应用服务器从Tomcat换ؓ(f)JBOSS?x)更好?/p>
2QEclipse SDK 语言插gQNLpack1-eclipse-SDK-3.2-win32.zip
版本问题?sh)然需要关注,最好与上述一_(d)下面我们从安装配|Eclipse开始:(x)
eclipse-SDK-3.2-win32.zip解压Q拷贝其下的eclipse文g夹到M你所希望的安装\径,例如QD:\Eclipse。好?jin),现在已经可以通过q行D:\Eclipse\eclipse下的eclipse.exe启动Eclipse?jin),但是如果q想安装语言插g汉化它的话,现在最好先别启动。先安装语言插gQ采用link方式Q解压NLpack1-eclipse-SDK-3.2-win32.zipQ在D:\Eclipse\eclipse下新Z个文件夹例如Qlinks和Language PackQ将解压得到的NLpack1-eclipse-SDK-3.2-win32文gҎ(gu)贝到Language Pack文g夹中Qƈ在links文g夹下新徏一个文本文Ӟ例如命名为:(x)language pack.linkQ在文g中加入一行:(x)path=D:\\Eclipse\\eclipse\\Language Pack\\NLpack1-eclipse-SDK-3.2-win32q保存,注意分隔W是两个\。现在再启动EclipseQ可以看到它已经被汉化了(jin)Q如果还没有被汉化,不要紧,可以先关闭它Q然后带参数-clean再启动试试,目的辑ֈ后,以后启动׃要带q参C(jin)Q否则媄(jing)响启动速度Q?/p>
启动EclipseQ选择工作I间路径Q例如D:\My_Eclipse_WorkSpaceQ,从欢q界面{臛_作台Q必要的话,先通过H口——首选项——Java中的~译器和已安装的JRE两个讄Q将~译器一致性别和JDK安装路径讄好(当然也可以设|JRE安装路径Q不q这样在~写Java代码时Eclipse的提CZ息无法链接到cd源码Q似乎不太方便)(j)?br />接下来,选择Java透视图,新徏一个Java目Q例如项目名为MoneyManage。鼠标右键单d资源理器中的项目名MoneyManageQ新Z个文件夹Q命名ؓ(f)libQ选中lib文g夹,右键单击Q选择导入命o(h)Q选择常规下的文gpȝ作ؓ(f)导入源,单击下一步浏览我们先前徏好的C:\Tomcat5.0\webapps\axis\WEB-INF\lib目录Q勾选其中的所有jar文gQ单d成。右击项目名MoneyManageQ选择属性——Java构徏路径——库Q点?yn)L加Jar按钮Q选中刚才导入到l(f)ib文g夹下的所有Jar文gQ点ȝ定将它们都加入项目构\径。这样就所有我们开发可能涉?qing)到的库都导入?jin)目?br />紧接着我们可以在目MoneyManage下新Z个包Q例如也叫MoneyManageQ在其中实现一些类来提供WS的方法了(jin)?br />例如Q这里我们实C(jin)4个类Action、Admin、MoneyManage和moneyClient?br />
三. (tng)应用部|到Tomcat发布为WS
例如Q我们希望将moneyClient中的所有可讉KQpublicQ方法作为WS发布?br />在项目中新徏一XML文gQ命名ؓ(f)server-config.wsddQ内容如下:(x)
<?
xml (tng)version="1.0" (tng)encoding="UTF-8"
?>
(tng)2
<
deployment (tng)
xmlns
="http://xml.apache.org/axis/wsdd/"
(tng)3
(tng)xmlns:java
="http://xml.apache.org/axis/wsdd/providers/java"
>
(tng)4
(tng)
<
globalConfiguration
>
(tng)5
(tng) (tng)
<
parameter (tng)
name
="adminPassword"
(tng)value
="admin"
(tng)
/>
(tng)6
(tng) (tng)
<
parameter (tng)
name
="attachments.implementation"
(tng)7
(tng) (tng) (tng)value
="org.apache.axis.attachments.AttachmentsImpl"
(tng)
/>
(tng)8
(tng) (tng)
<
parameter (tng)
name
="sendXsiTypes"
(tng)value
="true"
(tng)
/>
(tng)9
(tng) (tng)
<
parameter (tng)
name
="sendMultiRefs"
(tng)value
="true"
(tng)
/>
10
(tng) (tng)
<
parameter (tng)
name
="sendXMLDeclaration"
(tng)value
="true"
(tng)
/>
11
(tng) (tng)
<
parameter (tng)
name
="axis.sendMinimizedElements"
(tng)value
="true"
(tng)
/>
12
(tng) (tng)
<
requestFlow
>
13
(tng) (tng) (tng)
<
handler (tng)
type
="java:org.apache.axis.handlers.JWSHandler"
>
14
(tng) (tng) (tng) (tng)
<
parameter (tng)
name
="scope"
(tng)value
="session"
(tng)
/>
15
(tng) (tng) (tng)
</
handler
>
16
(tng) (tng) (tng)
<
handler (tng)
type
="java:org.apache.axis.handlers.JWSHandler"
>
17
(tng) (tng) (tng) (tng)
<
parameter (tng)
name
="scope"
(tng)value
="request"
(tng)
/>
18
(tng) (tng) (tng) (tng)
<
parameter (tng)
name
="extension"
(tng)value
=".jwr"
(tng)
/>
19
(tng) (tng) (tng)
</
handler
>
20
(tng) (tng)
</
requestFlow
>
21
(tng)
</
globalConfiguration
>
22
(tng)
<
handler (tng)
name
="LocalResponder"
23
(tng) (tng)type
="java:org.apache.axis.transport.local.LocalResponder"
(tng)
/>
24
(tng)
<
handler (tng)
name
="URLMapper"
25
(tng) (tng)type
="java:org.apache.axis.handlers.http.URLMapper"
(tng)
/>
26
(tng)
<
handler (tng)
name
="Authenticate"
27
(tng) (tng)type
="java:org.apache.axis.handlers.SimpleAuthenticationHandler"
(tng)
/>
28
(tng)
<!--
(tng)服务名?/span>
-->
29
(tng)
<
service (tng)
name
="moneyClient"
(tng)provider
="java:RPC"
>
30
(tng) (tng)
<!--
(tng)服务cd (tng)
-->
31
(tng) (tng)
<
parameter (tng)
name
="className"
(tng)value
="MoneyManage.moneyClient"
(tng)
/>
32
(tng) (tng)
<!--
(tng)允许讉K所有方法?/span>
-->
33
(tng) (tng)
<
parameter (tng)
name
="allowedMethods"
(tng)value
="*"
(tng)
/>
34
(tng)
</
service
>
35
(tng)
<
transport (tng)
name
="http"
>
36
(tng) (tng)
<
requestFlow
>
37
(tng) (tng) (tng)
<
handler (tng)
type
="URLMapper"
(tng)
/>
38
(tng) (tng) (tng)
<
handler
39
(tng) (tng) (tng) (tng)
type
="java:org.apache.axis.handlers.http.HTTPAuthHandler"
(tng)
/>
40
(tng) (tng)
</
requestFlow
>
41
(tng)
</
transport
>
42
(tng)
<
transport (tng)
name
="local"
>
43
(tng) (tng)
<
responseFlow
>
44
(tng) (tng) (tng)
<
handler (tng)
type
="LocalResponder"
(tng)
/>
45
(tng) (tng)
</
responseFlow
>
46
(tng)
</
transport
>
47
</
deployment
>
48
注意以上文g中的service标签Q就代表?jin)一个WS服务Q服务名为moneyClientQ第一个parameter子标{,其value属性ؓ(f)待发布成服务的方法所在的cdQ第二个parameter子标{表明将cȝ所有方法发布,允许服务调用者访问第一个parameter子标{指出类的所有可讉KҎ(gu)?br />编写好的server-config.wsdd文g拷入C:\Tomcat5.0\webapps\axis\WEB-INF目录Qƈ所?个类都编译ؓ(f)class文g后按包结构(可以在D:\My_Eclipse_WorkSpace\MoneyManage\bin下找到现成的Q拷入C:\Tomcat5.0\webapps\axis\WEB-INF\classes目录?br />注意Q凡是开发中用到的额外第三方jar库文Ӟ除了(jin)在项目构\径中d外,也要在C:\Tomcat5.0\webapps\axis\WEB-INF\lib下添加,也要在C:\Tomcat5.0\common\lib下添加?br />q算单,部v完成?br />
四. (tng)试发布的WS
可以试?jin),看看我们是否发布成功?br />启动Tomcat服务Q如果服务已启动Q则先关闭它Qƈ重新启动?br />通过览器访?a href="http://localhost:8080/axis/services/moneyClient?wsdl">http://localhost:8080/axis/services/moneyClient?wsdlQ如果看到显C出wsdl文gQ则表明WS服务发布成功?br />q而,我们q可以通过具体~程来测试调用服务的某些Ҏ(gu)。例如,下面q个cAccessTestp用了(jin)我们发布的moneyClient服务中的getStatusҎ(gu)来查看用户名为admin密码为change的帐L(fng)状态是否可用?br />
package
(tng)MoneyManage;
(tng)2
(tng)3
import
(tng)javax.xml.namespace.QName;
(tng)4
(tng)5
import
(tng)org.apache.axis.client.Call;
(tng)6
import
(tng)org.apache.axis.client.Service;
(tng)7
(tng)8
public
(tng)
class
(tng)AccessTest (tng)
{
(tng)9
(tng) (tng) (tng) (tng)
public
(tng)
void
(tng)Access() (tng)
{
10
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
try
(tng)
{
11
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)String (tng)endPoint (tng)
=
(tng)
"
http://localhost:8080/axis/services/moneyClient?wsdl
"
;
12
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)Service (tng)service (tng)
=
(tng)
new
(tng)Service();
13
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)Call (tng)call (tng)
=
(tng)(Call) (tng)service.createCall();
14
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)call.setTargetEndpointAddress(endPoint);
15
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
16
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)call.setOperationName(
new
(tng)QName(
"
moneyClient
"
, (tng)
"
getStatus
"
));
17
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)String (tng)result (tng)
=
(tng)(String) (tng)call.invoke(
new
(tng)Object[] (tng)
{ (tng)
"
admin
"
,
18
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
"
change
"
(tng)}
);
19
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)System.out.println(result);
20
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
21
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)}
(tng)
catch
(tng)(Exception (tng)e) (tng)
{
22
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)e.printStackTrace();
23
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)System.out.println(
"
access (tng)error!
"
);
24
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)}
25
(tng) (tng) (tng) (tng)}
26
27
(tng) (tng) (tng) (tng)
public
(tng)
static
(tng)
void
(tng)main(String (tng)args[]) (tng)
{
28
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)AccessTest (tng)at (tng)
=
(tng)
new
(tng)AccessTest();
29
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)at.Access();
30
(tng) (tng) (tng) (tng)}
31
32
}
我们也可以通过一些工hҎ(gu)务进行测试与调用Q例如王咏刚~写的wsCaller 1.0?/p>
一Q安装Java环境
通过jdk-1_5_0_06-windows-i586-p.exeQ前几天在SUN|站上看到现在最新的好像是是jdk-1_5_0_10-windows-i586-p.exeQ嗯Q如果用q个的话应该也可以)(j)安装jdk1.5.0_06和jre1.5.0_06Q注意首先会(x)安装JDKQ然后接着?x)安装JREQ必d别给它们选两个不同的路径来装Q如C:\jdk1.5.0_06和C:\jre1.5.0_06?/p>
二.安装Tomcat
通过jakarta-tomcat-5.0.28.exeQ最新都出Tomcat 6.0.2-beta?jin),不知道行不行Q安装Tomcat 5.0.28Q记得是要选择安装路径、系lJRE路径、管理员用户名和密码、Tomcat端口L(fng){,例如QC:\Tomcat5.0、C:\jre1.5.0_06、admin和admin?080Q端口别被别的Y件占用,否则换一个)(j)?/p>
三.Axis集成到Tomcat
先不要启动Tomcat服务Q解压axis-bin-1_3.zipQ将\axis-bin-1_3\axis-1_3\webapps目录下的axis整个文gҎ(gu)贝到Tomcat安装路径Q例如C:\Tomcat5.0Q下的webapps文g夹下。再把Tomcat安装路径Q例如C:\Tomcat5.0Q下刚拷贝的axis目录下的WEB-INF\lib目录下的所有文件拷贝到Tomcat的安装\径下的common\lib目录中。在jdk1.5.0_06的lib目录Q例如C:\jdk1.5.0_06\libQ下有一个tools.jar文g,把它拷到Tomcat安装目录(例如C:\Tomcat5.0)下的common\lib目录下?/p>
四.配置pȝ环境变量
通过我的?sh)脑——属性——高U——环境变量在下面的系l变量中d如下一些项Q?br />1.变量名TOMCAT_HOME
变量值C:\Tomcat5.0
2. 变量名AXIS_HOME
变量?TOMCAT_HOME%\webapps\axis
3. 变量名AXIS_LIB
变量?AXIS_HOME%\lib
4. 变量名AXISCLASSPATH
变量?AXIS_LIB%\axis.jar;%AXIS_LIB%\axis-ant.jar;%AXIS_LIB%\axis-schema.jar;%AXIS_LIB%\commons-discovery-0.2.jar;%AXIS_LIB%\commons-logging-1.0.4.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\log4j-1.2.8.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB%\wsdl4j-1.5.1.jar; %AXIS_LIB%\activation.jar;%AXIS_LIB%\mail.jar;%AXIS_LIB%\xmlsec-1.3.0.jar;
5Q变量名CLASSPATH
变量?AXIS_LIB%\axis.jar;%AXIS_LIB%\axis-ant.jar;%AXIS_LIB%\axis-schema.jar;%AXIS_LIB%\commons-discovery-0.2.jar;%AXIS_LIB%\commons-logging-1.0.4.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\log4j-1.2.8.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB%\wsdl4j-1.5.1.jar; %AXIS_LIB%\activation.jar;%AXIS_LIB%\mail.jar;%AXIS_LIB%\xmlsec-1.3.0.jar;
6Q变量名JAVA_HOME
变量值C:\jdk1.5.0_06\bin
注意保证以上变量g提及(qing)的相应文仉在相应目录。特别的是,在axis-bin-1_3.zip中不包括activation.jar、mail.jar和xmlsec-1.3.0.jarq?个文Ӟ需要去SUN和Apache主页单独下蝲Q分别是jaf-1_0_2-upd2.zip、javamail-1_4.zip和xml-security-bin-1_3_0.zip。(版本不同不知道行不行Q?/p>
五.(g)查是否安装成?
启动Tomcat服务Q用web览器访?a href="http://localhost:8080/axis/">http://localhost:8080/axis/Q可以看到Hello! Welcome to Apache-Axis.的提CZ息,再单击Validation链接转到http://localhost:8080/axis/happyaxis.jspQ如果看到提CThe core axis libraries are present.The optional components are present. pC安装Axis成功?jin)。否则根据提C提供的链接Q下载对应的文gQ拷贝到Tomcat目录下Webapps里面的axis文g夹下的WEB-INF下的lib目录中,同时Tomcat安装路径下的common目录下的lib中也要拷贝,再重新访?a href="http://localhost:8080/axis/happyaxis.jsp">http://localhost:8080/axis/happyaxis.jspQ直到提CThe core axis libraries are present.The optional components are present.表示安装Axis成功Q(怎么q有一句Note: Even if everything this page probes for is present, there is no guarantee your web service will work, because there are many configuration options that we do not check for. These tests are necessary but not sufficient啊!Q?br /> (tng)
好,配置好了(jin)Q接下来可以开发基于Axis的WS应用q|到Tomcat?jin)。过几天准备再写一关于开发Axis应用的?/p>