只列出部分核心代码, 其它代码都是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`和`@WebMethod`等JAX-WS注解来标记你的服务类和方法。这种方式使得代码更清晰,减少了XML配置的复杂性。 在部署方面,XFire插件可以...
- 使用XFire,你可以通过添加特定的注解(如@WebService)来标记你的类和方法,这样它们就会被识别为Web服务的操作。 - 接下来,你需要创建一个XFire实例,并配置服务端点地址。你可以通过XML配置文件或程序化方式...
你可以使用Java的JAX-RPC或JAX-WS规范来定义一个普通的Java接口,然后用XFire的注解来标记这个接口,使其成为Web服务接口。例如: ```java @WebService public interface HelloWorldService { @WebMethod String ...
虽然XFire不直接提供全面的安全解决方案,但它支持基于SOAP消息的安全特性,如WS-Security(Web Services Security),可以集成其他安全框架来实现身份验证、授权和加密等功能。 9. **与CXF的关系**: 随着时间的...
在IT领域,WebService是一种通过网络进行通信的标准方式,允许不同系统之间交换数据和实现功能共享。XFire是Java平台上的一个开源库,它为创建和消费Web服务提供了一种简单、高效的方法。这个基于XFire的WebService...
这通常是一个Java接口,使用JAX-WS注解(如`@WebService`、`@WebMethod`等)来声明服务和方法。例如: ```java import javax.jws.WebService; @WebService public interface HelloWorldService { @WebMethod ...
Spring框架是Java领域内非常流行的开发框架之一,与Xfire结合使用可以进一步提升开发效率和灵活性。 - **引入Spring依赖**:在项目的pom.xml文件中添加Spring相关的依赖。 - **配置Spring容器**:通过Spring的配置...
- 客户端通常需要处理身份验证、错误处理和重试机制,以确保与服务端的稳定通信。 4. **服务端开发**: - `WebServiceServer`则涵盖了服务的实现,它接收来自客户端的SOAP请求,执行相应的业务逻辑,然后返回响应...
6. **xfire-annotations.jar**:提供了基于注解的Web服务开发,通过在Java类和方法上添加特定的注解,可以轻松地声明Web服务接口和实现。 7. **xfire-i18n.jar**:处理国际化和本地化需求的模块,使得Web服务可以...
在本篇博客“XFire框架实现WebService(二)”中,我们将深入探讨如何使用XFire这一开源框架来构建和消费Web服务。XFire是Java平台上一个轻量级、高性能的Web服务实现,它允许开发者快速地将Java接口转换为SOAP Web...
XFire则提供了实现这些标准的工具和库。 2. **XFire架构**:XFire的架构包括几个关键组件,如服务模型、消息处理器、协议绑定和序列化机制。服务模型定义了服务接口,消息处理器处理SOAP消息,协议绑定负责将消息...
4. **强大的注解支持**:通过Java注解,开发者可以快速定义Web服务接口和实现。 5. **集成测试工具**:XFire提供了内置的测试框架,便于单元测试和集成测试。 【XFire的使用步骤】 1. **安装和配置**:首先,你...
【标题】"用XFire开发WebService+Spring注解"涉及的主要知识点是利用XFire框架创建Web服务,并结合Spring框架的注解进行服务的管理和集成。XFire是一个强大的Java Web Service实现,它允许开发者轻松地创建和消费...
它允许开发者在Spring配置中声明Web服务,通过注解来定义服务接口和实现,降低了配置文件的复杂性。 3. **注解配置Web服务**:在Spring中,我们可以使用`@WebService`、`@WebServiceRef`等注解来声明Web服务接口和...
它提供了一种直观的方式来定义服务接口和实现,然后自动将它们转换为Web服务。 2. **WSDL4J**: WSDL(Web Services Description Language)是一种XML格式,用于定义Web服务的接口、消息格式、操作和绑定。WSDL4J...
【标题】:“Web服务之XFire详解” 在IT行业中,Web服务是一种允许应用程序之间进行通信的标准方式...以上是对“Web服务之XFire”的详细解析,通过这些知识点,开发者可以更好地理解和应用XFire来构建和使用Web服务。
标题中的“xfire+spring+maven构建webservice服务器和客户端”揭示了本教程将围绕三个主要技术进行讨论:XFire、Spring和Maven。这三者都是Java开发中不可或缺的工具,尤其在构建Web服务方面。 XFire是早期的一个...