使用Simple Frontend+Aegis发布与调用Web服务详解

需积分: 9 0 下载量 153 浏览量 更新于2024-11-24 收藏 94KB DOC 举报
"使用Simple Frontend+Aegis方式发布并获取webservice" 在Java世界中,Web服务是应用程序之间交换数据和实现互操作性的重要手段。Apache CXF是一个流行的开源框架,它支持多种Web服务标准,如SOAP、REST和WS-*。本资源介绍了如何使用CXF的Simple Frontend和Aegis绑定来发布和消费Web服务,而无需使用JAX-WS API或者在业务接口上添加特定的注解。 首先,我们来看一下Simple Frontend。这个功能允许开发者将任意Java类直接发布为Web服务,极大地简化了Web服务的开发过程。它不需要在业务接口上声明@WebService或@WebMethod等注解,只需要定义与具体Web服务技术无关的业务接口。 例如,我们有一个名为`HelloWorld`的业务接口,其中包含一个`sayHello`方法,接收一个字符串参数并返回一个字符串结果: ```java public interface HelloWorld { String sayHello(String text); } ``` 接着,我们实现这个接口: ```java public class HelloWorldImpl implements HelloWorld { public String sayHello(String text) { return "Hello " + text; } } ``` 发布Web服务的关键在于`ServerFactoryBean`类,它是CXF提供的一个工具类,用于配置和创建服务器。在下面的示例中,我们创建一个`Server`类来启动Web服务: ```java import org.apache.cxf.frontend.ServerFactoryBean; public class Server { protected Server() throws Exception { HelloWorldImpl helloWorldImpl = new HelloWorldImpl(); ServerFactoryBean svrFactory = new ServerFactoryBean(); // 设置服务接口 svrFactory.setServiceClass(HelloWorld.class); svrFactory.setAddress("http://localhost:9000/Hello"); // 设置服务实现接口类 svrFactory.setServiceBean(helloWorldImpl); // 创建服务 svrFactory.create(); } public static void main(String[] args) throws Exception { new Server(); System.out.println("Server ready"); Thread.sleep(5 * 60 * 1000); System.out.println("Server exiting"); System.exit(0); } } ``` 这段代码将`HelloWorld`接口暴露在`http://localhost:9000/Hello`这个URL上,供客户端调用。 Aegis绑定是CXF的一个特性,它允许将Java对象直接映射到XML消息,而无需编写复杂的XML Schema定义。在上述例子中,由于没有明确指定绑定,CXF默认使用了Aegis绑定。这意味着`HelloWorld`接口的方法和参数将被自动转换为SOAP消息的一部分。 要测试发布的Web服务,可以通过发送HTTP请求到指定URL,如在浏览器中输入`http://localhost:9000/Hello?wsdl`,这将返回服务的WSDL描述,说明如何调用服务。客户端可以使用CXF的Client工厂或者自定义的客户端代码来消费这个服务。 使用Simple Frontend+Aegis的方式发布Web服务是一种简洁、高效的实践,尤其适合那些希望快速搭建原型或者不想被过多技术细节束缚的开发者。这种方式减少了代码量,提高了开发效率,同时也保持了代码的可读性和可维护性。