- 浏览: 258221 次
- 性别:
- 来自: 多伦多
文章分类
- 全部博客 (127)
- Java 基础 (46)
- Java EE (3)
- Clouds (1)
- Spring 编程 (7)
- Spring Batch 编程 (1)
- Quartz 编程 (9)
- Seam 编程 (4)
- Hibernate 编程 (1)
- JSF 编程 (3)
- jQuery 编程 (3)
- Interview Question 汇总 (3)
- 日常应用 (3)
- Maven 编程 (2)
- WebService 编程 (10)
- Scala 编程 (5)
- Coherence 编程 (8)
- OO 编程 (1)
- Java 线程 (6)
- DB 编程 (2)
- WebService 安全 (4)
- Oracle Fusion 编程 (2)
- JavsScript/Ajax 编程 (1)
最新评论
-
chainal:
赞,说的很好
Scala 有趣的Trait -
wuliupo:
RRRR-MM-DD HH24:MI:SS
如何让Oracle SQL Developer显示的包含在日期字段中的时间 -
pengain:
...
使用Spring Roo ,感受ROR式的开发 -
zeng1990:
def getPersonInfo() = {
(&quo ...
Java 的继位人? - Scala简介 -
zeng1990:
我使用的是2.9.2版本的!
Java 的继位人? - Scala简介
http://hanyexiaoxiao.iteye.com/blog/479094
工程应用当中的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文件里面加入你的业务代码了
发表评论
-
AXIS第五课:AXIS高级应用,在AXIS服务间传递javabean及安全解决方案
2010-11-25 08:07 1080http://hanyexiaoxiao.iteye ... -
AXIS第四课:AXIS高级应用,建立安全的AXIS服务
2010-11-25 08:07 1418http://hanyexiaoxiao.iteye ... -
AXIS第三课:AXIS高级应用,使用Handler来增强web服务的功能
2010-11-25 08:06 1119http://hanyexiaoxiao.iteye ... -
AXIS第一课:最简单的AXIS发布webservice
2010-11-25 08:05 1642http://hanyexiaoxiao.iteye ... -
Axis2 WS-Security 基础
2010-11-25 08:04 3900(From: http://reeboo.iteye ... -
wss4j和axis2实现WS-Security
2010-11-25 08:02 1279一、wss4j简介 Wss4j是apache开 ... -
AXIS2中OMElement和Java对象之间的转换 分享
2010-11-25 08:01 1163转自 http://hanyexiaoxiao.itey ... -
Handler and Phase in Apache Axis2
2010-11-25 06:31 1588转自 http://www.packtpub.com ... -
设计与开发 JAX-WS 2.0 Web 服务
2010-11-25 06:29 1156转自 http://www.ibm.co ...
相关推荐
1.2 AXIS第二课:工程应用中的AXIS的发布方法Stub 1.3 AXIS第三课:AXIS高级应用,使用Handler来增强Web服务的功能 1.4 AXIS第四课:AXIS高级应用,建立安全的AXIS服务 1.5 AXIS第五课:AXIS高级应用,在AXIS服务...
(第二十二天)万能框架spring(四)使用struts2 (第二十三天)maven与ant的奇妙整合 (第二十四天)之Oracle性能调优-朝拜先知之旅 (第二十五天)SSH的单元测试与dbunit的整合 (第二十六天)漫谈架构与设计文档的...
(第二天)之apache tomcat https应用 (第三天)之apache性能调优 (第四天)之Tomcat性能调优-让小猫飞奔 (第五天)之tomcat集群-群猫乱舞 (第六天)之漫谈基于数据库的权限系统的设计 (第七天)之漫谈使用...
该手册为全套手册的第三部分,介绍了西门子 SIMOTION 运动 控制器的基本组态、调试、编程与常用运动控制命令。 目 目目 目 录 录录 录 一 一一 一、 、、 、SIMOTION 概述 ...........................................
下午突然想研究下WEBSERVICE,从网上找了好多实例,但很多写的让人实在难以恭维,花了三个小时的圈圈转后总算搞通了,其实也... 二:然后写wsdd 文件(注:其实这里真的不用,可以跳过第二步)为了生成这个文件:serve
Linux 系统下的蓝牙协议栈,应用在不同的设备和领域中。 BlueZ 是 Linux 的官方蓝牙协议栈,也是目前应用最广 泛的协议栈,几乎支持所有已通过认证的蓝牙设备。对于基 于主机的蓝牙应用,目前常见的硬件接口有 UART...
在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...
在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...
在工作工程中,通过最直观的图形和参数再现方式,可以让 客户对每台机器人的工作状态做到最理想的监控和维护。 本码垛机器人通过对机械各部件模块和柔性化、程序和软件智能化的设计,可以实现 一机器人单流水线单剁...
在工作工程中,通过最直观的图形和参数再现方式,可以让 客户对每台机器人的工作状态做到最理想的监控和维护。 本码垛机器人通过对机械各部件模块和柔性化、程序和软件智能化的设计,可以实现 一机器人单流水线单剁...
因此,对于光学设计者来说,使第二和第三反射镜离轴是一个不错的选择。 但是,离轴变焦光学系统的对准存在两个问题。 首先,塞德尔像差理论不适用于没有旋转对称性的系统。 其次,很难控制缩放时的未对准状态。 ...