工程应用当中的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文件里面加入你的业务代码了。
分享到:
相关推荐
2. **AXIS第二课:工程应用中的AXIS发布方法Stub** 这一课将介绍如何在实际工程中发布Web服务。Stub是客户端用来调用服务的代理类,通过Axis的wsdl2java工具,可以从WSDL文件自动生成服务接口和Stub。这使得客户端...
在IT行业中,Web服务是一种允许不同应用程序之间进行通信和数据交换的技术。Axis1是一个流行的开源SOAP(简单对象访问协议)工具包,它被广泛用于创建和使用Web服务。本示例将详细介绍如何使用Axis1生成Stub客户端,...
这篇博客“Axis2的发布和生产stub的操作”将深入探讨如何使用Axis2来发布服务以及生成客户端Stub,这对于理解Web服务的开发流程至关重要。 首先,让我们了解一下Axis2。它是Apache软件基金会开发的一个开源项目,...
标题中的“Axis1 stub方式配置Web服务”是指在使用Apache Axis1这个开源SOAP库时,通过生成Stub(存根)类来与Web服务交互的方法。Apache Axis1是Java平台上广泛使用的Web服务框架,它允许开发者消费和发布Web服务。...
### Axis使用Stub方式开发Webservice知识点详解 #### 一、概述 在当今信息化时代,Web服务作为实现系统间通信的一种重要手段,在企业级应用中扮演着至关重要的角色。Apache Axis作为一个开源的Java库,提供了简单...
Axis2是Apache Axis的第二代版本,它在第一代的基础上进行了许多改进和优化,提供了更高效、灵活的Web服务解决方案。Axis2基于模块化设计,允许用户按需选择功能,从而降低了内存占用和提高了性能。它支持多种协议,...
Axis2是第二代Apache Axis,是一个高度模块化和高性能的Web服务引擎。它支持SOAP 1.1、SOAP 1.2、RESTful风格的服务,并可以与多种传输协议(如HTTP、JMS等)集成。 3. **发布Web服务**: 使用Axis2发布Web服务...
Apache Axis2是Apache SOAP(Simple Object Access Protocol)引擎的第二代产品,它提供了高性能、可扩展性和灵活性。Axis2基于模块化架构,支持多种消息传输协议,如HTTP、SMTP等,以及多种数据格式,如SOAP、...
在IT行业中,Web服务是应用程序之间进行通信的一种标准方法,而Axis2是Apache软件基金会开发的一个Web服务框架,专门用于创建和消费Web服务。本文将深入探讨如何使用Axis2客户端调用WebService接口,并且会特别关注...
Axis2是Apache Axis的第二代版本,提供了更高级的功能,包括模块化架构、消息传递模型、多协议支持等。它的核心部分负责处理SOAP消息,而可插入的模块则处理各种协议和格式,如REST、MTOM(Message Transmission ...
- 二进制包 (`axis2-1.4.1-bin.zip`) 包含了 Axis2 运行时环境,而 WAR 文件 (`axis2-1.4.1-war.zip`) 可以用于在应用服务器(如 Tomcat)上部署 Axis2。 2. **部署 Axis2 在 Tomcat** - 将下载的 WAR 文件放到 ...
在IT行业中,Web服务是一种基于网络的通信协议,允许不同应用程序之间进行数据交换。而Axis是Apache软件基金会开发的一个开源工具,它主要用于Java环境中创建和部署Web服务。本篇文章将详细探讨如何使用Axis来实现...
1.包含Axis1生成web服务的客户端stub类的所有jar包。 2.至于如何使用Axis1生成stub类型的客户端,请参考我的CSND博客,地址为http://blog.csdn.net/larry_lv/article/details/6708003
1. 使用Stub(存根):Axis会根据WSDL文件生成客户端存根类,通过实例化存根并调用其方法来访问服务。 2. 直接使用SOAP请求:如果对SOAP消息格式熟悉,也可直接构造SOAP请求,通过HTTP POST发送到服务地址。 六、...
AXIS发布WebService是一个在IT行业中常见的任务,尤其在企业级应用集成或Web服务开发中扮演着重要角色。AXIS是一个开放源码的Java库,它提供了用于创建、部署和使用Web服务的工具和API。本篇文章将深入探讨AXIS如何...
4. **服务部署**:`org.apache.axis.jar`中的类用于处理服务的部署,包括解析WSDL文件,生成服务处理逻辑,以及将服务发布到应用服务器上。 5. **客户端调用**:对于Web服务的消费者,Axis提供了解析WSDL并生成...
【标题】"Axis2示例工程"是一个展示如何在Java环境中使用Axis2和Spring框架来构建Web服务的应用实例。这个项目旨在帮助开发者理解和实践WebService的创建、部署以及调用过程,特别是结合了流行的Spring框架,使得...
2. 编写客户端应用程序:利用生成的Java stubs,实例化服务代理并调用所需方法。例如: ```java YourServiceStub stub = new YourServiceStub("http://your-service-url"); YourServicePortType port = stub....
本实例主要探讨了使用Axis进行SOAP Web服务发布的三种方法以及如何进行调用。 1. **命令行发布(Axis Ant Task)** Axis提供了Ant任务来发布Web服务。首先,你需要在项目中集成Ant构建工具,并将Axis的库文件添加...
在“最新axis2实例.rar”中,你可能还会发现关于这些模块的使用示例,帮助你理解和应用它们。 **总结** Axis2是强大的Web服务框架,适用于快速开发和部署SOAP服务。通过这个实例,你可以学习到如何配置和管理Axis2...