赛迪网 > IT技术 Java > 架构-与-模式
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

Web基础:使用Axis开发Web Service程序

发布时间:2007.12.25 04:59     来源:赛迪网    作者:执木

1、新建一个Web工程,工程名为“AxisTest”:
2、新建“lib”文件夹,然后把主要JAR包:axis.jar,commons-discovery-0.2.jar,commons-logging-1.0.4.jar,jaxrpc.jar,wsdl4j-1.5.1.jar,saaj.jar;可选包(发布服务及生成客户端程序是要用到的):activation.jar;mail.jar都拷贝到此“lib”文件夹下,并把主要的JAR包添加到工程的classpath中;
3、配置“web.xml”:
< ?xml version="1.0" encoding="UTF-8"?>
< web-app version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
   
    < display-name>Apache-Axis< /display-name>   
    < listener>
        < listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener< /listener-class>
    < /listener>
   
  < servlet>
    < servlet-name>AxisServlet< /servlet-name>
    < servlet-class>
        org.apache.axis.transport.http.AxisServlet
    < /servlet-class>
  < /servlet>

  < servlet>
    < servlet-name>AdminServlet< /servlet-name>
    < servlet-class>
        org.apache.axis.transport.http.AdminServlet
    < /servlet-class>
    < load-on-startup>100< /load-on-startup>
  < /servlet>

  < servlet>
    < servlet-name>SOAPMonitorService< /servlet-name>
    < servlet-class>
        org.apache.axis.monitor.SOAPMonitorService
    < /servlet-class>
    < init-param>
      < param-name>SOAPMonitorPort< /param-name>
      < param-value>5001< /param-value>
    < /init-param>
    < load-on-startup>100< /load-on-startup>
  < /servlet>
  < servlet-mapping>
    < servlet-name>AxisServlet< /servlet-name>
    < url-pattern>/servlet/AxisServlet< /url-pattern>
  < /servlet-mapping>

  < servlet-mapping>
    < servlet-name>AxisServlet< /servlet-name>
    < url-pattern>*.jws< /url-pattern>
  < /servlet-mapping>

  < servlet-mapping>
    < servlet-name>AxisServlet< /servlet-name>
    < url-pattern>/services/*< /url-pattern>
  < /servlet-mapping>

  < servlet-mapping>
    < servlet-name>SOAPMonitorService< /servlet-name>
    < url-pattern>/SOAPMonitor< /url-pattern>
  < /servlet-mapping>

 < !-- uncomment this if you want the admin servlet -->
 < !--
  < servlet-mapping>
    < servlet-name>AdminServlet< /servlet-name>
    < url-pattern>/servlet/AdminServlet< /url-pattern>
  < /servlet-mapping>
 -->
    < session-config>
        < session-timeout>20< /session-timeout>
    < /session-config>
    < !-- currently the W3C havent settled on a media type for WSDL;
    http://www.w3.org/TR/2003/WD-wsdl12-20030303/#ietf-draft
    for now we go with the basic 'it's XML' response -->
  < mime-mapping>
    < extension>wsdl< /extension>
     < mime-type>text/xml< /mime-type>
  < /mime-mapping>

  < mime-mapping>
    < extension>xsd< /extension>
    < mime-type>text/xml< /mime-type>
  < /mime-mapping>

  < welcome-file-list id="WelcomeFileList">
    < welcome-file>index.jsp< /welcome-file>
    < welcome-file>index.html< /welcome-file>
    < welcome-file>index.jws< /welcome-file>
  < /welcome-file-list>
< /web-app>
可参照“axis-1_4\webapps\axis\WEB-INF\web.xml”进行配置;
4、编写服务端程序server,SayHello.java,编译server.SayHello.java
package server;
public class SayHello
{
    public String getName(String name)
    {
        return "hello "+name;
    }
}
5、编写wsdd文件
deploy.wsdd文件内容如下:
< deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
 < service name="SayHello" provider="java:RPC">
  < parameter name="className" value="server.SayHello.getName"/>
  < parameter name="allowedMethods" value="*"/>
  < parameter name="scope" value="session"/>< !-- request, session, or application -->
 < /service>
< /deployment>
6、把工程发布到Tomcat并启动Tomcat;
7、发布服务
编辑一个deploy.bat,Axis_Lib为axis.jar路径。内容如下:
set Axis_Lib=.\lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Axis_Servlet=http://localhost:8080/AxisTest/servlet/AxisServlet
%Java_Cmd% org.apache.axis.client.AdminClient -l%Axis_Servlet% deploy.wsdd

执行这个批处理文件,这时候,如果提示成功的话,访问http://localhost:8080/AxisTest/servlet/AxisServlet或http://localhost:8080/AxisTest/services就会显示服务列表。
8、生成客户端client stub文件
在浏览器上访问服务器端的服务,可以下载到WSDL文件,通过Axis的相关工具,可以自动从WSDL文件中生成Web Service的客户端代码。
编写一个WSDL2Java.bat文件,其内容如下:
set Axis_Lib=.\lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Output_Path=.\src
set Package=server.com
set wsdl_path=http://localhost:8080/AxisTest/services/ SayHello?wsdl
%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% %wsdl_path%

执行这个批处理文件就可以生成client stub.
  生成的stub client文件列表为:SayHello.java,SayHelloService.java,SayHelloServiceLocator.java,SayHelloSoapBindingStub.java .
9、编写客户端程序,编译并执行
1)、Stubs方式
下面是一段junit测试客户端代码。
import java.net.URL;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
public class TestWSClient extends TestCase {
    public TestWSClient(String string) {
        super(string);
    }
    public void SayHelloClient() throws Exception {
        SayHelloService service = new SayHelloServiceLocator();
        SayHello_PortType client = service.getSayHello() ;
        String retValue = client.getName("clientname");
        System.out.println(retValue);
    }
    public static Test suite() {
        TestSuite suite = new TestSuite();
        suite.addTest(new TestWSClient("SayHelloClient"));
        return suite;
    }
}
2)、动态调用方式:
try {
           // Options options = new Options(args);
           
            String endpointURL = "http://localhost:8080/AxisTest/services/SayHello";
           
            Service  service = new Service();
            Call     call    = (Call) service.createCall();
            call.setTargetEndpointAddress( new java.net.URL(endpointURL) );
            call.setOperationName( new QName("SayHello", "getName") );
            String res = (String) call.invoke( new Object[] {"Jack"} );
            System.out.println( res );
        } catch (Exception e) {
            System.err.println(e.toString());
        }

接下来如果有时间,我再考虑写一些Axis的高级特性. 
     (责任编辑:包春林)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· 开发框架:利用STRUTS实现国际化支持 (12-24) · JSP/Servlet:Java中调用ORACLE存储过程 (12-24)
· JAVA连接ACCESS数据库代码 易错的地方 (12-24) · 进阶:JBoss下的EJB3开发无状态会话Bean (12-24)
· 热点关注:深入浅析关于批处理文件内幕 (12-24) · Java基础:高手解析Java实现中文排序 (12-24)
· JAVA基础:Java异常处理的特殊情况分析 (12-24) · J2SE综合:高手帮你全面理解初始化顺序 (12-24)
· 开发框架:一篇关于SSH架构的简单总结 (12-24) · J2SE综合:JAVA正则表达式4种常用功能 (12-24)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 中小企业网站建设存在弊端 手机实名推波助澜
· CIO应如何克服三个关键错误信念 CIO委屈定理
· 五条黄金准则能够让CIO巧妙加薪 CIO焦虑调查
· 网上书店解决方案 深圳边检指挥中心ITSM项目
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统