xfire实现对WebService调用接口用户验证

学习WebService进行中......

 今天总结一下前段时间学习WebServices的经验和成果......hehe


.........首先进行服务器端的编码


环境MyEclipse(服务器端)+Eclipse(客户端)+tomcat+jdk1.6+xFire

1....................创建工程




MyEclipse中集成了Xfire框架,这样给我们省了不少麻烦hh

这样得到了两个src中的文件一个接口和一个实现类

.......接口

package com.demo;
//Generated by MyEclipse

public interface IHelloService {
	
	public String example(String username);
	
}
.......实现类

package com.demo;
//Generated by MyEclipse

public class HelloServiceImpl implements IHelloService {
	
	public String example(String username) {
		return username+"我来了!";
	}
	
}

(做了点小动作....别见怪)


2................大头戏来了,用户验证监听处理器代码(大多通用直接copy吧)

package com.client;

import org.codehaus.xfire.MessageContext;
import org.codehaus.xfire.handler.AbstractHandler;
import org.jdom.Element;

public class ClientAuthenticationHandler extends AbstractHandler {

    private String username = null;

    private String password = null;

    public ClientAuthenticationHandler() { 
    }

    public ClientAuthenticationHandler(String username,String password) { 
    this.username = username; 
        this.password = password;
    }

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

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

    public void invoke(MessageContext context) throws Exception {

        //为SOAP Header构造验证信息
        Element el = new Element("header"); 
        context.getOutMessage().setHeader(el); 
        Element auth = new Element("AuthenticationToken"); 
        Element username_el = new Element("Username"); 
        username_el.addContent(username); 
        Element password_el = new Element("Password"); 
        password_el.addContent(password); 
        auth.addContent(username_el); 
        auth.addContent(password_el); 
        el.addContent(auth); 
    } 
}

3.....................服务端收尾,配置service.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
	<service>
		<name>HelloService</name>
		<serviceClass>com.demo.IHelloService</serviceClass>
		<implementationClass>
			com.demo.HelloServiceImpl
		</implementationClass>
		<!--注册监听处理器-->
		<inHandlers>
			<handler handlerClass="com.handler.AuthentificationHandler"></handler>
		</inHandlers>
		
		<style>wrapped</style>
		<use>literal</use>
		<scope>application</scope>
	</service>
</beans>

4......................服务端完成了,大家看看我的文件结构吧

5............................先给大家点惊喜,服务端配置好了,启动一下tomcat把我们的webService服务发布一下,

在浏览器中输入URL             http://localhost:8080/WebService/services/HelloService?wsdl    如果显示


这个xml页面的话,恭喜你,发布成功了。


6.......................下面来看一下客户端如何进行编写


首先需要把xfire的架包导入工程(放到lib文件夹下)

先看看我的文件夹结构



在这里我用了config.properties进行存放接口路径(有点大材小用)

7...........................首先需要编写的是接口文件IHelloService.java(可以直接拷贝服务器端的)

package com.imp;


public interface IHelloService {


	public String example(String username);
}

8................................然后编写PropertiesConfig用来读取properties文件

package com.test;

import java.io.FileInputStream;
import java.util.Properties;

public class PropertiesConfig {
	public static String site;

	public static String getsite() {
		Properties p = new Properties();
		try {
			 p.load(new FileInputStream("src/config.properties"));
		} catch (Exception e) {
			e.printStackTrace();
		}
		site = p.getProperty("webservice_site");
		return site;
	}

}

9........................................下面是客户端身份验证代码ClientAuthenticationHandler.java

package com.client;

import org.codehaus.xfire.MessageContext;
import org.codehaus.xfire.handler.AbstractHandler;
import org.jdom.Element;

public class ClientAuthenticationHandler extends AbstractHandler {

    private String username = null;

    private String password = null;

    public ClientAuthenticationHandler() { 
    }

    public ClientAuthenticationHandler(String username,String password) { 
    this.username = username; 
        this.password = password;
    }

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

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

    public void invoke(MessageContext context) throws Exception {

        //为SOAP Header构造验证信息
        Element el = new Element("header"); 
        context.getOutMessage().setHeader(el); 
        Element auth = new Element("AuthenticationToken"); 
        Element username_el = new Element("Username"); 
        username_el.addContent(username); 
        Element password_el = new Element("Password"); 
        password_el.addContent(password); 
        auth.addContent(username_el); 
        auth.addContent(password_el); 
        el.addContent(auth); 
    } 
}

10....................................最后来到进行我们的接口调用吧

package com.test;

import java.lang.reflect.Proxy;
import java.net.MalformedURLException;
import org.codehaus.xfire.client.*;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;

import com.client.ClientAuthenticationHandler;
import com.imp.IHelloService;

public class ClientTest {

	/**
	 * @param args
	 * @throws MalformedURLException
	 */
	public static void main(String[] args) {
		try {
			// 获取properties中的配置url地址
			String serviceUrl = PropertiesConfig.getsite();// 新增
			Service serviceModel = new ObjectServiceFactory().create(
					IHelloService.class, null, serviceUrl + "?wsdl", null);
			IHelloService service = (IHelloService) new XFireProxyFactory()
					.create(serviceModel, serviceUrl);
			XFireProxy proxy = (XFireProxy) Proxy.getInvocationHandler(service);
			Client client = proxy.getClient();
			// 发送授权信息
			client.addOutHandler(new ClientAuthenticationHandler("admin",
					"admin"));
			// 输出调用web services方法的返回信息
			System.out.println(service.example("admin"));
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		}

	}
}


好了,代码部分到此为止

如果你的服务器还没有停止,那么我们现在可以来测试了

运行客户端程序


11...........................................客户端显示

12.....................................服务器端显示


13................................今天又进步一点.....................................good good study ,day day up .





评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值