【WebService】第四章、Axis1.4发布WebService

本章节主要介绍Axis1.4发布WebService。这里只说明发布相关内容,调用方法后续会说明。


1、下载安装
      下载地址: http://archive.apache.org/dist/axis/
      本案例中使用的版本 : http://archive.apache.org/dist/axis/axis/java/1.4/axis-bin-1_4.zip
      下载完成之后解压文件,得到目录如下
      目录说明:
            docs:存放Axis的说明文档。
            lib:存放Axis的二进制发布包,(如果你想在你项目中使用就导入这里的包)。
            samples:官方给的一些简单案例。
            webapps:里面放了一个axis项目,放到tomcat的webapps下可以直接使用。
            xmls:相关说明文档。
      maven安装:大多数情况下我们只是想在自己的web项目中引入这项技术,我们只需要导入jar包即可。
  1. <dependency> 
  2.     <groupId>axis</groupId> 
  3.     <artifactId>axis</artifactId> 
  4.     <version>1.4</version> 
  5. </dependency> 
  6. <dependency> 
  7.     <groupId>axis</groupId> 
  8.     <artifactId>axis-wsdl4j</artifactId> 
  9.     <version>1.5.1</version> 
  10. </dependency> 
  11. <dependency> 
  12.     <groupId>javax.mail</groupId> 
  13.     <artifactId>mail</artifactId> 
  14.     <version>1.4.7</version> 
  15. </dependency> 
<dependency>
	<groupId>axis</groupId>
	<artifactId>axis</artifactId>
	<version>1.4</version>
</dependency>
<dependency>
	<groupId>axis</groupId>
	<artifactId>axis-wsdl4j</artifactId>
	<version>1.5.1</version>
</dependency>
<dependency>
	<groupId>javax.mail</groupId>
	<artifactId>mail</artifactId>
	<version>1.4.7</version>
