- 浏览: 203872 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
gaoke_71:
[*]
Spring MVC_HandlerInterceptorAdapter的使用 -
q474818917:
[flash=200,200][flash=200,200][ ...
Spring MVC_HandlerInterceptorAdapter的使用 -
kisbo110:
java 代码只粘贴处了部分代码!要么你就别粘贴出来,要不就 ...
java直接打开pdf,doc,xls -
yjshengshe:
什么回显?图片不能显示了?那肯定是你后台的javabean没写 ...
可上传图片的htmlEditor -
ganqingde:
我试了,能上传,但不能回显,报错了
可上传图片的htmlEditor
axis 1.4在项目中的配置(以下所有路径和代码都是以本人电脑上的为示例)
Axis支持三种web service的部署和开发,分别为:
1、Dynamic Invocation Interface (DII)
2、Dynamic Proxy方式
3、Stubs方式
1 下载资源 axis1.4 jdk tomcat
axis的下载地址:http://mirror.vmmatrix.net/apache/ws/axis/1_4/axis-bin-1_4.zip
如果找不到,去http://ws.apache.org/axis/仔细找找。
jdk和tomcat的地址就不说了。
2 新建两个Dynamic Web project项目 axisServer(服务提供方) 和 axisClient(接口适用方)
axisServer项目空间:D:\新的开始\workspace\workspace1
axisClient项目空间:D:\新的开始\workspace\workspace2
3 在项目中搭建axis环境 axisServer和axisClient都需要配置
a:添加需要的架包(以下架包可能有些事不需要的,暂时还没整理)
1 解压axis-bin-1_4.zip 拷贝lib下jar包到项目WEB-INF/lib下
2 查找 javax.jms.jar
3 查找 mailapi.jar
4 查找 xmlsec-1.5.1.jar
5 查找以上三个架包,并添加到项目WEB-INF/lib下
b:配置web.xml文件
1 在web.xml中添加以下配置 axisServer和axisClient都需要配置
<servlet>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>
org.apache.axis.transport.http.AxisServlet
</servlet-class>
</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>
4 axisServer发布服务
a 编写服务类结构如下
//domain对象
package com.server.domain;
public class Man {
private String name ;
private String age;
private int height;
public Man()
{
name = "sky";
age = "18";
height = 100;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
}
//service对象
package com.server.service;
import com.server.domain.Man;
public class LoveService {
public Man grow(Man man)
{
man.setHeight(man.getHeight()+1);
return man;
}
}
b 编写wsdd文件 deploy.wsdd 个人设定路径:WEB-INF/deploy.wsdd
<!-- 发布文件 -->
<deployment
xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="loveService" provider="java:RPC">
<parameter name="className" value="com.server.service.LoveService"/>
<parameter name="allowedMethods" value="*" />
<beanMapping qname="myNS:Man" xmlns:myNS="urn:LoveService"
languageSpecificType="java:com.server.domain.Man"/>
</service>
</deployment>
c 编写发布.bat文件 deploy.bat 个人设定路径:WEB-INF/deploy.bat
set Axis_Lib=D:\新的开始\workspace\workspace1\axisServer\WebContent\WEB-INF\lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Axis_Servlet=http://localhost:8080/axisServer/servlet/AxisServlet
%Java_Cmd% org.apache.axis.client.AdminClient -l%Axis_Servlet% deploy.wsdd
说明: Axis_Lib:项目中axis架包的路径
Java_Cmd:java驱动
Axis_Servlet:发布服务的访问路径
其中 /servlet/AxisServlet ,就是web.xml中配置的路径
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/servlet/AxisServlet</url-pattern>
</servlet-mapping>
两者路径要一致。
deploy.wsdd:发布服务的wsdd文件
d 发布服务
执行deploy.bat文件
deploy.bat文件,如果想看到结果,可以通过cmd来执行
发布服务时,项目必须启动,不然会报connection refused
5 查看服务
在浏览器中输入:http://localhost:8080/axisServer/servlet/AxisServlet
如果看到以下显示,则说明服务发布成功:
And now... Some Services
loveService (wsdl)
grow
AdminService (wsdl)
AdminService
Version (wsdl)
getVersion
点击 wsdl可以查看服务的wsdl文件,根据wsdl文件可以生成客户端代码
6 客户端访问
a 根据wsdl文件生成客户端代码
访问服务器接口地址:http://localhost:8080/axisServer/servlet/AxisServlet
点击页面wsdl链接进入服务wsdl页面 右击/另存为/wsdl.xml
b 编写生成客户端代码.bat WEB-INF/WSDL2Java.bat
set Axis_Lib=D:\新的开始\workspace\workspace1\axisServer\WebContent\WEB-INF\lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Output_Path=D:\新的开始\学习笔记\axis学习
set Package=com.client
%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% wsdl.xml
说明:
Axis_Lib :axis架包路径
Java_Cmd : Java驱动
Output_Path :客户端代码生成路径
Package : 包路径
wsdl.xml : 服务wsdl文件
c 执行 WSDL2Java.bat文件,生成客户端代码
d 把客户端代码考到客户端项目中,也可以直接生成到客户端项目中,只要看Output_Path的路径。
e 客户端代码访问
客户端接口代码包 com.client
具体的代码就不写了,axis自动生成的没啥好写的
客户端service代码,如下
//////////////////////////////Dynamic Proxy方式
package com.service;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.ser.BeanDeserializerFactory;
import org.apache.axis.encoding.ser.BeanSerializerFactory;
import com.client.Man;
public class LoveClientService {
public static void main(String[] args)
{
try
{
/*service 服务地址*/
String serverUrl="http://localhost:8080/axisServer/services/loveService";
Man man = new Man();
man.setHeight(100);
Service service=new Service();
Call call=(Call)service.createCall();
QName qn=new QName("urn:loveService","Man");
call.registerTypeMapping(Man.class,qn,new BeanSerializerFactory(Man.class,qn),new BeanDeserializerFactory(Man.class,qn));
call.setTargetEndpointAddress(new URL(serverUrl));
call.setOperationName(new QName("loveService","grow"));
call.addParameter("arg1",qn,ParameterMode.IN);
call.setReturnClass(Man.class);
Man resultBean=(Man)call.invoke(new Object[]{man});
System.out.println(resultBean.getHeight());
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ServiceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//////////////////////////////Stub方式
package com.service;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.client.LoveService;
import com.client.LoveServiceServiceLocator;
import com.client.Man;
public class LoveClientServiceStub {
哌
/**
* @param args
* @throws RemoteException
*/
public static void main(String[] args){
// TODO Auto-generated method stub
try {
Man man = new Man();
man.setHeight(100);
LoveServiceServiceLocator locator = new LoveServiceServiceLocator();
LoveService service = locator.getloveService();
Man resultBean = (Man)service.grow(man);
System.out.println(resultBean.getHeight());
} catch (ServiceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
执行LoveClientService类main方法,可以看到控制台输出了101
即客户端生成了一个Man对象,设置体重 100
客户端调用服务端接口,服务端接受Man对象,并执行grow方法 ,Man体重增长了1
服务端返回Man对象
6 使用Handler
J2EE Web 服务中的Handler技术特点非常像Servlet技术中的Filter。说白了,就是监听器。
在Servlet中,当一个HTTP到达服务端时,往往要经过多个Filter对请求进行过滤,然后才到达提供服务的Servlet,
这些Filter的功能往往是对请求进行统一编码,对用户进行认证,把用户的访问写入系统日志等。
相应的,Web服务中的Handler通常也提供一下的功能:
对客户端进行认证、授权;
把用户的访问写入系统日志;
对请求的SOAP消息进行加密,解密;
为Web Services对象做缓存。
SOAP消息Handler能够访问代表RPC请求或者响应的SOAP消息。在JAX-RPC技术中,SOAP消息Handler可以部署在服务端,
也可以在客户端使用。
实现Handler,可以实现org.apache.axis.Handle接口。也可以继承org.apache.axis.handlers. BasicHandler。
BasicHandler中的(MessageContext msgContext)方法是Handler实现类必须实现的方法,
它通过MessageContext来获得请求或者响应的SOAPMessage对象,然后对SOAPMessage进行处理。
//日志handler
a 编写handler对象
包com.service.handler.LogHandler,主要功能:监听web服务被调用的次数。
package com.service.handler;
import org.apache.axis.AxisFault;
import org.apache.axis.Handler;
import org.apache.axis.MessageContext;
import org.apache.axis.handlers.BasicHandler;
/**
*
* @author Administrator
*
*/
public class LogHandler extends BasicHandler{
/**
*
*/
private static final long serialVersionUID = -2496628092698981957L;
@Override
public void invoke(MessageContext msgContext) throws AxisFault {
// TODO Auto-generated method stub
try {
String para = (String)getOption("para");
Handler handler = msgContext.getService();
Integer counts = (Integer)handler.getOption("counts");
if(counts == null)
{
counts = 0;
}
counts = counts + 1;
handler.setOption("counts", counts);
StringBuffer result = new StringBuffer(16);
result.append("web服务").append(msgContext.getTargetService());
result.append("共执行了").append(counts).append("次");
result.append("!系统参数para=").append(para);
System.out.println(result.toString());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw AxisFault.makeFault(e);
}
}
}
b 编写服务wsdd deploy.wsdd 服务添加日志Handler
<!-- 发布文件 -->
<deployment
xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="loveService" provider="java:RPC">
<parameter name="className" value="com.server.service.LoveService"/>
<parameter name="allowedMethods" value="*" />
<beanMapping qname="myNS:Man" xmlns:myNS="urn:LoveService"
languageSpecificType="java:com.server.domain.Man"/>
<!--添加Handler -->
<requestFlow>
<handler name="logHandler" type="java:com.service.handler.LogHandler">
<parameter name="para" value="sky" />
</handler>
</requestFlow>
</service>
</deployment>
c 调用deploy.bat重新发布服务
d 客户端检测,客户端每次调用web 接口,服务端控制台都会打印出如下信息:
web服务loveService共执行了1次!系统参数para=sky
web服务loveService共执行了2次!系统参数para=sky
//认证Handler 主要是axis自带的权限认证,估计没人用,因为测试了,所以带上吧
a 编写handler对象
包com.service.handler.AuthenticationHandler,主要功能:接口访问权限认证。
package com.service.handler;
import org.apache.axis.AxisFault;
import org.apache.axis.MessageContext;
import org.apache.axis.handlers.BasicHandler;
import org.apache.axis.security.AuthenticatedUser;
import org.apache.axis.security.SecurityProvider;
import org.apache.axis.security.simple.SimpleSecurityProvider;
/**
* 认证Handler
* @author Administrator
*
*/
public class AuthenticationHandler extends BasicHandler {
/**
*
*/
private static final long serialVersionUID = 1L;
String securityProvider = "securityProvider";
String unauthenticated = "unauthenticated";
String authenticatedUser = "authenticatedUser";
String cantAuth = "cantAuth";
@Override
public void invoke(MessageContext msgContext) throws AxisFault {
// TODO Auto-generated method stub
SecurityProvider provider = (SecurityProvider)msgContext.getProperty(securityProvider);
if (provider == null)
{
provider = new SimpleSecurityProvider();
msgContext.setProperty("securityProvider", provider);
}
if (provider != null)
{
String userId = msgContext.getUsername();
String pass = msgContext.getPassword();
AuthenticatedUser authUser = provider.authenticate(msgContext);
if (authUser == null)
{
throw new AxisFault(unauthenticated,"error", null, null);
}
//用户通过认证,把用户的设置成认证了的用户。
msgContext.setProperty(authenticatedUser, authUser);
}
}
}
b 编写服务wsdd deploy.wsdd 服务添加权限认证Handler
<!-- 发布文件 -->
<deployment
xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="loveService" provider="java:RPC">
<parameter name="className" value="com.server.service.LoveService"/>
<parameter name="allowedMethods" value="*" />
<beanMapping qname="myNS:Man" xmlns:myNS="urn:LoveService"
languageSpecificType="java:com.server.domain.Man"/>
<!--添加Handler -->
<requestFlow>
<!-- 权限认证 -->
<handler name="authen" type="java:com.service.handler.AuthenticationHandler"/>
<!-- 日志 -->
<handler name="logHandler" type="java:com.service.handler.LogHandler">
<parameter name="para" value="sky" />
</handler>
</requestFlow>
</service>
</deployment>
c
WSDD文件配置详解:
<!-- 发布文件 -->
<deployment
xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="loveService" provider="java:RPC">
<parameter name="className" value="com.server.service.LoveService"/>
<parameter name="allowedMethods" value="*" />
<beanMapping qname="myNS:Man" xmlns:myNS="urn:LoveService"
languageSpecificType="java:com.server.domain.Man"/>
<!--添加Handler -->
<requestFlow>
<handler name="authen" type="java:com.service.handler.AuthenticationHandler"/>
<handler name="logHandler" type="java:com.service.handler.LogHandler">
<parameter name="para" value="sky" />
</handler>
</requestFlow>
</service>
</deployment>
<deployment>
告诉Axis Engine 这是一个部署描述文件。一个部署描述文件可以表示一个
完整的engine配置或者将要部署到一个活动active的一部分组件。
<GlobalConfiguration>
用于控制engine范围的配置。可以包含如下子元素:
<parameter>:用来设置axis的各种属性,可以配置任意数量的参数元素。
<role> : 设置一个SOAP actor/role URI,engine可以对它进行识别。这允许指向这个role的SOAP
headers成功的被engine处理。任意数量.
<requestFlow> : 全局的请求Handlers。在调用实际的服务之前调用.
<responseFlow> : 全局响应Handlers,在调用完实际的服务后,还没有返回到客户端之前调用.
<requestFlow [name="name"] [type="type"] >
可以放置任意多个<handler> or <chain>在<requestFlow>中,但是可能只有一个<requestFlow>.
<responseFlow [name="name"] [type="type"] >
This is used to configure handlers in response flow.
You may put any number of <handler> or <chain> elements (see below) inside the <responseFlow>,
but there may only be one <responseFlow>.
<undeployment>
部署文档的根元素,用于指示Axis这是个卸载描述文件
<handler [name="name"] type="type">
位于顶层元素<deployment> or <undeployment>, or inside a <chain>, <requestFlow>, or <responseFlow>.
用于定义Handler,并定义handler的类型。"Type" 可以是已经定义的Handler或者是"java:class.name"形式的QName。
可选的"name"属性允许将这个Handler的定义在其他部署描述部分中引用。
可以包含任意数量的<parameter name="name" value="value">元素.
<handler name="logHandler" type="java:com.service.handler.LogHandler">
<parameter name="para" value="sky" />
</handler>
补充:
////生成服务端代码
set Axis_Lib=D:\新的开始\workspace\workspace1\axisServer\WebContent\WEB-INF\lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Output_Path=D:\新的开始\学习笔记\axis学习
set Package=com.server
%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% --server-side --skeletonDeploy true server.wsdl
////根据接口class文件生成wsdl文件
set Axis_Lib=D:\新的开始\workspace\workspace1\axisServer\WebContent\WEB-INF\lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
%Java_Cmd% org.apache.axis.wsdl.Java2WSDL -o server.wsdl -l"http://localhost:8080/axisServer/servlet/AxisServlet" -n "urn:LoveService" -p"com.server.service" "urn:service" com.server.service.LoveService
//服务端调用service处理
d) 完成服务端代码
将服务端代码写到*impl.java 文件中
SyncNotifySPSoapBindingImpl.java
注意: 在一个基于B/S 的web 应用当中,为了完成业务代码,很多时候都会用到服务层代码。
也就是说我们写接口的时候很少会孤立的去写一个服务端程序,既然要用到服务层代码,那么
我们的问题就是如何在web应用获取一个单例的service层对象。
首先声明一下,本应用采用的是基于spring的业务层架构。所以问题转换为如何在一个普通的java类
中获取单例的bean.所谓普通的java类指没有与任何的servlet api 相耦合,但是它的加载需要web容器
的支持。
有几种解决方法:
①实现接口ApplicationContextAware : 在spring初始化时,自动将application进行注入
实现setApplicationContext(ApplicationContext applicationContext);
例如:
public class WebApplicationUtil implements ApplicationContextAware{
private static ApplicationContext application;
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
application = applicationContext;
}
public static Object getBean(String beanName){
return application.getBean(beanName);
}
}
②继承自抽象类ApplicationObjectSupport
不需要实现任何方法,直接通过getApplicationContext();即可获取
③继承自抽象类WebApplicationObjectSupport
类似②
注意:>该工具类需要在spring配置文件中进行配置.<bean id="WebApplicationUtil" class="com.xjgs.util.WebApplicationUtil"></bean>
>上述工具类使用的场景是在一个web 应用中,由web容器支持的普通java类中.
而且该类的加载器必须是org.apache.catalina.loader.WebappClassLoader.
- axis教程集合.rar (490.2 KB)
- 下载次数: 4
相关推荐
标题 "axis2在tomcat上配置" 描述的是如何在...在实际操作中,你可能还需要根据项目需求调整一些配置,例如添加自定义模块、配置安全策略等。遇到问题时,可以查阅`axis2-1.0-docs.zip`中的文档,或在线搜索解决方案。
标题中的“Axis2三种配置文件”指的是在使用Apache Axis2,一个流行的开源Web服务引擎时,需要理解的三种核心配置文件。这些配置文件是Axis2框架的重要组成部分,它们定义了服务的行为、部署方式以及与其他组件的...
本文将详细介绍如何在Eclipse环境中搭建基于Tomcat服务器的Axis环境,并创建一个简单的Web服务。 ##### 1. 下载Axis 首先需要下载Axis的压缩包。根据提供的信息,下载地址为:`...
标题中的"web service Axis项目实例"表明我们将探讨使用Axis框架来创建和使用Web服务。Axis提供了从WSDL(Web Services Description Language)到Java代码的绑定,以及从Java类到WSDL的自动生成,简化了Web服务的...
【使用Axis在项目中开发WebService服务】 在软件开发中,有时我们需要通过Web Service来实现不同系统间的通信,以便共享数据和服务。本篇文章将详细介绍如何使用Axis框架在现有Web服务器上开发一个WebService服务。...
* Spring 项目配置 * AXIS2 配置 * Web.xml 配置 * Web 服务配置 * Spring 集成 AXIS2 总结来说,Spring 集成 AXIS2 的 Web 服务配置方法可以提高开发效率和系统可维护性,该配置方法可以应用于企业级应用程序的...
本文将详细讲解Axis2的安装配置过程,以及如何在Eclipse环境中安装和配置Axis2插件,同时解决可能出现的问题。 1、Axis2安装配置 首先,你需要从Apache官方站点(http://apache.freelamp.com/ws/axis2/1_4_1/)下载...
在Java世界中,Axis1.4是一个非常经典的Web服务(Web Service)框架,它用于创建和部署SOAP(Simple Object Access Protocol)服务。本教程将深入探讨如何在Java服务端配置Axis1.4来构建和运行Web服务。我们将不涉及...
本文将详细介绍如何将Axis2集成到已有的Web项目中,并通过具体的步骤和示例代码来帮助读者更好地理解和实践这一过程。 #### 背景介绍 Axis2是一款基于Java的Web服务框架,它支持多种标准(如SOAP 1.1/1.2、WS-...
2. **创建Spring配置文件**:在项目中创建一个Spring的配置文件,例如`appContext.xml`。在这个文件中,我们可以定义一个Bean来表示我们的Web服务。使用`<bean>`标签,并指定`class`属性为你的Web服务实现类。 ```...
在`<Context>`元素中,你可以配置Axis2服务的路径和其他参数,确保服务能够正确加载和暴露。 总结起来,配置Axis2涉及环境变量设置、服务启动、客户端代码生成以及服务的部署和调用。理解这些步骤对于开发基于Web...
3. **配置Spring Boot**:在Spring Boot的主配置类中,我们需要配置一个Servlet容器来处理Axis2的请求。可以通过扩展`WebApplicationInitializer`接口或使用`@ServletComponentScan`注解来完成。此外,还需要配置...
本教程将指导你如何配置 Axis2 并在 Eclipse 中创建和使用 Web 服务。 **环境配置** 1. **Java 开发环境**: 首先确保已经安装了 JDK,并设置好 `JAVA_HOME` 环境变量。这里使用的是 JDK 6,但你可能需要根据实际...
【Axis入门中文文档】是针对Web Service开发的一款关键工具,主要使用了Axis框架,该框架是Apache软件基金会下的一个开源项目,专门用于构建和部署基于SOAP(Simple Object Access Protocol)的Web服务。本文将深入...
5. **创建和部署Web服务**: 配置完成后,你可以在Eclipse中创建一个新的Axis2 Web服务项目,编写服务接口和实现,然后通过右键点击项目,选择"Axis2" -> "Deploy as Axis2 Service"来部署服务。部署成功后,服务将...
本文将详细介绍如何在Eclipse环境中配置并使用Axis2来创建、发布Web Service接口。 #### 二、准备工作 在开始之前,需要准备以下资源: - Eclipse IDE for Java Developers(或其他版本) - axis2-1.6.2-bin.zip ...
5. **配置Axis**:在SpringBoot的配置文件`application.properties`或`application.yml`中,我们可以配置Axis的启动和端口等信息。 6. **编写WSDL**:如果还没有WSDL,我们可以手动编写或使用Axis工具从接口生成。...
5. **整合 Axis2 与 SSH**:在Spring配置中,注入Axis2服务客户端,通过ServiceClient调用Web服务。在Struts2 Action中,调用Spring的bean来触发Web服务请求。 6. **测试和调试**:通过HTTP客户端或者测试工具(如...
在Eclipse中,可以通过右键点击项目,选择`New` -> `File` -> `Other` -> `Axis2 Wizards` -> `Axis2 Services Archiver`来创建一个新的服务归档(aar)文件。在向导中,选择你刚刚编译好的class文件,通常是位于...