- 浏览: 121118 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
awdxzc:
还能更复杂一点?
Ehcache缓存配置 -
polaris1119:
请问,用ibatis + postgreSQL,存储过程出入一 ...
postgre存储过程简单实用方法 (过程语言: PL/pgSQL) -
foxty:
name like '%'+?+'%'
这样不必对参数再进 ...
PreparedStatement 使用like 模糊查询 -
manjingtou:
呵呵,我用的就是8.3但是我没有使用 application ...
POSTGIS常用函数 -
MegRyan:
我数据库里面有754个 但是没有AddGeometryColu ...
POSTGIS常用函数
这段时间重构一下原来的代码,把东西整理一下。这个为AXIS的整理
webService 是一种基于http协议的组件
webService 开发框架:AXIS(Apache eXtensible Interaction System),xFire,
WSDD就是WEB服务分布描述(Web Service Deployment Descriptor), 它定义了WEB服务的接口,如服务名、提供的方法、方法的参数等信息。
AXIS 发布的两种方式
一,即时发布 jws java web service 只要把.java 文件改成.jws文件,发布就可以了,但是不支持带包类
二,定制发布 wsdd web service Deployment Descriptor 这个发布需要配置文件server-config.wsdd文件
针对AXIS集成到Spring 的项目中。
一个简单的AXIS应用
1, 需要的jar 包
activation.jar
axis.jar
axis-ant.jar
commons-discovery.jar
commons-logging.jar
jaxrpc.jar
log4j-1.2.15.jar
mail.jar
wsdl4j.jar
spring.jar
.......
这里其他包就省略了
我用的框架是struts2+spring +.....
2, web.xml配置
<!-- axis webservice配置 start--> <servlet> <servlet-name>AdminServlet</servlet-name> <!-- <display-name>Axis Admin Servlet</display-name> --> <servlet-class> org.apache.axis.transport.http.AdminServlet </servlet-class> </servlet> <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> SOAPMonitorService </servlet-name> <!-- <display-name>SOAP Monitor Service</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> </servlet> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>*.jws</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>SOAPMonitorService</servlet-name> <url-pattern>/SOAPMonitor</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AdminServlet</servlet-name> <url-pattern>/servlet/AdminServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/servlet/AxisServlet</url-pattern> </servlet-mapping> <!-- axis webservice配置 end-->
3,定制webservice 服务端接口
(1) 接口类
package com.ot.test.service; import java.util.HashMap; import java.util.List; /** * 统一对外服务接口 * */ public interface ITest { public String test() throws Exception; }
(2)接口实现类
package com.ot.test.service; import java.util.HashMap; import java.util.List; /** * 统一对外服务接口 * */ public class TestImpl implements ITest { //todo private ITestDAO testDao; public String test() throws Exception { //todo 调用DAO testDao.test(); } }
这里针对DAO 就不在描述了,这个服务只是一个业务接口。
(3)定义一个针对Webservice 服务的接口实现
在 Spring 中对 Web Service 进行封装很简单,仅仅需要继承
org.springframework.remoting.jaxrpc.ServletEndpointSupport 类,实现里面的一些方法,包装一次,将其发布出来就可以。
package com.ot.test.service; import java.util.HashMap; import java.util.List; /** * 统一对外服务接口 * */ public class TestImplAdaptor extends ServletEndpointSupport implements ITest { //todo private ITest test; public String test() throws Exception { //todo 调用test test.test(); } }
以上已经定义好了服务端接口,下面需要对AXIS WEBSERVICE进行部署
(4)下面的部署我采用了ant 来部署的 ,其中一个重要的包axis-ant.jar现在需要了。
<?xml version="1.0" encoding="UTF-8" ?> <project name="testclient" default="tojar" basedir="../wsdl"> <property name="wsdl" value="test.wsdl" /> <path id="classpath"> <fileset dir="../WEB-INF/lib" includes="*.jar,*.zip" /> <fileset dir="D:\tomcat6.0\lib" includes="*.jar,*.zip" /> </path> <target name="copy" > <copy todir="${basedir}/test/src"> <fileset dir="../../src"> <include name="**\*.java" /> </fileset> </copy> </target> <!-- **********************************编译********************************** --> <target name="compile" description="Compile Java sources" depends="copy"> <javac srcdir="${basedir}/test/src" destdir="${basedir}/test/classes" optimize="yes" encoding="utf-8"> <classpath refid="classpath" /> <compilerarg value="-Xlint:none" /> </javac> </target> <target name="axis" depends="compile"> <taskdef resource="axis-tasks.properties" classpathref="classpath" /> <axis-java2wsdl classname="com.ot.service.ITest" location="http://localhost:8080/services/testService" namespace="http://service.ot.com" output="${wsdl}" style="RPC"> <classpath> <pathelement path="${basedir}/opf/classes" /> </classpath> </axis-java2wsdl> <axis-wsdl2java all="true" url="${wsdl}" deployscope="Request" output="${basedir}/client" serverside="true" skeletondeploy="false" testcase="true" noimports="false" typemappingversion="1.3"> </axis-wsdl2java> <delete file="${basedir}/client/service/ITestServiceLocator.java" /> <delete file="${basedir}/client/service/undeploy.wsdd" /> <delete file="${basedir}/client/service/deploy.wsdd" /> </target> <target name="tojar" depends="axis"> <javac destdir="${basedir}/classes" debug="on" optimize="on" classpathref="classpath"> <src path="${basedir}/client" /> </javac> <jar jarfile="../clientdate/testclient.jar"> <fileset dir="${basedir}/classes"> <include name="**/*.class" /> <exclude name="**/*Locator.class" /> </fileset> </jar> <delete dir="${basedir}/opf" /> </target> </project>
针对上面的ant build.xml文件要说明一下啊,整个过程就是把webservice中需要用到的实体对象,复制出来编译一下,提供给客户端使用webservice的用户。再webservice中复杂的对象,不是java基本类型的,wsdl无法直接转换,需要序列化。
这就是为什么要生成这个客户端,其中下面部分要重点说明一下,这也是这个部署的核心。通过axis-java2wsdl 是将webservice 接口生成相应的描述文件和客户端调用代码。执行后会多生成几个类,
ITest.java,ITestService.java,ITestServiceLocator.java,ITestSoapBindingStub.java ,以及undeploy.wsdd 和deploy.wsdd 以及test.wsdl 三个配置文件 但是我会把ITestServiceLocator.java 会删除了,原因是我在服务端自己定义了一个这样的类,目的是我可以自己修改服务单的地址,这样对于开发而言服务端地址改变不需要重新生成客户端代码。 undeploy.wsdd 和deploy.wsdd 两个文件是部署和取消部署的文件,这里我也不他们删除,我要手动定义这个文件
<target name="axis" depends="compile">
<taskdef resource="axis-tasks.properties" classpathref="classpath" />
<axis-java2wsdl classname="com.ot.service.ITest" location="http://localhost:8080/services/testService" namespace="http://service.ot.com" output="${wsdl}" style="RPC">
<classpath>
<pathelement path="${basedir}/opf/classes" />
</classpath>
</axis-java2wsdl>
<axis-wsdl2java all="true" url="${wsdl}" deployscope="Request" output="${basedir}/client" serverside="true" skeletondeploy="false" testcase="true" noimports="false" typemappingversion="1.3">
</axis-wsdl2java>
<delete file="${basedir}/client/service/ITestServiceLocator.java" />
<delete file="${basedir}/client/service/undeploy.wsdd" />
<delete file="${basedir}/client/service/deploy.wsdd" />
</target>
(5)服务器部署配置文件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="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl" /> <parameter name="disablePrettyXML" value="true" /> <parameter name="sendXsiTypes" value="true" /> <parameter name="sendMultiRefs" value="true" /> <parameter name="sendXMLDeclaration" value="true" /> <parameter name="axis.sendMinimizedElements" value="true" /> <parameter name="dotNetSoapEncFix" value="true" /> <parameter name="enableNamespacePrefixOptimization" value="false" /> <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="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder" /> <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper" /> <handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" /> <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="test" provider="java:RPC" style="rpc" use="encoded"> <parameter name="allowedMethods" value="*" /> <parameter name="scope" value="Request" /> <parameter name="className" value="com.ot.service.impl.TestImplAdaptor " /> <typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" qname="ns1:Object" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:java.lang.Object" xmlns:ns1="http://lang.java" /> <typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" qname="ns2:List" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:java.util.ArrayList" xmlns:ns2="http://util.java" /> <typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" qname="ns3:TestVO" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:com.ot.model.TestVO" xmlns:ns3="http://model.ot.com" /> </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> </deployment>
指定好部署文件服务端已经全部构建好了,下面我们来构建客户端
(6)客户端有两种方式
(6-1) 客户端直接调用Webservice,就不需要刚才生成的***Locator.java 和 ***SoapBindingStub.java....等
import java.net.MalformedURLException;
import javax.xml.rpc.ServiceException;
import javax.xml.namespace.QName;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class WSTestServiceClient{
public static void main(String []args){
Service service = new Service();
try {
Call call = (Call) service.createCall();
String url = http://localhost:8080/services/testService?wsdl;
QName qname = new QName(url,"test");
call.setOperationName(qname);
call.setTargetEndpointAddress(new java.net.URL(url));
String result = (String) call.invoke(new Object[]{});
System.out.println("===="+result);
} catch (Exception e) {
e.printStackTrace();
}
}
}
(6-2) 就是通过刚才客户端定义的***Locator.java 和 ***SoapBindingStub.java....等方法来调用
客户端同样也增加了一个使用WEB SERVICE的接口,这样的目的是代码结构更完整。具体接口不再说明。。
主要是相应的spring 配置。看如何调用相应的web service
<!-- 调用服务配置 -->
<bean id="testAdaptor" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="targetSource" ref="axistestPoolTargetSource" /> <!--<property name="interceptorNames"> <list> <value>methodCachePointCut</value> <value>methodCachePointCutAdvice</value> </list> </property> --> </bean> <bean id="axistestPoolTargetSource" class="org.springframework.aop.target.CommonsPoolTargetSource"> <property name="targetBeanName" value="axistestServiceImpl" /> <property name="maxSize" value="30" /> </bean> <bean id="axistestServiceImpl" class="com.ot.client.impl.TestServcieAdaptor" singleton="false"> <property name="testService"> <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean" > <property name="singleton"> <value>false</value> </property> <property name="targetObject"> <bean class="com.ot.client.ITestServiceLocator"> </bean> </property> <property name="targetMethod"> <value>getTestService</value> </property> </bean> </property> </bean>
发表评论
-
Comet4J实现推送服务
2015-03-03 11:13 0Comet4J实现推送服务 -
java web 导出excel
2012-11-03 12:44 1031看到这个标题,会很疑问,java导出excel 有很多文章呀, ... -
LIST合并单元格效果
2011-10-17 14:40 14071,在今天整理代码的时候,发现原来的一段代码,前台合并单元格。 ... -
hibernate 一对多集合 set查询问题
2011-08-19 17:20 1164今天解决了一个问题( ... -
hibernate lazy
2011-08-12 13:15 1216今天项目组有要使用的hibernate lazy的,我一直对这 ... -
struts2 泛型 Hibernate
2011-05-07 17:51 2818今天在整理代码的时候 ... -
org.apache.commons.beanutils.BeanUtils No value specified
2010-11-29 11:22 2109今天遇到一个问题,正如题目的在进行 form到 Bean的复制 ... -
Web Services
2010-11-25 16:12 952web 服务是通过标准的web协议可以访问的一个应用程序组件。 ... -
Cookie 和 Session
2010-10-25 17:07 803一、cookie机制和session机制的区别******** ... -
spring 常识2
2010-10-19 23:00 12631, Spring bean 定义 spring bean ... -
spring 常识1
2010-10-19 22:06 7711,实例化bean就Spring Io ... -
Ehcache分布式缓存
2010-08-19 19:44 2043Ehcache分布式缓存也是我一直比较较关注的,以前用过osc ... -
Ehcache缓存配置
2010-08-19 19:18 2106近期项目用到Ehcache,以前项目主要用到Oscache,并 ... -
hibernate 查询效率(1)
2010-02-24 16:47 1633相信越来越多的web开发者,在持久层都采用了hibernate ... -
servlet线程安全问题分析(网上整理)
2009-03-02 10:56 965这两天在整理些基础的资料,在网上看到了这篇文章Servlet/ ... -
httpclient (1)
2008-01-29 14:50 1157最近用到了HttpClient ,搜集的资料: HttpCl ... -
httpclient (2)
2008-01-29 14:55 1833根据以上步骤,我们来 ... -
spring ApplicationContext简单研究
2008-03-11 09:57 1406spring 研究装载配置文件 1,研究spring webA ... -
quartz在spring中的使用
2008-03-17 09:29 854(1)在spring 中的配置bean (1)在spring ... -
有关web效率
2008-03-18 10:10 11201)web开发的特点是是:没有太复杂的技术难点,一切在于迅速的 ...
相关推荐
Java Axis WebService 开发实例详解 在Java世界中,开发Web服务时,Axis是一个非常流行的开源工具,它允许开发者创建、部署和使用Web服务。本实例将深入探讨如何使用Axis来构建一个简单的Web服务,并进行调用。这个...
eclipse axis webservice 开发 eclipse下使用axis2 开发webservice系统
**Axis WebService 技术指南** Axis 是一个开源的 Web Service 框架,它允许开发者轻松地创建和部署 Web Services。本指南将详细介绍如何使用 Axis 进行 WebService 开发,包括从基础入门到高级特性的应用。 ### 1...
标题中的“Axis2 Axis WebService Web 服务”指的是Apache Axis2,它是一个强大的Web服务框架,主要用于构建和部署Web服务。Axis2是Apache SOAP(Simple Object Access Protocol)项目的第二代实现,专门设计用于...
【标题】"Axis WebService 实例源码"的解析与详解 在IT行业中,Web服务是一种重要的技术,它允许不同的应用程序之间通过网络交换数据。Apache Axis是Java平台上的一个开源工具,专门用于创建和部署Web服务。本实例...
Axis Webservice是一个基于Java的开源工具,用于创建和部署Web服务。它在IT行业中扮演着重要角色,特别是在软件开发和企业级应用集成中。本文将深入探讨Axis Webservice的工作原理、用途、安装与配置,以及如何使用...
AXIS WebService 是一个强大的工具,它允许开发者创建和使用基于SOAP(Simple Object Access Protocol)的Web服务。这个工具基于Apache Axis,一个开源的Java Web服务框架,它简化了服务接口的开发、部署和调用过程...
【标题】"Axis WebService 一看就懂" 涉及到的是关于使用Apache Axis工具进行Web服务开发的知识。Apache Axis是Java平台上的一个开源工具,它允许开发者创建和部署Web服务,同时也提供了客户端调用Web服务的能力。该...
【Axis Webservice 开发过程详解】 在Web服务领域,Axis是一个流行且强大的工具,用于创建和部署基于Java的Web服务。本文将详细讲解如何使用Axis进行Web服务开发,包括概念理解、环境准备、接口与实现类创建、配置...
本压缩包文件“axis webservice 开发需要的ZIP”提供了开发Web服务所必需的资源,特别是针对Axis框架的。以下是关于Axis Web服务开发的一些关键知识点: 1. **什么是Axis**: Axis是Java平台上广泛使用的Web服务栈...
在本文中,我们将深入探讨如何使用SpringBoot框架开发基于Axis的Web服务。SpringBoot以其便捷的启动和配置方式,已经成为Java开发中的首选框架之一。而 Axis 是一个流行的Apache项目,用于创建和部署Web服务,它提供...
### Axis WebService开发详解 #### 1. WebService概述 ##### 1.1 WebService简介 WebService技术允许程序跨网络边界进行透明通信,无需关心底层实现细节。一旦WebService公开其服务接口,远程客户端即可调用服务...
webService—Axis实例webService—Axis实例webService—Axis实例webService—Axis实例webService—Axis实例webService—Axis实例webService—Axis实例
【Axis WebService Demo】是一个用于演示如何使用Apache Axis在Web环境中创建和使用Web服务的示例项目。Apache Axis是开源的Java库,专门设计用于简化Web服务的开发、部署和消费,它支持SOAP(简单对象访问协议)和...
Java Axis WebService是一个基于Java平台的开源框架,用于创建和部署Web服务。它是由Apache软件基金会开发的,作为Java EE应用程序中的一个关键组件,用于实现服务导向架构(SOA)。在本项目中,"纯Java写的...
本资源集合了Axis进行Webservice开发所需的jar包,解决了开发者寻找这些依赖库的困扰。接下来,我们将详细讨论Axis、相关jar包以及它们在Web服务开发中的作用。 1. **Apache Axis**: Apache Axis是Apache软件基金会...
标题 "Axis Webservice Demo" 暗示了我们将探讨如何使用Apache Axis库创建和使用Web服务。Apache Axis是一个开源框架,专门用于构建基于SOAP(简单对象访问协议)的Web服务。这个Demo很可能是为了演示如何在Java环境...