web service由于工作中需要用到,所以那天从网上GOOGLE一下,查看如何制作自己的第一个WEB SERVICE。首先,web service的原理我就不多讲了,再怎么讲也不如人家讲的好,况且都是从别人那里拷贝的。还是整点实际的吧。马上建立自己的WEB SERVICE的程序。
一.首先下载安装软件:
1.axis-src-1_2_1,(自己去下载,地址忘记了)
2.jakarta-tomcat-5.0.18.exe(这个是安装版本,从别的地方拷贝也可以的)
最少也要有这两个包
二.安装
自己安装吧。挺简单的。TOMCAT安装最好改一下名字比如:TOMCAT
三.
1.将axis-src-1_2_1这个包解压后,将axis-1_2_1/webapps下axis的所有东西拷贝到你刚刚建立的TOMCAT的webapps下。目录结构如下:
tomcat-webapps-axis
然后查看一下你的axis的WEB-INF的lib下*.jar文件是否全,应该有8个
axis.jar
axis-ant.jar
commons-discovery-0.2.jar
commons-logging-1.0.4.jar
jaxrpc.jar
log4j-1.2.8.jar
saaj.jar
wsdl4j-1.5.1.jar
(一定看好各个文件的文件名,一会将配置CLASSPATH)
2.然后到axis-1_2_1目录下,找到lib文件夹,拷贝其中的activation.jar文件,到
Tomcat/webapps/axis/WEB-INF/lib,和上面的8个jar文件在一起,就OK了。
四.配置 web.xml
在web.xml里写上下面这段话
<servlet>
??<servlet-name>AxisServlet</servlet-name>
??<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
??<load-on-startup>5</load-on-startup>
? ?</servlet>
???
?? ?<servlet-mapping>
??<servlet-name>AxisServlet</servlet-name>
??<url-pattern>/services/*</url-pattern>
? ?</servlet-mapping>
在应用服务器启动时就会调用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="adminPassword" value="admin" />
??<parameter name="sendXsiTypes" value="true" />
??<parameter name="sendMultiRefs" value="true" />
??<parameter name="sendXMLDeclaration" value="true" />
??<parameter name="axis.sendMinimizedElements" value="true" />
??<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" />
?<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="Version" provider="java:RPC">
??<parameter name="allowedMethods" value="getVersion" />
??<parameter name="className" value="org.apache.axis.Version" />
?</service>
?<!-- <service name="ss" provider="java:RPC">
??<parameter name="allowedMethods" value="*" />
??<parameter name="className" value="org.apache.axis.AA" />
?</service>
? -->
?<transport name="http">
??<requestFlow>
???<handler type="URLMapper" />
???<handler
????type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
??</requestFlow>
?</transport>
?<transport name="local">
??<responseFlow>
???<handler type="LocalResponder" />
??</responseFlow>
?</transport>
?
?<service name="tcsfService" type="" regenerateElement="true"
???????? provider="java:RPC" style="rpc" use="encoded">
???????? <parameter name="scope" value="Request" regenerateElement="false"/>
???????? <parameter name="className" value=".webService.server.TcsfWebService" regenerateElement="false"/>
??????? <parameter name="allowedMethods" value="*" regenerateElement="false"/>
??????? <beanMapping languageSpecificType="java:webService.client.CommonResult" qname="ns:CommonResult" xmlns:ns="urn:BeanService"/>
?</service>
</deployment>
然后启动服务器
打开浏览器输入
http://172.31.0.9/services/tcsfService?wsdl
如果不报错就证明环境正常,就可以开始编写了,当然TcsfWebService这个类里可以便写的.只要存在就行了.
五.测试
这步很重要,我自己觉得,因为如果你不知道CLASSPATH是否配置齐全,所以应该测试一下,有些文章没有测试直接就往下走了,但是就出现问题了,我就出现了问题,是jar包没有导入造成的,错误信息如这样:
Exception in thread "main" java.lang.NoClassDefFoundError:
javax/wsdl/OperationType
at org.apache.axis.description.OperationDesc.<clinit>(OperationDesc.java
:58)
????????? at org.apache.axis.client.Call.addParameter(Call.java:948)
????????? at org.apache.axis.client.Call.addParameter(Call.java:983)
????????? at BankClient.main(BankClient.java:29)
这就是没有导入造成的错误。
其实你先看一下classpath就能避免错误。
点击开始-运行-cmd-打开命令行窗口-敲入set classpath,好了你配置的classpath完全显示了,你可以仔细的查看了。
六调试AXIS
启动TOMCAT,输入网址 http://localhost:8080/axis,出现 "Hello! Welcome to Apache-Axis." 欢迎词,点击链接 Validate 来验证 Axis 所需的 .jar 包是否齐全 (Needed Components).
七.开发一个 Web Service 服务端程序
(代码是转贴,谢谢!)
我的这个例子是使用 Web Service 返回一个请求字段的值.
import java.util.*;
public class wsTestService
{
??? String strName = "Ryun";
??? int intAge = 21;
??? List items = new ArrayList();
??
??? public String getName() {
????? return strName;
???? }
??
??? public int getAge() {
????? return intAge;
???? }
??
??? public List getItems() {
????? return items;
???? }
}将此文件命名为 wsTestService.jws 存放到
d:/tomcat/webapp/axis/下
访问 http://localhost:8080/axis/wsTestService.jws,出现 "There is a Web Service here"即表明 Web Service 服务端程序安装完成.
开发一个 Web Service 客户端程序
建立客户端程序wsTestClient.java
以下是客户端的源程序,用于向 Web Service Server 提交服务请求:
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class wsTestClient {
??? public static void main(String args[]) {
????? System.out.println("Start invoking...");
????? try {
??????? String strUri = "http://localhost:8080/axis/wsTestService.jws";
??????? Service service = new Service();
??????? Call call = (Call)service.createCall();
??????? call.setTargetEndpointAddress(new java.net.URL(strUri));
??????? call.setOperationName("getName");
??????? String ret = "" + call.invoke(new Object[] {});
??????? System.out.println("I am " + ret + ".");
?????? }
????? catch (Exception e) {
??????? System.err.println(e.toString());
?????? }
????? System.out.println("Finished the invoking.");
????? }
}
然后编译运行,如果出现问题,那可能是环境变量path,classpath配置的问题,自己查看
一下,这里就不再描述了。
C:/>cd /
C:/>javac wsTestClient.java
C:/>java wsTestClient
Start invoking...
I am Ryun.
Finished the invoking.
完成,再去学习,稍后总结