手动配置WebService入门实例

1.AXIS2简介:

Apache Axis2项目是一个基于Java语言的Web services系统服务和客户端的实现。为了从Apache Axis 1.0中获取教训,Apache Axis2提供了一个完整的对象模型和模块化体系结构,这样可以很容易的添加功能以及支持一个新的与Web services相关的说明和建议。Axis2可以让你很容易的执行以下任务:

(1).发送SOAP消息。

(2).接收和处理SOAP消息。

(3).从一个普通的Java类建立Web service。

(4).用WSDL来建立实现服务和客户端的实现类。

(5).很容易的从一个服务来获取WSDL。

(6).发送和接收带有附件的SOAP消息。

(7).建立或者使用基于REST的Web service。

(8).建立或者使用从WS-SecurityWS-ReliableMessagingWS-AddressingWS-CoordinationWS-Atomic Transaction获取优势的服务。

(9).当新建议出现时,使用Axis2的模块化结构来很容易的加入对它的支持。

2.配置AXIS2环境:

(1).下载Axis2,去http://ws.apache.org/axis2/下载axis2的最新版本,一般是两个zip文件,如axis2-1.4.1-bin.zip(包含了Axis2中所有的jar文件)和axis2-1.4.1-war.zip(用于将WebService发布到web容器中)。
(2). 把axis2-1.4.1-war.zip解压,将目录中的axis2.war文件放到Servlet容器的项目发布目录中,以Tomcat为例,放到”%Tomcat%/webapps”目录中,启动Tomcat。

(3).在浏览器地址栏中输入如下的URL:http://localhost:8080/axis2/”,应该可以进入axis2的欢迎界面,点击”Validate”如果没有报错,则说明axis2的环境已经配置好。

(4).点击”Administration”,初始用户名和密码分别是:admin和axis2,也可以到” %Tomcat%/webapps/axis2/WEB-INF/conf/axis2.xml”下修改用户名和密码。

3.POJO发布成AXIS2 WebService的简单例子:

(1).编程普通的java类,将编译过后的”.class”文件拷贝到axis2的POJO发布目录”%Tomcat%/webapps/axis2/WEB-INF/POJO”中。
注意:若目录下没有POJO目录,则手动新建该目录即可。

(2).启动Tomcat,POJO即被发布成了WebService,java类中中所有的public方法即被发布成WebService的Operation。

注意:POJO类不能使用package关键字声明包,AXIS2默认是热部署的。

4.POJO无配置发布高级:

由于AXIS2的POJO发布方式不支持Package,若类中需要调用其他类的方法时,需要将所引用的类编译后的”.class”文件拷贝到”%Tomcat%/webapps/axis2/WEB-INF/classes”目录下。

编写pojo类User.java,注意:1、网络传输的对象要序列化 2、没有包名  3、先编译成.class文件,在放置到WEB-INF/POJO中,没有该目录,自行创建

public class User implements java.io.Serializable {
	private Integer userId;			
	private String username="Hello world";		
	private String password;			

	public Integer getUserId() {
		return this.userId;
	}

	public void setUserId(Integer userId) {
		this.userId = userId;
	}

	public String getUsername() {
		return this.username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return this.password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
}


重启tomcat,打开地址:http://localhost:8080/axis2/services/listServices,即可看到已经发布的方法

编写客户端测试方法:

package samland.webservice.demo;

import javax.xml.namespace.QName;

import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;

public class Test {
public static void main(String[] args) {
	try {
		//使用RPC方式调用WebService:
		RPCServiceClient client = new RPCServiceClient();
		Options options=client.getOptions();
		//指定调用WebService的URL:
		EndpointReference targetURL = new EndpointReference("http://localhost:8080/axis2/services/User");
		options.setTo(targetURL);
		//指定调用服务方法的参数值:
		//指定传入参数
		Object[] parameters = new Object[]{"wangxiaoya"};
		//指定调用的命名空间和方法(setUsername)
		QName qname = new QName("http://ws.apache.org/axis2", "setUsername");
		//当被调用的方法没有返回值时,应该使用RPCServiceClient类的invokeRobust方法
		client.invokeRobust(qname, parameters);
		
		Class[] classes = new Class[]{String.class}; 
		QName qname2 = new QName("User", "getUsername");
		//当方法没有参数时,第二个参数值不能为null,而要使用new Object[]{}
		Object[] parameters2 = new Object[]{};
		//三个参数第一个为QName对象,表示要调用的方法名;第二个参数表示要调用的//WebService方法的参数值;第三个参数表示WebService方法的返回值类型
		Object result2 = client.invokeBlocking(qname2, parameters2, classes)[0];
		System.out.println(result2);
	} catch (AxisFault e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} 
}
}


输出结果:

Hello world

 注意:namespace mismatch错误处理方法

在基于axis2进行WebService开发部署时(使用Java客户端调用服务)可能会报namespace mismatch require http://ws.apache.org/axis2 found http://ws.apache.org/axis2/xsd 这样的错误.根据本人的经验,当使用POJO这种方式开发时,Qname中的参数为http://ws.apache.org/axis2,在基于service.xml开发时其参数为http://service.

     当然当命名空间报错时在Java开发环境下,可以从调试窗口发现类似的信息:Exception in thread "main" org.apache.axis2.AxisFault: namespace mismatch require http://service found http://ws.apache.org/axis2 .将命名空间改为require后面的即可。在代码中进行搜索,然后修改即可。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

0X码上链

你的鼓将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值