`
wander312
  • 浏览: 213474 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

WebService之XFire和Jax实现身份验证

阅读更多

只列出部分核心代码, 其它代码都是myeclipse生成, 详见附件.

 

1.服务器代码:

HelloWorld.java代码:

 

 

package test;

public class HelloWorld implements IHelloWorld {

	public Float add(float a, float b) {
		return a + b;
	}

	public String sayHello(String name) {
		return "hello, " + name + "...";
	}

}

 IHelloWorld.java代码:

 

package test;

import java.rmi.Remote;

public interface IHelloWorld extends Remote{
	
	public String sayHello(String name);
	
	public Float add(float a, float b);
}

 ServerHandler.java代码:

 

package test;

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

public class ServerHandler extends AbstractHandler {
	public void invoke(MessageContext message) throws Exception {
		Element header = message.getInMessage().getHeader();
		if (header == null) {
			throw new XFireRuntimeException("Missing SOAP header...");
		}
		Element element = header.getChild("AuthenticationToken");
		String userName = element.getChild("userName").getValue();
		String password = element.getChild("password").getValue();
		System.out.println("userName:" + userName + ",password" + password);
		if ("wander".equals(userName) && "wander".equals(password)) {
			System.out.println("yes, you passed...");
		} else {
			throw new XFireRuntimeException("error password and username...");
		}
	}

}

 services.xml内容:

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">

	<service>
		<name>HelloWorldSimple</name>
		<namespace>http://simple.xfire.webservice/HelloWorld</namespace>
		<serviceClass>test.IHelloWorld</serviceClass>
		<implementationClass>test.HelloWorld</implementationClass>
		<scope>request</scope>
		<inHandlers>
			<handler handlerClass="test.ServerHandler">
			</handler>
		</inHandlers>
	</service>
</beans>

 

2.XFire实现身份验证

ClientMain2.java代码:

 

package test;

import java.util.List;
import java.lang.reflect.Proxy;
import java.net.MalformedURLException;
import java.util.ArrayList;

import org.codehaus.xfire.MessageContext;
import org.codehaus.xfire.client.Client;
import org.codehaus.xfire.client.XFireProxy;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.handler.AbstractHandler;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
import org.jdom.Element;

public class ClientMain2 
extends AbstractHandler{
	
	public static void main(String[] args) throws MalformedURLException {
		ClientMain2 
auth = new ClientMain2
();
		String url = "http://localhost:8080/msg/services/HelloWorldSimple";
		Service service = new ObjectServiceFactory().create(IHelloWorld.class);
		IHelloWorld helloWorld = (IHelloWorld) new XFireProxyFactory().create(service, url);
		
		XFireProxy xfireProxy = (XFireProxy) Proxy.getInvocationHandler(helloWorld);
		Client client = xfireProxy.getClient();
		client.addOutHandler(auth);
		
		System.out.println(helloWorld.sayHello("wander"));
	}

	public void invoke(MessageContext message) throws Exception {
		Element header = new Element("header");
		Element authentication = new Element("AuthenticationToken");
		
		Element userName = new Element("userName");
		userName.setText("wander");
		
		Element password = new Element("password");
		password.setText("wander");
		
		authentication.addContent(userName);
		authentication.addContent(password);
		header.addContent(authentication);
		message.getOutMessage().setHeader(header);
	}

}

 

3.Jax-ws 实现身份验证

ClientMain.java代码

 

import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

import javax.xml.namespace.QName;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPFactory;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.handler.Handler;
import javax.xml.ws.handler.HandlerResolver;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.PortInfo;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;

public class ClientMain {

	@SuppressWarnings("unchecked")
	public static void main(String[] args) {
		HelloWorldSimple simple = new HelloWorldSimple();

		simple.setHandlerResolver(new HandlerResolver() {
			public List<Handler> getHandlerChain(PortInfo portInfo) {
				List<Handler> list = new ArrayList<Handler>();
				list.add(new MySOAPHandler());
				return list;
			}
		});
		HelloWorldSimplePortType port = simple.getHelloWorldSimpleHttpPort();
		System.out.println(port.sayHello("cat1"));
	}
}

class MySOAPHandler implements SOAPHandler<SOAPMessageContext> {

	public Set<QName> getHeaders() {
		return null;
	}

	public void close(MessageContext context) {
	}

	public boolean handleFault(SOAPMessageContext context) {
		throw new UnsupportedOperationException("Not supported yet.");
	}

	public boolean handleMessage(SOAPMessageContext context) {
		Boolean outboundProperty = (Boolean) context
				.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
		if (outboundProperty.booleanValue()) {
			SOAPMessage message = context.getMessage();
			try {
				SOAPEnvelope envelope = message.getSOAPPart().getEnvelope();
				SOAPFactory factory = SOAPFactory.newInstance();
				SOAPElement authenticationToken = factory
						.createElement("AuthenticationToken");
				SOAPElement userName = factory.createElement("userName");
				userName.setValue("wander");
				SOAPElement password = factory.createElement("password");
				password.setValue("wander");
				authenticationToken.addChildElement(userName);
				authenticationToken.addChildElement(password);
				
				SOAPHeader header = envelope.addHeader();
				header.addChildElement(authenticationToken);
				
			} catch (SOAPException e) {
				e.printStackTrace();
			}
		}
		return true;
	}
}
  • 大小: 119 KB
分享到:
评论

相关推荐

    xfire 的webservice_server端和client端代码,包括复杂类型.

    这个小实例有server和client的代码,server直接用myeclipse导入,然后添加spring2.0 aop和core,xfire1.2即可.client也是直接导入项目,然后导入jax-ws2.1api和jax-ws2.1 runtime libraries即可.这些包通过点击项目...

    axis-jax-ws-xfire.rar_jax

    axis,jax-ws,xfire客户端调用分析,以及webservice万能客户端

    XFire开发Webservice应用

    MyEclipse Web Services是建立在XFire Java SOAP框架和工具基础上的, ... XFire支持 Web Services standards,Spring 整合, 支持JBI , 支持 JAXB ,XMLBeans,Java 5 和JAX-WS.并支持HTTP, JMS, XMPP, In-memory传输协议

    MyEclipse下XFire开发Webservice实例.doc

    XFire Java SOAP框架概述 MyEclipse Web Services是建立在XFire Java ... XFire支持 Web Services standards,Spring 整合, 支持JBI , 支持 JAXB ,XMLBeans,Java 5 和JAX-WS.并支持HTTP, JMS, XMPP, In-memory传输协议

    WebService生成详细步骤

    MyEclipse Web Services是建立在XFire Java SOAP框架和工具基础上的, ... XFire支持 Web Services standards,Spring 整合, 支持JBI , 支持 JAXB ,XMLBeans,Java 5 和JAX-WS.并支持HTTP, JMS, XMPP, In-memory传输协议.

    WebService with Apache CXF

    CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First...

    WebService例子.zip

    myEclipse10和JDK7创建WebService,包括发布和使用2个例子,实例源代码。可供大家参考。使用的是SUN公司自己的 JAX-WS 框架,没有使用 XFire和CXF等不流行的技术。

    wsdl2java源码-CXFDemo:一个关于CXF实现jax-ws规范的webservice

    一个关于CXF实现jax-ws规范的webservice #CXF框架 Apache CXF=Celtix+Xfire.是一个开源的一个webservice,可以与spring无缝集成。支持soap1.1、1.2、RESTtful或者CORBA。 ##使用CXF实现jax-ws规范的webservice ...

    webservice框架之CXF-详细技术参考

    CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First...

    CXF WEBSERVICE入门,非常详细实用

    CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First...

    MyEclipse6_5上基于JAX-WS开发Webservice(中文示例)

    不用说了,自己整理的。绝对实用,错过了是你的错

    Apache-CXF2.4.0-API.chm

    CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First...

    基于soa的E家园和个人通讯录

    包含两个项目,个人通讯录为服务器端,E家园为客服端,没有涉及框架技术,只是通过servlet,jsp,jdbc,xFire,JAX-WS等技术实现,代码均调试通过,希望对大家的java学习有帮助

    Java6中实现Web服务

    向您介绍在Java/J2EE环境下,实现Web服务的主要方法,它们分别是: (1) 使用JAX-WS 2.0来实现Web服务 (2) 使用Apache Axis来实现Web服务 (3) 使用Spring来实现Web服务 (4) 使用XFire来实现Web服务

    WebSer之CXF框架例子.docx

    Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services ,像 JAX-WS 。这些 Services 可以支持多种协议,比如:SOAP、XML/HTTP、RESTful HTTP 或者 CORBA ,并且可以在...

    Apache-cxf-学习笔记.docx

    CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First...

    cxf-2.5.2.jar

    CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First...

    ASP EXCEL导入SQL

    在Java语言中重要的两个以SOAP技术开始的网络服务框架XFire和Axis也把REST作为自己的另一种选择。它们的新的项目分别是ApacheCXF和Axis2.Java语言也制定关于REST网络服务规范:JAX-RS:JavaAPIforRESTfulWebServices...

Global site tag (gtag.js) - Google Analytics