</dependency>
2、即时发布JWS
步骤:编写一个不带包名的java类→修改后缀为jws→将文件拷贝到项目根目录下。
例如本例中:新建java类,将下载的axis1_4中webapps下的axis文件夹拷贝到tomcat的webapps下,启动tomcat。
  1. public class HelloJWS { 
  2.     public String sayHello(String name){ 
  3.         return "jws = " + name; 
  4.     } 
public class HelloJWS {
	public String sayHello(String name){
		return "jws = " + name;
	}
}
将上面java类后缀修改为jws复制到tomcat/webapps/axis/ 目录下。访问路径 :项目名/类名.jws?wsdl
访问这个路径:http://127.0.0.1:8080/axis/HelloJWS.jws?wsdl 在浏览器上就可以看到wsdl了,表示发布服务成功。
JWS方式总结:
      1. 即时发布方式比较简单,写个类一丢就可以了。
      2. 类不能有包名,而且如果你只有class或者jar包则不可以使用这种方式。
      3. 所以可以看出,这种方式只能发布特别特别简单的服务。 不适用企业开发,所以了解就好了。
3、定制发布
定制发布的步骤:
      定制发布就是需要自己写配置文件然后指定哪些方法是需要发布的,哪些方法不需要发布。所以这种比较好。
一般来说定制发布的步骤如下:
      1. 新建一个web工程。
      2. 导入jar包,如果使用maven管理jar包则使用上面给出的maven依赖即可。
      3. 像正常项目那样编写业务类。
      4. 修改web.xml文件,添加一个访问地址,用于访问wsdl文件。
      5. 写一个deploy.wsdd文件,配置哪些方法需要发布,哪些不用。然后在cmd命令行执行一个命令读取这个文件。
服务就发布了。如果想取消则可以写一个undeploy.wsdd文件,同样的命令执行这个文件即可。(下面会详细说明)
      6. 访问wsdl,看看服务是否发布成功。
      注意: 上述步骤的第4步是为了生成server-config.wsdd文件。如果你直接编辑server-config.wsdd文件。那么就
不用那么麻烦了。所以我比较喜欢直接编辑server-config.wsdd文件。
定制发布的详细流程:
      1. 创建一个maven工程,并添加依赖导入jar包,编辑一个普通的方法用于发布。
           
      上图就是整个项目的结构了。其中WEB-INF目录下的deploy.wsdd表示写入其中的配置会被发布。undeploy.wsdd则用于取消发布。
      2. 修改web.xml文件,增加一个访问路径。所以如果你想看看项目一共发布了多少个服,访问这个路径即可。
  1. <!DOCTYPE web-app PUBLIC 
  2. "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
  3. "http://java.sun.com/dtd/web-app_2_3.dtd" > 
  4. <web-app> 
  5.     <servlet> 
  6.         <servlet-name>AxisServlet</servlet-name> 
  7.         <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class> 
  8.     </servlet> 
  9.  
  10.     <servlet-mapping> 
  11.         <servlet-name>AxisServlet</servlet-name> 
  12.         <url-pattern>/services/*</url-pattern> 
  13.     </servlet-mapping> 
  14. </web-app> 
<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
	<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>/services/*</url-pattern>
	</servlet-mapping>
</web-app>
      3. 新建deploy.wsdd文件,将我们服务发布出去。
  1. <deployment xmlns="http://xml.apache.org/axis/wsdd/" 
  2.     xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> 
  3.  
  4.     <!-- name: 服务名随便写。 --> 
  5.     <service name="SayHello" provider="java:RPC"> 
  6.         <parameter name="className" value="com.ztesoft.axis.ws.HelloImpl" /> 
  7.         <!-- value表示哪些方法需要发布,*表示全部的public方法。 --> 
  8.         <!-- 如果想指定方法名,方法名与方法名用逗号隔开 --> 
  9.         <parameter name="allowedMethods" value="*" /> 
  10.         <!-- 指定命名空间 --> 
  11.         <namespace>http://www.ztesoft.com/axis/sayHello</namespace> 
  12.     </service> 
  13. </deployment> 
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
	xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

	<!-- name: 服务名随便写。 -->
	<service name="SayHello" provider="java:RPC">
		<parameter name="className" value="com.ztesoft.axis.ws.HelloImpl" />
		<!-- value表示哪些方法需要发布,*表示全部的public方法。 -->
		<!-- 如果想指定方法名,方法名与方法名用逗号隔开 -->
		<parameter name="allowedMethods" value="*" />
		<!-- 指定命名空间 -->
		<namespace>http://www.ztesoft.com/axis/sayHello</namespace>
	</service>
</deployment>
      4. 部署项目到tomcat,并且启动项目。这个时候访问 http://127.0.0.1:8080/axis/services(因为web.xml配置了这个servlet路径,
所以访问这个路径)你会发现有两个服务,AdminService 和 Version。因为我们还没有生成server-config.wsdd文件,所以只有两个。
      5. 通过命令行执行命令读取deploy.wsdd生成server-config.wsdd文件发布服务。项目的WEB-INF目录下
  1. java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -l http://127.0.0.1:8080/axis/services deploy.wsdd 
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -l http://127.0.0.1:8080/axis/services deploy.wsdd
     注意:此处是相对路径,所以你需要到tomcat/webapps/axis/WEB-INF 目录下执行cmd。你就会看到
      如果你看到上面两行内容,说明执行成功了。-l 后面的路径就是你在web.xml中配置的AxisServlet路径这个时候该目录下会生成
一个server-config.wsdd文件。这时访问 http://127.0.0.1:8080/axis/services。你就会发现多出来一个服务。点击SayHello的wsdl
你就可以看见服务描述了。
      如果不想发布这个服务了,则同样执行上面的命令,将deploy.wsdd换成undeploy.wsdd即可。undeploy.wsdd内容如下
执行之后就看不到该服务了。下面的服务名就是上面可以随便写的name。
  1. <deployment xmlns="http://xml.apache.org/axis/wsdd/" > 
  2.     <service name="SayHello"  /> 
  3. </deployment> 
<deployment xmlns="http://xml.apache.org/axis/wsdd/" >
	<service name="SayHello"  />
</deployment>
总结:
      1. 定制发布比即时发布方便很多,可以自由定义。所以一般用这种,而且不需要添加任何注解只需要配置一个文件即可。
      2. deploy.wsdd以及undeploy.wsdd的目的都是为了生成或者修改server-config.wsdd。所以直接编辑server-config.wsdd就可以了。
      3. 完整的server-config.wsdd文件如下。
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <deployment xmlns="http://xml.apache.org/axis/wsdd/" 
  3.     xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> 
  4.     <globalConfiguration> 
  5.         <parameter name="sendMultiRefs" value="true" /> 
  6.         <parameter name="disablePrettyXML" value="true" /> 
  7.         <parameter name="adminPassword" value="admin" /> 
  8.         <parameter name="dotNetSoapEncFix" value="true" /> 
  9.         <parameter name="enableNamespacePrefixOptimization" value="false" /> 
  10.         <parameter name="sendXMLDeclaration" value="true" /> 
  11.         <parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl" /> 
  12.         <parameter name="sendXsiTypes" value="true" /> 
  13.         <requestFlow> 
  14.             <handler type="java:org.apache.axis.handlers.JWSHandler"> 
  15.                 <parameter name="scope" value="session" /> 
  16.             </handler> 
  17.             <handler type="java:org.apache.axis.handlers.JWSHandler"> 
  18.                 <parameter name="scope" value="request" /> 
  19.                 <parameter name="extension" value=".jwr" /> 
  20.             </handler> 
  21.         </requestFlow> 
  22.     </globalConfiguration> 
  23.     <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper" /> 
  24.     <handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder" /> 
  25.     <handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" /> 
  26.     <transport name="http"> 
  27.         <requestFlow> 
  28.             <handler type="URLMapper" /> 
  29.             <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler" /> 
  30.         </requestFlow> 
  31.         <parameter name="qs:list" 
  32.             value="org.apache.axis.transport.http.QSListHandler" /> 
  33.         <parameter name="qs:wsdl" 
  34.             value="org.apache.axis.transport.http.QSWSDLHandler" /> 
  35.         <parameter name="qs.list" 
  36.             value="org.apache.axis.transport.http.QSListHandler" /> 
  37.         <parameter name="qs.method" 
  38.             value="org.apache.axis.transport.http.QSMethodHandler" /> 
  39.         <parameter name="qs:method" 
  40.             value="org.apache.axis.transport.http.QSMethodHandler" /> 
  41.         <parameter name="qs.wsdl" 
  42.             value="org.apache.axis.transport.http.QSWSDLHandler" /> 
  43.     </transport> 
  44.     <transport name="local"> 
  45.         <responseFlow> 
  46.             <handler type="LocalResponder" /> 
  47.         </responseFlow> 
  48.     </transport> 
  49.  
  50.     <!-- 想要添加或者取消修改一下内容即可,AdminService与Version注销不提供服务。 --> 
  51.  
  52.     <service name="SayHello" provider="java:RPC"> 
  53.         <parameter name="allowedMethods" value="*" /> 
  54.         <parameter name="className" value="com.ztesoft.axis.ws.HelloImpl" /> 
  55.         <namespace>http://www.ztesoft.com/axis/sayHello</namespace> 
  56.     </service> 
  57. </deployment> 
<?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="sendMultiRefs" value="true" />
		<parameter name="disablePrettyXML" value="true" />
		<parameter name="adminPassword" value="admin" />
		<parameter name="dotNetSoapEncFix" value="true" />
		<parameter name="enableNamespacePrefixOptimization" value="false" />
		<parameter name="sendXMLDeclaration" value="true" />
		<parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl" />
		<parameter name="sendXsiTypes" value="true" />
		<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="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper" />
	<handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder" />
	<handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" />
	<transport name="http">
		<requestFlow>
			<handler type="URLMapper" />
			<handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
		</requestFlow>
		<parameter name="qs:list"
			value="org.apache.axis.transport.http.QSListHandler" />
		<parameter name="qs:wsdl"
			value="org.apache.axis.transport.http.QSWSDLHandler" />
		<parameter name="qs.list"
			value="org.apache.axis.transport.http.QSListHandler" />
		<parameter name="qs.method"
			value="org.apache.axis.transport.http.QSMethodHandler" />
		<parameter name="qs:method"
			value="org.apache.axis.transport.http.QSMethodHandler" />
		<parameter name="qs.wsdl"
			value="org.apache.axis.transport.http.QSWSDLHandler" />
	</transport>
	<transport name="local">
		<responseFlow>
			<handler type="LocalResponder" />
		</responseFlow>
	</transport>

	<!-- 想要添加或者取消修改一下内容即可,AdminService与Version注销不提供服务。 -->

	<service name="SayHello" provider="java:RPC">
		<parameter name="allowedMethods" value="*" />
		<parameter name="className" value="com.ztesoft.axis.ws.HelloImpl" />
		<namespace>http://www.ztesoft.com/axis/sayHello</namespace>
	</service>
</deployment>
4、高级特性Handler & Chain
      上面说了直接编辑server-config.wsdd即可发布服务,所以下面就不再使用命令行方式。
Handler:
      有时候我们有一些特别的需求,比如当执行我们提供的服务时,希望有一些拦截动作。例如拦截一些非法的用户,
或者统计下这个服务被调用了多少次等很奇怪的问题。对于这种问题一般做法就是设置拦截器。就是在执行你的服务
前执行某些方法,执行之后在执行某些方法。Handler就是做这类事情的。项目结构如下:
具体步骤:
      1. 写两个类,继承BasicHandler。类分别叫BeforeHandle,AfterHandler。
      2. 配置server-config.wsdd,将这两个方法加入到服务中。
详细步骤:
      1. 创建类并继承BasicHandler
  1. package com.ztesoft.axis.ws; 
  2.  
  3. import org.apache.axis.AxisFault; 
  4. import org.apache.axis.MessageContext; 
  5. import org.apache.axis.handlers.BasicHandler; 
  6.  
  7. public class BeforeHandle extends BasicHandler { 
  8.  
  9.     /**
  10.      */ 
  11.     private static final long serialVersionUID = -1804045183252961242L; 
  12.  
  13.     @Override 
  14.     public void invoke(MessageContext msgContext) throws AxisFault { 
  15.         String someParam = (String) this.getOption("someParam"); 
  16.         System.out.println("前置方法,这里会第一个被调用"); 
  17.         System.out.println("server-config.wsdd中配置的自定义参数 :" + someParam); 
  18.          
  19.     } 
  20.  
package com.ztesoft.axis.ws;

import org.apache.axis.AxisFault;
import org.apache.axis.MessageContext;
import org.apache.axis.handlers.BasicHandler;

public class BeforeHandle extends BasicHandler {

	/**
	 */
	private static final long serialVersionUID = -1804045183252961242L;

	@Override
	public void invoke(MessageContext msgContext) throws AxisFault {
		String someParam = (String) this.getOption("someParam");
		System.out.println("前置方法,这里会第一个被调用");
		System.out.println("server-config.wsdd中配置的自定义参数 :" + someParam);
		
	}

}
  1. package com.ztesoft.axis.ws; 
  2.  
  3. import org.apache.axis.AxisFault; 
  4. import org.apache.axis.MessageContext; 
  5. import org.apache.axis.handlers.BasicHandler; 
  6.  
  7. public class AfterHandler extends BasicHandler{ 
  8.  
  9.     /**
  10.      */ 
  11.     private static final long serialVersionUID = -1077633556581583559L; 
  12.  
  13.     @Override 
  14.     public void invoke(MessageContext msgContext) throws AxisFault { 
  15.         System.out.println("后置方法,执行完服务后调用我。我是第三个被调用的。"); 
  16.     } 
  17.  
package com.ztesoft.axis.ws;

import org.apache.axis.AxisFault;
import org.apache.axis.MessageContext;
import org.apache.axis.handlers.BasicHandler;

public class AfterHandler extends BasicHandler{

	/**
	 */
	private static final long serialVersionUID = -1077633556581583559L;

	@Override
	public void invoke(MessageContext msgContext) throws AxisFault {
		System.out.println("后置方法,执行完服务后调用我。我是第三个被调用的。");
	}

}
      2. 修改server-config.wsdd文件,type里面的类路径前面需要加上前缀 java:
  1. <!-- 添加一个自定义的handler --> 
  2. <handler name="beforeHandler" type="java:com.ztesoft.axis.ws.BeforeHandle"> 
  3.     <!-- 这里还可以设置自定义参数,在类中使用this.getOptions("someParam") 获取参数 --> 
  4.     <parameter name="someParam" value="好好学习,天天向上" /> 
  5. </handler> 
  6.  
  7. <handler name="afterHandler" type="java:com.ztesoft.axis.ws.AfterHandler" /> 
  8.  
  9. <service name="SayHello" provider="java:RPC"> 
  10.     <parameter name="allowedMethods" value="*" /> 
  11.     <parameter name="className" value="com.ztesoft.axis.ws.HelloImpl" /> 
  12.     <namespace>http://www.ztesoft.com/axis/sayHello</namespace> 
  13.     <!-- 添加handler --> 
  14.     <requestFlow> 
  15.         <handler type="beforeHandler" /> 
  16.     </requestFlow> 
  17.     <responseFlow> 
  18.         <handler type="afterHandler" /> 
  19.     </responseFlow> 
  20. </service> 
<!-- 添加一个自定义的handler -->
<handler name="beforeHandler" type="java:com.ztesoft.axis.ws.BeforeHandle">
	<!-- 这里还可以设置自定义参数,在类中使用this.getOptions("someParam") 获取参数 -->
	<parameter name="someParam" value="好好学习,天天向上" />
</handler>

<handler name="afterHandler" type="java:com.ztesoft.axis.ws.AfterHandler" />

<service name="SayHello" provider="java:RPC">
	<parameter name="allowedMethods" value="*" />
	<parameter name="className" value="com.ztesoft.axis.ws.HelloImpl" />
	<namespace>http://www.ztesoft.com/axis/sayHello</namespace>
	<!-- 添加handler -->
	<requestFlow>
		<handler type="beforeHandler" />
	</requestFlow>
	<responseFlow>
		<handler type="afterHandler" />
	</responseFlow>
</service>
Chain:
      如果我有一连串的方法需要被调用,那该怎么办呢?将Handler一个一个的连接起来组成一个链就是chain。
步骤:
      1. 新建一个类继承SimpleChain。
      2. 将这个类提供的服务像Handler一样配置到server-config.wsdd中。
详细步骤:
      1. 新建类
  1. package com.ztesoft.axis.ws; 
  2.  
  3. import org.apache.axis.SimpleChain; 
  4.  
  5. public class BeforeChain extends SimpleChain{ 
  6.  
  7.     /**
  8.      */ 
  9.     private static final long serialVersionUID = 7781745675745772330L; 
  10.      
  11.     // 写在构造器重即可 
  12.     public BeforeChain(){ 
  13.         BeforeHandle beforeHandle = new BeforeHandle(); 
  14.         AfterHandler afterHandler = new AfterHandler(); 
  15.          
  16.         // 执行顺序与添加顺序一致。 
  17.         this.addHandler(beforeHandle); 
  18.         this.addHandler(afterHandler); 
  19.     } 
package com.ztesoft.axis.ws;

import org.apache.axis.SimpleChain;

public class BeforeChain extends SimpleChain{

	/**
	 */
	private static final long serialVersionUID = 7781745675745772330L;
	
	// 写在构造器重即可
	public BeforeChain(){
		BeforeHandle beforeHandle = new BeforeHandle();
		AfterHandler afterHandler = new AfterHandler();
		
		// 执行顺序与添加顺序一致。
		this.addHandler(beforeHandle);
		this.addHandler(afterHandler);
	}
}
  1. package com.ztesoft.axis.ws; 
  2.  
  3. import org.apache.axis.SimpleChain; 
  4.  
  5. public class AfterChain extends SimpleChain { 
  6.  
  7.     /**
  8.      */ 
  9.     private static final long serialVersionUID = -620214048210047247L; 
  10.  
  11.     public AfterChain(){ 
  12.         BeforeHandle beforeHandle = new BeforeHandle(); 
  13.         AfterHandler afterHandler = new AfterHandler(); 
  14.          
  15.         // 执行顺序与添加顺序一致。 
  16.         this.addHandler(afterHandler); 
  17.         this.addHandler(beforeHandle); 
  18.     } 
package com.ztesoft.axis.ws;

import org.apache.axis.SimpleChain;

public class AfterChain extends SimpleChain {

	/**
	 */
	private static final long serialVersionUID = -620214048210047247L;

	public AfterChain(){
		BeforeHandle beforeHandle = new BeforeHandle();
		AfterHandler afterHandler = new AfterHandler();
		
		// 执行顺序与添加顺序一致。
		this.addHandler(afterHandler);
		this.addHandler(beforeHandle);
	}
}
      2. 修改配置文件
  1. <!-- 添加自定义Chain --> 
  2. <chain name="beforeChain"> 
  3.     <handler type="java:com.ztesoft.axis.ws.BeforeChain" /> 
  4. </chain> 
  5. <chain name="afterChain"> 
  6.     <handler type="java:com.ztesoft.axis.ws.AfterChain" /> 
  7. </chain> 
  8. <service name="SayHello" provider="java:RPC"> 
  9.     <parameter name="allowedMethods" value="*" /> 
  10.     <parameter name="className" value="com.ztesoft.axis.ws.HelloImpl" /> 
  11.     <!-- 添加handler --> 
  12.     <requestFlow> 
  13.         <chain type="beforeChain" /> 
  14.     </requestFlow> 
  15.     <responseFlow> 
  16.         <chain type="afterChain" /> 
  17.     </responseFlow> 
  18. </service> 
<!-- 添加自定义Chain -->
<chain name="beforeChain">
	<handler type="java:com.ztesoft.axis.ws.BeforeChain" />
</chain>
<chain name="afterChain">
	<handler type="java:com.ztesoft.axis.ws.AfterChain" />
</chain>
<service name="SayHello" provider="java:RPC">
	<parameter name="allowedMethods" value="*" />
	<parameter name="className" value="com.ztesoft.axis.ws.HelloImpl" />
	<!-- 添加handler -->
	<requestFlow>
		<chain type="beforeChain" />
	</requestFlow>
	<responseFlow>
		<chain type="afterChain" />
	</responseFlow>
</service>
总结:
      Handler与Chain只是一种拦截作用,Axis也默认提供了一些拦截的类。例如:有个Handler叫做 Authenticate。
利用他可以实现用户权限控制,即调用方法的时候需要提供用户名密码,只有正确的才能调用。利用Handler和
Chain我们也可以做一些日志记录等相关内容,或者报文记录。配置在全局拦截里面, globalConfiguration节点即可。
5、自带调试工具tcpmon
      有时候我们想查看我们发送与请求的内容,这个时候我们该怎么做呢?tcpmon也许是一个很不错的选择。tcpmon主要
起到一个拦截的作用,原理如下,本来我们是直接访问8080端口的。使用tcpmon之后,我们访问地址改成8081(可以自
己定义)接着请求的内容被记录下来,然后tcpmon将请求的内容一模一样的转到8080。处理完成之后服务器将处理内容
回给tcpmon,tcpmon记录返回内容。在将处理结果转发给我们。
      该工具集成到了axis包中,查找org.apache.axis.utils.tcpmon ,运行这个类的main方法即可看见
      点击Add按钮,修改请求地址端口为红色的端口。发起服务调用即可看到下面接受与发送的消息了。
总结:
      通过拦截webservice的请求我们发现,webservice采用http的方式传递数据。传输的数据是满足soap规则的xml文档。
由此可以证明 WebService = HTTP + SOAP + WSDL
6、额外注意事项
      Axis技术发布服务就暂时写到这里了。如果博文中有什么不对的地方请指出,我会第一时间修订过来。这里只说了如何
发布一个服务,关于调用则会在后续章节详细说明。
7、附录一些最终的配置文件
web.xml配置
  1. <!DOCTYPE web-app PUBLIC 
  2. "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
  3. "http://java.sun.com/dtd/web-app_2_3.dtd" > 
  4. <web-app> 
  5.     <servlet> 
  6.         <servlet-name>AxisServlet</servlet-name> 
  7.         <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class> 
  8.     </servlet> 
  9.  
  10.     <servlet-mapping> 
  11.         <servlet-name>AxisServlet</servlet-name> 
  12.         <url-pattern>/services/*</url-pattern> 
  13.     </servlet-mapping> 
  14. </web-app> 
<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
	<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>/services/*</url-pattern>
	</servlet-mapping>
</web-app>
server-config.wsdd配置文件详细。
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <deployment xmlns="http://xml.apache.org/axis/wsdd/" 
  3.     xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> 
  4.     <globalConfiguration> 
  5.         <parameter name="sendMultiRefs" value="true" /> 
  6.         <parameter name="disablePrettyXML" value="true" /> 
  7.         <parameter name="adminPassword" value="admin" /> 
  8.         <parameter name="dotNetSoapEncFix" value="true" /> 
  9.         <parameter name="enableNamespacePrefixOptimization" value="false" /> 
  10.         <parameter name="sendXMLDeclaration" value="true" /> 
  11.         <parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl" /> 
  12.         <parameter name="sendXsiTypes" value="true" /> 
  13.         <requestFlow> 
  14.             <handler type="java:org.apache.axis.handlers.JWSHandler"> 
  15.                 <parameter name="scope" value="session" /> 
  16.             </handler> 
  17.             <handler type="java:org.apache.axis.handlers.JWSHandler"> 
  18.                 <parameter name="scope" value="request" /> 
  19.                 <parameter name="extension" value=".jwr" /> 
  20.             </handler> 
  21.         </requestFlow> 
  22.     </globalConfiguration> 
  23.     <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper" /> 
  24.     <handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder" /> 
  25.     <handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" /> 
  26.  
  27.     <transport name="http"> 
  28.         <requestFlow> 
  29.             <handler type="URLMapper" /> 
  30.             <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler" /> 
  31.         </requestFlow> 
  32.         <parameter name="qs:list" value="org.apache.axis.transport.http.QSListHandler" /> 
  33.         <parameter name="qs:wsdl" value="org.apache.axis.transport.http.QSWSDLHandler" /> 
  34.         <parameter name="qs.list" value="org.apache.axis.transport.http.QSListHandler" /> 
  35.         <parameter name="qs.method" value="org.apache.axis.transport.http.QSMethodHandler" /> 
  36.         <parameter name="qs:method" value="org.apache.axis.transport.http.QSMethodHandler" /> 
  37.         <parameter name="qs.wsdl" value="org.apache.axis.transport.http.QSWSDLHandler" /> 
  38.     </transport> 
  39.     <transport name="local"> 
  40.         <responseFlow> 
  41.             <handler type="LocalResponder" /> 
  42.         </responseFlow> 
  43.     </transport> 
  44.      
  45.     <!-- 添加一个自定义的handler --> 
  46.     <handler name="beforeHandler" type="java:com.ztesoft.axis.ws.BeforeHandle"> 
  47.         <!-- 这里还可以设置自定义参数,在类中使用this.getOptions("someParam") 获取参数 --> 
  48.         <parameter name="someParam" value="好好学习,天天向上" /> 
  49.     </handler> 
  50.     <handler name="afterHandler" type="java:com.ztesoft.axis.ws.AfterHandler" /> 
  51.      
  52.     <!-- 添加自定义Chain --> 
  53.     <chain name="beforeChain"> 
  54.         <handler type="java:com.ztesoft.axis.ws.BeforeChain" /> 
  55.     </chain> 
  56.     <chain name="afterChain"> 
  57.         <handler type="java:com.ztesoft.axis.ws.AfterChain" /> 
  58.     </chain> 
  59.  
  60.     <service name="SayHello" provider="java:RPC"> 
  61.         <parameter name="allowedMethods" value="*" /> 
  62.         <parameter name="className" value="com.ztesoft.axis.ws.HelloImpl" /> 
  63.         <namespace>http://www.ztesoft.com/axis/sayHello</namespace> 
  64.         <!-- 添加handler或者Chain --> 
  65.         <requestFlow> 
  66.             <!-- <handler type="beforeHandler"/> --> 
  67.             <chain type="beforeChain" /> 
  68.         </requestFlow> 
  69.         <responseFlow> 
  70.             <!-- <handler type="afterHandler"/> --> 
  71.             <chain type="afterChain" /> 
  72.         </responseFlow> 
  73.     </service> 
  74.  
  75. </deployment> 
<?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="sendMultiRefs" value="true" />
		<parameter name="disablePrettyXML" value="true" />
		<parameter name="adminPassword" value="admin" />
		<parameter name="dotNetSoapEncFix" value="true" />
		<parameter name="enableNamespacePrefixOptimization" value="false" />
		<parameter name="sendXMLDeclaration" value="true" />
		<parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl" />
		<parameter name="sendXsiTypes" value="true" />
		<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="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper" />
	<handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder" />
	<handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" />

	<transport name="http">
		<requestFlow>
			<handler type="URLMapper" />
			<handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
		</requestFlow>
		<parameter name="qs:list" value="org.apache.axis.transport.http.QSListHandler" />
		<parameter name="qs:wsdl" value="org.apache.axis.transport.http.QSWSDLHandler" />
		<parameter name="qs.list" value="org.apache.axis.transport.http.QSListHandler" />
		<parameter name="qs.method" value="org.apache.axis.transport.http.QSMethodHandler" />
		<parameter name="qs:method" value="org.apache.axis.transport.http.QSMethodHandler" />
		<parameter name="qs.wsdl" value="org.apache.axis.transport.http.QSWSDLHandler" />
	</transport>
	<transport name="local">
		<responseFlow>
			<handler type="LocalResponder" />
		</responseFlow>
	</transport>
	
	<!-- 添加一个自定义的handler -->
	<handler name="beforeHandler" type="java:com.ztesoft.axis.ws.BeforeHandle">
		<!-- 这里还可以设置自定义参数,在类中使用this.getOptions("someParam") 获取参数 -->
		<parameter name="someParam" value="好好学习,天天向上" />
	</handler>
	<handler name="afterHandler" type="java:com.ztesoft.axis.ws.AfterHandler" />
	
	<!-- 添加自定义Chain -->
	<chain name="beforeChain">
		<handler type="java:com.ztesoft.axis.ws.BeforeChain" />
	</chain>
	<chain name="afterChain">
		<handler type="java:com.ztesoft.axis.ws.AfterChain" />
	</chain>

	<service name="SayHello" provider="java:RPC">
		<parameter name="allowedMethods" value="*" />
		<parameter name="className" value="com.ztesoft.axis.ws.HelloImpl" />
		<namespace>http://www.ztesoft.com/axis/sayHello</namespace>
		<!-- 添加handler或者Chain -->
		<requestFlow>
			<!-- <handler type="beforeHandler"/> -->
			<chain type="beforeChain" />
		</requestFlow>
		<responseFlow>
			<!-- <handler type="afterHandler"/> -->
			<chain type="afterChain" />
		</responseFlow>
	</service>

</deployment>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值