`
ufopw
  • 浏览: 160285 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

AXIS第二课:工程应用中的AXIS的发布方法Stub

    博客分类:
  • Axis
阅读更多
工程应用当中的web service的参数和通回值通常都是一个数据Bean类,因此前面介绍的两种发布AXIS的web service方法在工程应用当中并不多见,下面介绍Stub发布方法,开发步骤如下:

1,编写服务端程序UserEndpoint.java

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.springframework.remoting.jaxrpc.ServletEndpointSupport;

import com.miracle.dm.framework.organization.dao.hibernate.UserHibernateDAO;
import com.miracle.dm.framework.organization.model.User;

public class UserEndpoint extends ServletEndpointSupport{
protected Logger logger = LogManager.getLogger(UserEndpoint.class);
private UserHibernateDAO userHibernateDAO;

protected void onInit(){
   userHibernateDAO = (UserHibernateDAO)getWebApplicationContext()
                             .getBean("userHibernateDAO");

}

/**
* 增加User到数据库
*
* @return 返回新增加的数据的ID,失败返回字符串“FAILED”
*/
public String addUser(User user){
   try{
    String rev = userHibernateDAO.addUser(user);
    return rev;
   }catch(Exception e){
    logger.error("use web service to add user failed , user Name is : " + user.getName_());
    return "FAILED";
   }
}

/**
* 从数据库删除User
*
* @return 删除成功返回字符串“OK” ,失败返回字符串“FAILED”
*/
public String delUser(String userId){
   try{
    userHibernateDAO.delUser(userId);
    return "OK";
   }catch(Exception e){
    logger.error("use web service to delete user failed , user Id is : " + userId);
    return "FAILED";
   }
 
}

/**
* 将参数中的数据更新到数据库
*
* @return 成功返回字符串“OK”,失败返回字符串“FAILED”
*/
public String updateUser(User user){
   try{
    userHibernateDAO.updateUser(user);
    return "OK";
   }catch(Exception e){
    logger.error("use web service to update user failed , user Id is : " + user.getID_());
    return "FAILED";
   }
}
}

2,将Axis集成到工程当中

在工程的web.xml配置文件中加入以下AXIS配置:此配置加在<web-app>节点下。

<!-- AXIS配置 -->
    <listener>
        <listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</listener-class>
    </listener>
   
<servlet>
    <servlet-name>AxisServlet</servlet-name>
    <display-name>Apache-Axis Servlet</display-name>
    <servlet-class>
        org.apache.axis.transport.http.AxisServlet
    </servlet-class>
</servlet>

<servlet>
    <servlet-name>AdminServlet</servlet-name>
    <display-name>Axis Admin Servlet</display-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>
    <display-name>SOAPMonitorService</display-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>
        <!-- Default to 5 minute session timeouts -->
        <session-timeout>5</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>

3,编写wsdd文件

  deploy.wsdd文件,此文件跟上面的类文件放在同一个包下,内容如下:

<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="UserEndpoint" provider="java:RPC">
<parameter name="className" value="UserEndpoint"/>
<parameter name="allowedMethods" value="*"/>
</service>
</deployment>

4、发布服务:

 在DOS下转换目录到上面的包目录,执行以下命令:

java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd

你会发现目录下多了一个server-config.wsdd文件,这就是AXIS的配置文件,以后所有的服务发布描述都会在里面找到。(当然你可以不用写deploy.wsdd,而是直接创建并修改它,以后新加入的web service也可以在里面添加而不用执行以上命令)。

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">
<handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>
<service name="Document" provider="java:RPC">
<parameter name="className" value="com.miracle.dm.service.DocumentEndpoint"/>
<parameter name="allowedMethods" value="*"/>  
       
<beanMapping qname="ns:DocumentInfo" xmlns:ns="urn:beanservice"
             languageSpecificType="java:com.miracle.dm.doc.document.model.DocumentInfo"/>
    <beanMapping qname="ns:DocExtpropInfo" xmlns:ns="urn:beanservice"
             languageSpecificType="java:com.miracle.dm.doc.document.model.DocExtpropInfo"/>
            
    <beanMapping qname="ns:DocAttachmentInfo" xmlns:ns="urn:beanservice"
             languageSpecificType="java:com.miracle.dm.doc.document.model.DocAttachmentInfo"/>
            
    <beanMapping qname="ns:DoccatRelatInfo" xmlns:ns="urn:beanservice"
             languageSpecificType="java:com.miracle.dm.doc.document.model.DoccatRelatInfo"/>
            
    <typeMapping qname="ns:DataHandler" xmlns:ns="urn:beanservice"
          languageSpecificType="java:javax.activation.DataHandler"
          serializer="org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory"
          deserializer="org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory"
          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
                  
</service>

<transport name="http">
<requestFlow>
<handler type="URLMapper"/>
</requestFlow>
</transport>

</deployment>

其中的beanmapping节点都是在此服务中应用到的Bean的配置。

此时你访问http://localhost:8080/工程名/services就可以看到此工程发布的所有的web service

5,生成客户端client stub文件

  在浏览器上访问服务器端的服务,可以下载到User.wsdl文件,保存到E盘,通过Axis的相关工具,可以自动从WSDL文件中生成Web Service的客户端代码。

  编写一个WSDL2Java.bat文件,其内容如下:

set Axis_Lib=D:\software\Axis\axis-bin-1_4\axis-1_4\lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Output_Path=D:\project\MiracleDataManager\src
set Package=com.miracle.dm.service.client
%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% User.wsdl
cmd

  注意,.bat文件中的路径不能有空格和中文字符,执行这个批处理文件就可以生成client stub.

  生成的stub client文件列表为:GenericValue.java,User.java,UserEndpoint.java,UserEndpointService.java,UserEndpointServiceLocator.java,UserSoapBindingStub.java

5,客户端调用例子

这里我使用Junit来测试:

package com.miracle.dm.service.test;

import com.miracle.dm.service.client.User;
import com.miracle.dm.service.client.UserEndpoint;
import com.miracle.dm.service.client.UserEndpointService;
import com.miracle.dm.service.client.UserEndpointServiceLocator;

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

public class TestUserClient extends TestCase {

    public TestUserClient(String string) {
        super(string);
    }

    public void addUser() throws Exception {
   
        UserEndpointService service = new UserEndpointServiceLocator();
        UserEndpoint client = service.getUser();
        User user = new User();
        user.setClass_("U");
        user.setName_("annlee");
        user.setEmail_("1@163.com");
        user.setSeq_(65546);
        user.setPassword_("password");
        user.setEnabled_("Y");
        user.setDisplayname_("李飞虎");
        user.setDomain("100");
        user.setMobile("12345");
        String retValue = client.addUser(user);
        System.out.println(retValue);

    }
   
    public void updateUser() throws Exception{
    UserEndpointService service = new UserEndpointServiceLocator();
        UserEndpoint client = service.getUser();
        User user = new User();
        user.setID_("402880ea1b447d08011b447e3e880002");
        user.setClass_("U");
        user.setName_("annlee");
        user.setEmail_("345@163.com");
        user.setSeq_(65546);
        user.setPassword_("password");
        user.setEnabled_("Y");
        user.setDisplayname_("李飞虎");
        user.setDomain("100");
        user.setMobile("12345");
        String retValue = client.updateUser(user);
        System.out.println(retValue);
    }
   
    public void delUser() throws Exception{
    UserEndpointService service = new UserEndpointServiceLocator();
        UserEndpoint client = service.getUser();
        String retValue = client.delUser("402880ea1b447d08011b447e3e880002");
        System.out.println(retValue);
    }

    public static Test suite() {
        TestSuite suite = new TestSuite();
//      suite.addTest(new TestUserClient("addUser"));
   //     suite.addTest(new TestUserClient("updateUser"));
        suite.addTest(new TestUserClient("delUser"));
        return suite;
    }
}

至此,整个服务器端和客户端的Web Service框架代码就完成了,剩下的就是在UserEndpoint.java文件里面加入你的业务代码了。
分享到:
评论

相关推荐

    Webservice之Axis高级编程

    1.2 AXIS第二课:工程应用中的AXIS的发布方法Stub 1.3 AXIS第三课:AXIS高级应用,使用Handler来增强Web服务的功能 1.4 AXIS第四课:AXIS高级应用,建立安全的AXIS服务 1.5 AXIS第五课:AXIS高级应用,在AXIS服务...

    使用axis1生成stub客户端样例

    主要包含了使用Axis1生成stub客户端的样例。

    Axis使用Stub方式开发Webservice只要看这个

    Axis使用Stub方式开发Webservice只要看这个,十分钟包你学会!!!

    Axis1生成调用web服务的stub客户端所需jar包

    1.包含Axis1生成web服务的客户端stub类的所有jar包。 2.至于如何使用Axis1生成stub类型的客户端,请参考我的CSND博客,地址为http://blog.csdn.net/larry_lv/article/details/6708003

    Axis2的发布和生产stub的操作

    NULL 博文链接:https://zongyukai20070419095606.iteye.com/blog/607014

    Axis1 stub方式配置webService

    NULL 博文链接:https://yyang1986321.iteye.com/blog/585875

    axis2的eclispe 插件

    axis2的eclispe插件分为2个,一个是帮助我们生成aar文件的,另一个是帮我们用wsdl文件生成stub代码的 官网下载地址是: ...

    Axis高级编程

    工程应用中的AXIS的发布方法Stub AXIS高级应用,使用Handler来增强Web服务的功能 AXIS高级应用,建立安全的AXIS服务 AXIS高级应用,在AXIS服务间传递JavaBean及其安全解决 使用TCPMonitor监控WebService SOAP消息

    axis2-1.5.3下载

    %AXIS2_HOME%\bin\wsdl2java -uri http://localhost/axis2/services/Hello?wsdl -p client -s -o stub 其中-uri参数指定了wsdl文件的路径,可以是本地路径,也可以是网络路径。-p参数指定了生成的Java类的包名,-o...

    使用axis2发布WebService简单示例

    NULL 博文链接:https://songjianyong.iteye.com/blog/1920078

    axis-eclipse插件

    axis-eclipse插件,包括Axis2_Codegen_Wizard_1.3.0和Axis2_Service_Archiver_1.3.0,可以帮助生成webservices的.aar包,然后利用Axis2_Service_Archiver_1.3.0向导生成客户端stub,方便调用webservices。

    使用Axis2工具生成java服务端和客户端的命令

    NULL 博文链接:https://zhuenwei.iteye.com/blog/1358305

    axis2-eclipse

    axis2的eclispe插件分为2个,一个是帮助我们生成aar文件的,另一个是帮我们用wsdl文件生成stub代码的。 下载完2个压缩文件后,可以直接把解压后的文件拷贝到plugins目录中,也可以在links目录中写文件路径的方式来...

    通过soapui生成stub类

    通过intellij,soapui生成axis的stub类

    axis2入门学习程序

    用于入门学习axis2,部署好即可用! //初始化文件 AxisProjectStub stub = new AxisProjectStub(); AxisProjectStub.Showname request = new AxisProjectStub.Showname(); request.setName("张三"); String name =...

    (原创)用Eclipse + Axis2+Tomcat创建Web Service

    二、 Web Service服务器端的发布。 2.1 创建java类。 2.2 创建services.xml。 2.3 发布服务。 2.4 在浏览器上测试服务。 三、 Web Service 客户端的创建。 3.1 创建WSDL文件。 3.2 利用WSDL创建stub。 3.3 利用stub...

    axis2-wsdl2code-maven-plugin-1.5.6-javadoc.jar

    标签:axis2-wsdl2code-maven-plugin-1.5.6-javadoc.jar,axis2,wsdl2code,maven,plugin,1.5.6,javadoc,jar包下载,依赖包

    axis2调用的ECLIPSE插件

    用于生成调用AXIS2发布的WEBSERVICE服务,自动生成STUB类。非常实用,生成STUB类后,需要在工程中加入AIXS2的相关JAR包才能调用服务。

    AXIS入门指南-webservice

    我自己编写的axis入门指南,真实的记录了我第一次开发webservice的过程,包括如何得到开发资料,如何生成stub,服务器端代码,客户端测试用例,非常适合刚入门的开发webservice的程序员.一步一步地,过程非常详细.希望给您...

Global site tag (gtag.js) - Google Analytics