axis开发的返回自定义bean

本文档详细介绍了如何使用Axis开发Web Service,包括设置项目、配置web.xml、编写服务接口、返回自定义实体Bean。通过实例展示了从创建服务到客户端调用的完整流程,帮助读者掌握 Axis 开发Web Service并返回自定义对象的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于webservice,说实话一直以来都是没有动手写过,因为工作中几乎都是调用其他人提供的接口,大学时候也没有仔细的学过,所以对于这块很陌生。

最近正在看一些招聘信息,虽然说没有打算最近跳槽,但是看到上面一些自己中意的公司都是要求会webservice,刚好最近有空,所以就写下了这个学习axis的博文了。


具体的axis的介绍,我就不多说了,百度网上一大堆,直接就是上代码吧   :


1、建立一个web项目,将axis的jar包,放到lib中。jar包下载地址(jar包下载地址)。


2、打开web.xml,添加如下内容:

<!--start of webservice setting -->
	<servlet>
		<servlet-name>axis</servlet-name>
		<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
		<load-on-startup>5</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>axis</servlet-name>
		<url-pattern>/webservice/*</url-pattern>
	</servlet-mapping>
	<servlet>
		<servlet-name>SOAPMonitorService</servlet-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>SOAPMonitorService</servlet-name>
		<url-pattern>/SOAPMonitor</url-pattern>
	</servlet-mapping>
	<!-- end of webservice setting -->


3、新建HelloWebservice.java


package com.webservice;

public class HelloWebservice {

	public String doService(String name) {
		String result = "Hello " + name;
		return result;
	}
}

4、在WEB-INF下新建server-config.wsdd文件


<?xml version="1.0" encoding="UTF-8"?>
<deployment name="defaultClientConfig"
	xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"
	xmlns:handler="http://xml.apache.org/axis/wsdd/providers/handler"
	xmlns="http://xml.apache.org/axis/wsdd/">
	<globalConfiguration name="defaultClientConfig">
		<requestFlow name="RequestFlow1" type="">
			<handler name="Handler1" type="java:org.apache.axis.handlers.JWSHandler">
				<parameter name="scope" value="session" />
			</handler>
			<handler name="Handler2" 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" type="">
		<requestFlow name="RequestFlow1" type="">
			<handler name="Handler1" type="URLMapper" />
			<handler name="Handler2"
				type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
		</requestFlow>
	</transport>
	<transport name="local" type="">
		<responseFlow name="ResponseFlow1" type="">
			<handler name="Handler1" type="LocalResponder" />
		</responseFlow>
	</transport>

	<!-- 每个webservice均需要一个如下配置,name为访问时的请求名 -->
	<!--返回的是简单类型 -->
	<service name="helloService" provider="java:RPC" style="rpc"
		use="encoded">
		<parameter name="scope" value="Request" />
		<!-- className为实际访问的服务类 -->
		<parameter name="className" value="com.webservice.HelloWebservice" />
		<!-- allowedMethods为实际访问的服务方法 -->
		<parameter name="allowedMethods" value="doService" />
	</service>
</deployment>


5、启动项目,在浏览器输入http://localhost:8080/项目名/webservice/helloService?wsdl,出现如下的页面,就是代表着ok了。



要是没有出现上面的图片,查看部署的项目,class文件是否全都编译,配置文件是否都齐全。


6、用soap调用这个接口:







其他的基本类型的,几乎都是这样,搞定这些之后,我便是想要做个能够返回自定义实体bean的webservice接口了。


开始返回自定义实体bean的websevice开发:


1、在上面的项目中,新建学生类Student:


package com.webservice;

import java.io.Serializable;

public class Student implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public String getStuName() {
		return stuName;
	}

	public void setStuName(String stuName) {
		this.stuName = stuName;
	}

	public String getStuAge() {
		return stuAge;
	}

	public void setStuAge(String stuAge) {
		this.stuAge = stuAge;
	}

	public int getStuId() {
		return stuId;
	}

	public void setStuId(int stuId) {
		this.stuId = stuId;
	}

	private String stuName;

	private String stuAge;

	private int stuId;
}

2、新建获取学生的业务类GetStuService:


package com.webservice;

public class GetStuService {

	public Student getStudentById(int stuId) {

		Student student = new Student();

		student.setStuId(stuId);

		student.setStuName("小杰");

		student.setStuAge("23");

		return student;
	}
}



3、在server-config.wsdd中,添加:

<!-- 返回自定义实体类 -->
	<service name="getStuService" provider="java:RPC" style="rpc"
		use="encoded">
		<parameter name="scope" value="Request" />
		<!-- className为实际访问的服务类 -->
		<parameter name="className" value="com.webservice.GetStuService" />
		<!-- allowedMethods为实际访问的服务方法 -->
		<parameter name="allowedMethods" value="getStudentById" />

		<beanMapping languageSpecificType="java:com.webservice.Student"
			qname="ns1:Student" xmlns:ns1="com.webservice" />

		<typeMapping languageSpecificType="java:com.webservice.Student"
			qname="ns1:Student" xmlns:ns1="com.webservice"
			deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
			serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" />
		<namespace>com.webservice</namespace>
	</service>


注意,没有添加下面的这段代码:

<beanMapping languageSpecificType="java:com.webservice.Student"
			qname="ns1:Student" xmlns:ns1="com.webservice" />

		<typeMapping languageSpecificType="java:com.webservice.Student"
			qname="ns1:Student" xmlns:ns1="com.webservice"
			deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
			serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" />

会报错:

No serializer found for class com.webservice.Student in registry org.apache.axis.encoding.TypeMappingDelegate@13e39a7c

解决错误的方法,网上百度也能够找到,可以自己去看看


4、启动项目,输入http://localhost:8080/axisProject/webservice/getStuService?wsdl,会出现下面的页面:




5、soapuI调用这个接口,会出现如下的返回值:




6、重新建一个项目,通过wsdl自动生成客户端:




7、新建ClientTest测试类:


package webservice.com;

import java.rmi.RemoteException;

public class ClientTest {
	public static void main(String[] args) throws RemoteException {
		String endPoint = "http://localhost:8080/axisProject/webservice/getStuService?wsdl";

		GetStuServiceProxy proxy = new GetStuServiceProxy(endPoint);

		Student student = proxy.getStudentById(1);

		System.out.println("student[stuId=" + student.getStuId() + ",stuName=" + student.getStuName() + ",stuAge="
				+ student.getStuAge() + "]");
	}
}



8、执行代码,返回对应的值:



好吧,以上就是axis开发出来的服务端返回自定义实体bean的所有代码了。

webservice这东西还是要自己多写吧,我也在不断的学习,会不断的更新博客的。


源码已经上传:地址(源码下载地址),下载解压后有两个包:axisProject和axisClinet,前者是服务端,后者是客户端,先执行服务端后执行客户端。有问题的话,直接留言。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值