Axis创建WebService

来源:互联网 发布:如何使用通达信软件 编辑:程序博客网 时间:2024/05/22 12:47

学习Axis和web service之一

 

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.
完成,再去学习,稍后总结

Axis创建WebService 测试环境和工具:jdk1.4.2 ,tomcat 5.x ,eclipse 3.0 ,axis 1.2.x 首先配置好jdk和tomcat容器。 首先 下载 axis [http://apache.justdn.org/ws/axis/1_2_1/]目前版本是 1.2.1。解压缩到某个盘的axis下面。 copy %axis%/webapps/axis目录到 %tomcat_home%/webapps下。 copy mail.jar,activation.jar到 %tomcat_home%/webapps/axis/WEB-INF/lib下,这两个文件可以去sun网站或者google里去search。 启动tomcat,没有报错,而且可以访问[http://localhost:8080/axis/happyaxis.jsp] 说明你配置已经成功。 HelloWorld 测试 打开eclipse 创建一个axis的j2ee project,导入%tomcat_home%/webapps/axis/WEB-INF/lib下的所有的jar文件到该项目的lib目录,并且添加到classpath。 创建HellowWorld.java 文件 public class HelloWorld { public String sayHello() { return "HELLO WORLD!"; } } 创建 HelloClient.java 文件 import org.apache.axis.client.Call; import org.apache.axis.client.Service; public class HelloClient { public static void main(String [] args) throws Exception { String endpoint = "http://localhost:" +"8080"+ "/axis/services/HelloWorld"; Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress( new java.net.URL(endpoint) ); call.setOperationName("sayHello" ); String res = (String) call.invoke( new Object[] {} ); System.out.println( res ); } } 创建 server-config.wsdd文件 在%TOMCAT_HOME%/webapps/axis/WEB-INF下新建deploy.wsdd文件,即SOAP服务发布描述文件 deploy.wsdd <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <service name="HelloWorld" provider="java:RPC"> <parameter name="className" value="HelloWorld"/> <parameter name="allowedMethods" value="sayHello"/> </service> </deployment> 在%TOMCAT_HOME%/webapps/axis/WEB-INF目录下执行下列语句 java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -lhttp://localhost:8080/axis/services/AdminService deploy.wsdd 要注意的是 -Djava.ext.dirs=lib这个参数,这个参数可以使你编译过程中动态调用axis.jar包。而不需要事先在系统变量里配置axis.jar包的路径。另外,-lhttp://之后只有axis这个字符串可以根据项目名称的不同而修改,其他的都是必然写法。 打印 Processing file deploy.wsdd <Admin>Done processing</Admin> 则表示成功 你会发现目录下多了一个server-config.wsdd文件,这就是AXIS的配置文件,以后所有的服务发布描述都会在里面找到。(当然,你可以直接修改它,不用再写deploy.wsdd)然后打开浏览器http://localhost:8080/axis/servlet/AxisServlet,你就会看到你的服务已发布 copy HelloWorld.class文件到 %TOMCAT_HOME%/webapps/axis/WEB-INF/classes下 在eclipse平台 run HelloClient 则可以执行 返回结果:HELLO WORLD! 这是一个最简单的测试用例 :p~~~