最近项目里面需要将某些服务以webservice的形式向外部应用暴露API,在JAVA领域有很多选择,如:CXF,XFIRE,JAXWS等,考虑到不想引入太多依赖,就选择了使用JDK自带的JAXWS。
直接上代码吧,首先是Spring与JAXWS的集成:
<bean class="org.springframework.remoting.jaxws.SimpleHttpServerJaxWsServiceExporter">
<property name="server" ref="server" />
<property name="basePath" value="/ws/" />
<property name="authenticator" ref="authenticator" />
</bean>
上面代码使用了SimpleHttpServerJaxWsServiceExporter这个spring的类,主要是因为这个类提供了一个authenticator属性,可以达到验证IP的目的,而另外一个SimpleJaxWsServiceExporter则没有。
解释下上面3个属性的含义,server使用jdk自带的httpserver搭建了一个简易的http服务器来暴露web服务,这个server的配置可以通过spring配置如下:
<bean id="server" class="org.springframework.remoting.support.SimpleHttpServerFactoryBean">
<property name="port" value="8890" />
</bean>
authenticator定义验证器,此验证器需要继承com.sun.net.httpserver.Authenticator类,然后实现它的autenticate方法来验证IP地址,具体如下:
public class ApprovalSystemServiceAuthenticator extends Authenticator {
public Result authenticate(HttpExchange httpexchange) {
String ip = httpexchange.getRemoteAddress().getAddress().getHostAddress();
if (!("127.0.0.1".equals(ip))) {
return new Authenticator.Failure(403);
}
return new Authenticator.Success(null);
}
}
这样就完成了整个验证IP地址的过程了。
上面讲到了对客户端IP的验证,但是我们的应用有可能会在SOAP message里面加入一些认证信息,需要对SOAP信息作处理来做一些额外的验证,这时就用到了JAXWS的handler机制了。
见如下代码片段:
@Component
@WebService(serviceName="TestService")
@HandlerChain(file="handler-chain.xml") // 指定SOAP handler
public class TesServiceEndpoint {
@WebMethod
public String test() {
...
}
}
上面的代码中指定了一个handler的配置文件,这是一个责任链模式,在配置文件中包含有我们的handler处理的责任链,代码如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<javaee:handler-chains
xmlns:javaee="http://java.sun.com/xml/ns/javaee"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<javaee:handler-chain>
<javaee:handler>
<javaee:handler-class>com.xxx.ws.AuthenticationSoapHandler</javaee:handler-class>
</javaee:handler>
</javaee:handler-chain>
</javaee:handler-chains>
来看一下handler的代码:
public class AuthenticationSoapHandler implements
SOAPHandler<SOAPMessageContext> {
public boolean handleMessage(SOAPMessageContext context) {
Boolean isRequest = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if (!isRequest) {
SOAPMessage soapMsg = context.getMessage();
String username = soapMsg.getSOAPHeader().getElementsByTagName("username").item(0).getTextContent();
String password = soapMsg.getSOAPHeader().getElementsByTagName("password").item(0).getTextContent();
if (!(username.equals("admin") && password.equals("admin"))) {
return false;
}
}
}
}
上面的代码在soap消息被接收和发送时执行,依据isRequest为true还是false来判断是发送还是接收,然后再message header里面拿到用户名和密码进行验证,返回true和false表示验证成功和失败。
到此就完成了我们业务所需要的全部的校验过程了。
总的来说,jaxws的使用还是比较简单的,而且无需引入第三方的依赖,可以做为JAVA项目一个非常不错的选择。
分享到:
相关推荐
本教程将讲解如何使用Spring Boot来搭建一个Web Service服务端,并介绍如何利用Java客户端进行调用。 ### 一、Spring Boot与Web Service Spring Boot简化了Java应用的启动和配置,通过“约定优于配置”的原则,...
首先,我们需要理解Spring Boot与CXF的整合。Spring Boot通过其自动配置特性简化了CXF的设置。我们可以通过添加`cxf-spring-boot-starter-jaxws`依赖到项目中来启动这个过程。在`pom.xml`文件中添加如下依赖: ```...
2. 集成方便:与Spring框架深度整合,可以方便地进行服务的配置和管理。 3. 强大的调试功能:提供SOAP消息跟踪和日志记录,便于问题排查。 4. 自动WSDL生成:可以从服务接口自动生成WSDL,简化开发流程。 总的来说...
### 生成WebService服务端的方法详解 #### 前言 在日常开发中,通常是由开发团队构建WebService服务端,客户端则通过服务端提供的WS-Definition Language (WSDL) 文件生成客户端代理并进行交互。但有时也会遇到特殊...
本文将通过具体的源码示例,详细介绍如何在Spring Boot环境中使用CXF来搭建一个简单的WebService服务端。 #### 二、环境准备与依赖引入 为了确保项目的顺利进行,首先需要在`pom.xml`中添加相关的依赖: ```xml ...
【标题】:“CXF开发Web服务端” 在Java世界中,Apache CXF是一个流行的开源框架,用于构建和部署Web服务。它支持多种Web服务规范,包括SOAP、RESTful API以及WS-*扩展。CXF允许开发者以Java SE或Java EE环境轻松...
其对XML的支持使得数据交换更为规范和标准化,而与MySQL的集成则允许你将Web服务与后端数据库紧密结合,实现数据的持久化存储。在实际开发中,了解并掌握CXF的使用对于构建基于SOAP的服务是非常有价值的。
当我们谈论“SpringBoot/Java集成webservice服务端”时,我们实际上是在讨论如何利用Spring Boot这一强大的Java开发框架来构建和消费Web服务。Spring Boot简化了初始化、配置以及应用的部署流程,使得开发更高效。接...
总的来说,Spring Boot与CXF的集成为开发者提供了一个简洁、高效的Web Service服务端开发环境。通过以上步骤,你可以快速地创建、发布和调试你的服务,同时享受到Spring Boot带来的自动化配置和便捷性。在实际开发中...
将CXF与Spring整合,可以充分利用Spring的灵活性和CXF的强大功能,实现高效的服务端和客户端开发。 **服务端开发** 1. **创建服务接口**:首先定义服务接口,通常使用JAX-WS规范来创建。例如,创建一个名为`...
本教程将深入探讨如何使用CXF来实现WebService服务端和客户端,帮助开发者更好地理解和应用这一强大的工具。 一、CXF概述 CXF是一个全方位的Web服务框架,它集成了多种协议和技术,如SOAP、REST、WS-*规范等,提供...
在IT行业中,Spring Boot是一个非常流行的微服务框架,它简化了Spring应用的初始化和配置。而Apache CXF则是一个强大的Web服务框架,用于创建和消费Web服务。本教程将详细介绍如何利用Spring Boot与CXF进行集成,以...
4. **服务注册**:在Spring配置文件中,使用`jaxws:endpoint`标签将服务接口与实现类关联起来,并指定服务地址和服务端点实现。 5. **部署和测试**:将Spring配置文件加载到Spring应用上下文中,然后通过Spring的...
在IT行业中,CXF和Spring框架的整合是构建高效、灵活的企业级Web服务的重要手段。本教程将深入探讨如何将Apache CXF与Spring框架结合,实现一个完整的Web服务传输验证的示例。CXF是一个开源服务框架,它支持多种Web...
【标题】:在Java EE环境中,使用Apache CXF与Spring框架整合实现Web服务,返回List、Bean、String、JSON及XML的完整项目实例 【描述】:本项目旨在展示如何在Java企业级应用(Java EE)中,通过Apache CXF框架创建...
### WebService客户端与Spring框架的整合详解 在深入探讨如何将WebService客户端与Spring框架进行有效整合之前,我们先简要回顾一下Spring框架的核心优势:它提供了依赖注入(DI)和面向切面编程(AOP)的支持,...
本文将详细介绍使用JDK和CXF两种方式来开发WebService服务端。 一、JDK原生实现WebService(JAX-WS) 1. **JAX-WS概述**:Java API for XML Web Services (JAX-WS) 是Java平台上用于构建Web服务和客户端的API。它...
分析这些文件可以帮助我们更深入地理解Spring与CXF的整合。 总结,结合Spring和CXF进行服务端和客户端开发涉及到服务接口定义、服务实现、Spring bean管理、CXF配置、客户端代理生成以及应用部署等多个步骤。通过...
【标题】:Webservice CXF 整合Spring的实例源码解析 在Web服务开发中,Apache CXF是一个广泛使用的开源框架,它提供了创建、部署和管理Web服务的强大功能。CXF不仅支持SOAP,还支持RESTful API,使得开发者能够...
开发者可能使用了Spring的`@WebService`注解来声明服务接口,并使用CXF的`JAXWS-RI`或`JAXRS`组件来暴露这些服务。 另一方面,"DSG_CXF_WebClient_Test"可能包含了客户端代码,用于调用服务端的Web服务。这部分代码...