`

Spring与jaxws整合搭建webservice服务端

阅读更多

最近项目里面需要将某些服务以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项目一个非常不错的选择。

分享到:
评论
2 楼 bigtian 2015-04-20  
zhang017 写道
basePath /ws/
@WebService(serviceName="soap")

怎么访问soap的wsdl?下面的这种方式访问不到。。。
http://ip:port/ws/soap?wsdl

应该是配置的问题,你的web服务是如何向外暴漏的?比如用spring的配置方式
1 楼 zhang017 2015-04-20  
basePath /ws/
@WebService(serviceName="soap")

怎么访问soap的wsdl?下面的这种方式访问不到。。。
http://ip:port/ws/soap?wsdl

相关推荐

    springboot+webservice搭建webservice服务端

    本教程将讲解如何使用Spring Boot来搭建一个Web Service服务端,并介绍如何利用Java客户端进行调用。 ### 一、Spring Boot与Web Service Spring Boot简化了Java应用的启动和配置,通过“约定优于配置”的原则,...

    springboot+webservice搭建webservice服务端及使用java客户端两种方式进行调用webservice接口

    首先,我们需要理解Spring Boot与CXF的整合。Spring Boot通过其自动配置特性简化了CXF的设置。我们可以通过添加`cxf-spring-boot-starter-jaxws`依赖到项目中来启动这个过程。在`pom.xml`文件中添加如下依赖: ```...

    搭建WebService服务端和客户端的jar报

    2. 集成方便:与Spring框架深度整合,可以方便地进行服务的配置和管理。 3. 强大的调试功能:提供SOAP消息跟踪和日志记录,便于问题排查。 4. 自动WSDL生成:可以从服务接口自动生成WSDL,简化开发流程。 总的来说...

    根据wsdl生成webservice服务端(3种方式)

    ### 生成WebService服务端的方法详解 #### 前言 在日常开发中,通常是由开发团队构建WebService服务端,客户端则通过服务端提供的WS-Definition Language (WSDL) 文件生成客户端代理并进行交互。但有时也会遇到特殊...

    源码-springboot+cxf实现webservice服务端

    本文将通过具体的源码示例,详细介绍如何在Spring Boot环境中使用CXF来搭建一个简单的WebService服务端。 #### 二、环境准备与依赖引入 为了确保项目的顺利进行,首先需要在`pom.xml`中添加相关的依赖: ```xml ...

    cxf开发webservice服务端

    【标题】:“CXF开发Web服务端” 在Java世界中,Apache CXF是一个流行的开源框架,用于构建和部署Web服务。它支持多种Web服务规范,包括SOAP、RESTful API以及WS-*扩展。CXF允许开发者以Java SE或Java EE环境轻松...

    CXF建立webservice服务端和客户端

    其对XML的支持使得数据交换更为规范和标准化,而与MySQL的集成则允许你将Web服务与后端数据库紧密结合,实现数据的持久化存储。在实际开发中,了解并掌握CXF的使用对于构建基于SOAP的服务是非常有价值的。

    SpringBoot/Java集成webservice服务端

    当我们谈论“SpringBoot/Java集成webservice服务端”时,我们实际上是在讨论如何利用Spring Boot这一强大的Java开发框架来构建和消费Web服务。Spring Boot简化了初始化、配置以及应用的部署流程,使得开发更高效。接...

    springboot2.1.5集成CXF3.2.5,webservice服务端

    总的来说,Spring Boot与CXF的集成为开发者提供了一个简洁、高效的Web Service服务端开发环境。通过以上步骤,你可以快速地创建、发布和调试你的服务,同时享受到Spring Boot带来的自动化配置和便捷性。在实际开发中...

    CXF和Spring整合开发的服务端及客户端

    将CXF与Spring整合,可以充分利用Spring的灵活性和CXF的强大功能,实现高效的服务端和客户端开发。 **服务端开发** 1. **创建服务接口**:首先定义服务接口,通常使用JAX-WS规范来创建。例如,创建一个名为`...

    cXF实现webservice 服务端和客户端

    本教程将深入探讨如何使用CXF来实现WebService服务端和客户端,帮助开发者更好地理解和应用这一强大的工具。 一、CXF概述 CXF是一个全方位的Web服务框架,它集成了多种协议和技术,如SOAP、REST、WS-*规范等,提供...

    Springboot整合CXF发布Web service和客户端调用(用户和密码验证)

    在IT行业中,Spring Boot是一个非常流行的微服务框架,它简化了Spring应用的初始化和配置。而Apache CXF则是一个强大的Web服务框架,用于创建和消费Web服务。本教程将详细介绍如何利用Spring Boot与CXF进行集成,以...

    WebService的CXF整合Spring

    4. **服务注册**:在Spring配置文件中,使用`jaxws:endpoint`标签将服务接口与实现类关联起来,并指定服务地址和服务端点实现。 5. **部署和测试**:将Spring配置文件加载到Spring应用上下文中,然后通过Spring的...

    cxf与spring整合,以及webservice传输验证demo

    在IT行业中,CXF和Spring框架的整合是构建高效、灵活的企业级Web服务的重要手段。本教程将深入探讨如何将Apache CXF与Spring框架结合,实现一个完整的Web服务传输验证的示例。CXF是一个开源服务框架,它支持多种Web...

    webservice cxf spring整合返回list,bean,string,json,xml项目完整实例

    【标题】:在Java EE环境中,使用Apache CXF与Spring框架整合实现Web服务,返回List、Bean、String、JSON及XML的完整项目实例 【描述】:本项目旨在展示如何在Java企业级应用(Java EE)中,通过Apache CXF框架创建...

    WebService客户端如何整合Spring

    ### WebService客户端与Spring框架的整合详解 在深入探讨如何将WebService客户端与Spring框架进行有效整合之前,我们先简要回顾一下Spring框架的核心优势:它提供了依赖注入(DI)和面向切面编程(AOP)的支持,...

    WebService开发服务端的两种方式:jdk、cxf

    本文将详细介绍使用JDK和CXF两种方式来开发WebService服务端。 一、JDK原生实现WebService(JAX-WS) 1. **JAX-WS概述**:Java API for XML Web Services (JAX-WS) 是Java平台上用于构建Web服务和客户端的API。它...

    结合spring使用CXF 2.5 * 做服务端和客户端开发

    分析这些文件可以帮助我们更深入地理解Spring与CXF的整合。 总结,结合Spring和CXF进行服务端和客户端开发涉及到服务接口定义、服务实现、Spring bean管理、CXF配置、客户端代理生成以及应用部署等多个步骤。通过...

    webservice cxf 整合spring例子源代码

    【标题】:Webservice CXF 整合Spring的实例源码解析 在Web服务开发中,Apache CXF是一个广泛使用的开源框架,它提供了创建、部署和管理Web服务的强大功能。CXF不仅支持SOAP,还支持RESTful API,使得开发者能够...

    CXF协议WebService+Spring客户端和服务端程序,实现了多数据源动态切换

    开发者可能使用了Spring的`@WebService`注解来声明服务接口,并使用CXF的`JAXWS-RI`或`JAXRS`组件来暴露这些服务。 另一方面,"DSG_CXF_WebClient_Test"可能包含了客户端代码,用于调用服务端的Web服务。这部分代码...

Global site tag (gtag.js) - Google Analytics