利用Axis实现基于SOAP的Web Service
简介
这是一篇用Java不到2周的新手写的关于利用Axis实现基于SOAP的Web Service的纪实性文章,里面不敢介绍什么SOAP,Axis,Web Service之类的理论知识,因为我至今还不是很懂这些,其中涉及到的你可能感兴趣的问题是:
1.如何用JBuilder 9写Web Service的服务器端和客户端;
2.如何发布Web Service;
3.如何解决Web Service中自定义对象的传递问题.
我使用的各个主要开发抱/工具/平台的情况如下:
1. JDK 1.4.0.01
2. JBuilder 9.0
3. Axis 1.1(past name is Apache SOAP 3.0)
4. Xerces 2.5.0
5. Javamail 1.3.1
6. Jaf 1.0.2
7. Tomcat 4.1
关键字 Axis,Web Service,SOAP,JBuilder
*我要写的Web Service
真的当然不能说,职业道德嘛,所以假设叫CommitOrderReq:
public ResultInfo CommitOrderReq (OrderFormInfo ofi)
这是一个公开给别人提交订单的Web Service,客户端要传给我一个OrderFormInfo对象,这个对象描述了订单的信息,我返回给客户端一个ResultInfo对象.下面是OrderFormInfo和ResultInfo的定义:
class OrderFormInfo
{
public OrderFormInfo( ) { }; // $$$ - 1
String m_strOrderName;
int m_nOrderID;
OrderOwner m_objOrderOwner; // $$$ - 2
String get_OrderName( );
void set_OrderName(String strIn);
String get_OrderID( );
void set_OrderID(int nIn );
}
class ResultInfo
{
public ResultInfo( ) { }; // $$$ - 3
String m_strResult;
String get_Result ( );
void set_Result (String strIn);
}
有两个地方需要注意的,这两个类最好遵从JavaBean的规范(“遵从JavaBean的规范”,我甚至都不知道这么说对不对,呵呵,对Java世界还不熟悉…见谅呀各位),不遵从的话你到时候会在客户端传递对象给服务器的时候遇到麻烦的,怎么遵从呢?哎..就是:
1.一定要有默认构造函数(就是不带参数的构造函数),见$$$ -1,$$$ -3;
2.像Microsoft COM中的某种属性一样针对各个成员变量提供get,set方法.
请注意,在OrderFormInfo对象里面又聚合了一个OrderOwner对象,这种样子参数在实际工作中经常会遇到的情况,一开始我没有在意这一点,没觉得有什么不对…后来大家会知道发生了什么…
*用JBuilder 9写一个Web Service
File|New,新建一个工程,然后把自己让Web Service做的事情写完了…其中艰辛就不说了,都不知道该怎么去查Java那浩瀚的类…Sun要是有MSDN之类的帮助就好了…
*部署Web Service
A.Select File|New Project to display the Project wizard.Select “Web Service” tab and then click “Web Service Configuation”.
B. Choose Apache Axis from the Toolkit drop-down list,enter ”webApp” in another field;
C. Select File|New Project to display the Project wizard.Select “Web Service” tab,click “Export as a web service”.
D.In “Export as a web service – Step 1 of 7”wizard click browser-button that belongs to “Interface or Class”.
E.In “Choose Class or Intersface to Export As Web Service” dialog,find and select the “firstjavawebservice.HelloAxis” item.It is the class that you want to export as web service.
F.Run this project,it will display “JBuilder Apache Axis Admin Console”page,click “view”to check whether your web service is successfully deploy on your local tomcat server.You should conform WSDL file also.
G.Click finish to close the Project wizard.
别以为这就完了,假设我刚才我在Step B中填写的是perdubug_ws,接下来我就把perdubug_ws\WEB-INF目录下的东西拷贝到服务器上的\Tomcat 4.1\webapps\axis\WEB-INF目录下,这就算部署了…我就很纳闷是否JBuilder 9提供了这样的功能是的我可以直接在本地编译完我的代码然后直接部署到远端的服务器上呢?反正我是没找到…
部署完了再在浏览器里面输入http://服务器地址:端口号/axis/,就会出现你的Axis的页面否这说明你没有配置好Axis…点击View看一下你的服务是否部署成功了,如果成功的话你可以看到你的服务名旁边有一个(WSDL),记下它的URL后面用得到,我们在这称呼这个URL为wsdl_URL,主要是为了好记.
未完待续