使用SMTP和WebSphere Studio构建Web服务——原始SMTP

引言
本系列文章的第1部分讨论了应用程序设计者们想在SMTP上使用SOAP的原因,以及各种实现情况中的折衷设计 。这篇文章将讨论几种实现方式之一的原始SMTP,并且让它运行在IBM甒ebSphere甋tudioApplicationDeveloper中(下文中称之为ApplicationDeveloper) 。
这些指令在RedHatLinux7.2上运行的ApplicationDeveloper4.03上被测试过 。
收集组件
您可以从下面下载源代码 。我们将会需要几部分组件让Axis和SMTP运行于ApplicationDeveloper 。下面是每个组件的描述和链接:
JavaMail用于发送和接收SMTP电子邮件 。我们使用它所提供的mail.jar 。
Java?ActivationFramework由JavaMail所使用 。我们需要这个组件中的activation.jar 。
ApacheAxis用于我们Web服务的处理 。假如您下载的是这个包的源文件版本,那么您还需要下载Ant来构建它 。
提供的代码要使用JUnit测试案例和HTTPUnit测试案例 。它们是可选的,但我们强烈推荐您使用它们 。
在ApplicationDeveloper中安装代码
首先,在ApplicationDeveloper中创建一个名为SOAP-SMTP的Web项目 。确保它有一个名为/Axis的上下文根 。图1是您在项目创建向导中应该看到的 。请单击Finish 。
图1.Web项目创建向导
假如您此时还没有为其他工作安装JUnit和HttpUnit的话,您可以安装它们 。JUnit应该安装到它自己的Java项目中,而HttpUnit应该安装到它自己的Web项目中 。
我们现在可以为SOAP-SMTP项目添加代码了:
在Navigator视图中打开项目,然后单击source文件夹 。
在菜单栏单击File=>Import 。
选择从一个ZIP文件导入,然后单击Next 。
浏览并找到您下载的soap-smtp.zip,选择所有类型,确保目标为SOAP-SMTP/source 。
单击Finish 。ApplicationDeveloper导入并且编译源代码 。您将会看到编译出现问题,因为我们还没有指定我们所需要的所有JAR文件,我们现在开始完成这些工作 。
将JAR文件添加到编译期类路径中
此时,假如您下载了Axis的源文件分发版,您需要构建它 。指令在AxisZIP文件中 。
右键单击SOAP-SMTP项目,然后选择Properties 。
在左边窗格中选择JavaBuildPath,它用来设置编译代码的类路径 。
选择Projects选项卡,假如您已经创建了JUnit和HttpUnit项目,选中他们 。这将编译和执行测试类 。
选择Libraries选项卡 。
我们需要在这里添加几个JAR文件 。单击AddExternalJAR,浏览并找到您下载JavaMail的目录然后添加mail.jar 。
类似地,浏览并找到您下载JavaActivationFramework(JAF)的目录,然后添加activation.jar 。
现在从Axis添加7个JAR文件:axis.jar、commons-discovery.jar、commons-logging.jar、jaxrpc.jar、log4j-1.2.4.jar(您的数字可能会有不同,这取决于您下载Axis的时间)、saaj.jar和wsdl4j.jar 。
我们还需要添加几个标准的JAR文件,它们是ApplicationDeveloper中包含的WebSphereApplicationServer所附带的 。单击AddVariable然后添加WAS_XERCES和WAS_XALAN 。
为了运行一些示例,我们需要覆盖ApplicationDeveloper附带的mail.jar和activation.jar 。单击Order选项卡,然后把这两个新添加的JAR文件移动到列表最上方的rt.jar之上 。
当您单击OK时,大多数编译问题都应该被解决了 。切换到Java包视图时您应该会看到类似于图2的界面:
图2.Packages视图中的相关JAR文件
点击查看大图
现在我们需要将正确的Axis部分添加到我们的项目中 。我们已经有了基本的Axis代码,但我们要使用它们的示例,所以我们得连接到Web服务上 。同样地,单击SOAP-SMTP=>source,然后选择File=>Import 。选择Importfromafilesystem,然后导入Axis示例 。您需要从他们的构建目录而不是从src目录树得到这些示例,因为并不是所有的东西都在src中 。我是从/XML-axis/java/build/work导入的,然后选择samples目录 。这将把文件导入到正确的目录,从而与包的结构相匹配 。
有些Axis源文件会有编译问题,因为它们依靠于crypto或者其他一些我们不使用的东西 。您可以忽略这些问题 。
此时,假如您已经安装了JUnit,您应该可以在khygh.smtp.unit中的任何一个类上执行JUnit了 。
在WebSphereTestEnvironment中执行
我们已经差不多完成了,但考虑到ApplicationDeveloper中TestEnvironment的特性,我们还需要为运行时设置正确的JAR文件 。为了完成设置,请打开Servers透视图,然后在ServerConfiguration视图中打开WebSphereTestEnvironment服务器实例 。单击Paths选项卡 。我们需要添加以前添加到Web项目构建路径中的大部分JAR文件,这样它们就可以被WebSphere运行时找到 。使您的WebSphereTestEnvironment窗口如图3所示,换上您的JAR的文件正确路径:
图3.WebSphereTestEnvironment的类路径
点击查看大图


WebSphere有自带的mail.jar和activation.jar,位于JVM的扩展目录,这意味着它们会首先被装入 。为了使用您下载的最新版本,您需要将原有的那些文件移动到硬盘的其他地方 。(把它们重命名是不够的,因为即使把它们重命名为xxxx.jar.old,他们仍然可以被使用) 。ApplicationDeveloper中有若干个地方存在这些JAR文件,我们需要移动的那些位于/plugins/com.ibm.etools.server.jdk.jre.lib.ext/ 。假如您忘记这样做,服务器启动时您就会得到一个警告,提示您不支持POP协议 。
确保包含HttpUnit(假如您已经安装它)的DefaultEar和SOAP-SMTP在WebSphereTestEnvironment服务器配置中 。
现在您需要在web.xml中添加需要的项 。在Navigator视图或Packages视图中,打开SOAP-SMTP=>webApplication=>WEB-INF,然后打开web.xml,单击Source选项卡 。使您的窗口如下面的图4所示,确保您的启动参数是正确的:
图4.web.xml
【使用SMTP和WebSphere Studio构建Web服务——原始SMTP】 点击查看大图
在DefaultEAR项目下打开application.xml,确保SOAP-SMTP有一个名为/Axis的上下文根,这是Axisadminservlet需要的 。
祝贺您!您已经全部配置好了,现在就可以启动WebSphereTestEnvironment 。从Server透视图中,单击Servers视图并启动WebSphereTestEnvironment 。它应该会切换到Console视图,您可以在WebSphereApplictionServer启动时看到消息 。假如它启动时抛出了任何异常,请检查前面的步骤,确保您遵循了配置WebSphereTestEnvironment的说明 。
结束语
在这篇文章中,我们成功地在WebSphereStudio中部署了代码 。本系列文章的下一篇将会讨论基于SMTP的SOAP实现 。