`
mj4d
  • 浏览: 302534 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JAX-WS:与web应用、spring的整合

阅读更多

前面几篇

接下来介绍下JAX-WS与其他容器的整合:servlet容器、spring等整合

1、与tomcat整合

JAX-WS与tomcat等servlet容器的整合,我能想到最简单的可能是直接用servlet将发布的代码写在起init方法内,如:

    public void init(ServletConfig servletConfig) throws ServletException {
        super.init(servletConfig);
        Endpoint.publish("http://localhost:8080/service/jaxWsService", new JaxWsServiceImpl());
    }

当然有更好的做法,在JAX-RT有提供与servlet集成的代理类,只需要在你项目中加上相应的依赖。下面是maven的依赖:

<dependency>
	<groupId>com.sun.xml.ws</groupId>
	<artifactId>jaxws-rt</artifactId>
	<version>2.1.4</version>
</dependency>

接下里按照之前的流程编写服务端代码:

@WebService
public class JaxWsWebServiceImpl implements JaxWsWebService {

    @WebMethod
    public @WebResult
    String getMessage() {
        return "Hello";
    }

}

由于默认是document-style需要生成返回的代理类:

F:\git\webservice\sws\sws-server\target\classes>wsgen -verbose -keep -cp . -wsdl org.ws.server.ws.chap8.impl.JaxWsWebServiceImpl

接下来是对web.xml的配置:需要加入一个监听器和servlet实例:

<listener>
	<listener-class>
		com.sun.xml.ws.transport.http.servlet.WSServletContextListener
	</listener-class>
</listener>

<servlet>
	<servlet-name>helloJaxWs</servlet-name>
	<servlet-class>
		com.sun.xml.ws.transport.http.servlet.WSServlet
	</servlet-class>
	<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
	<servlet-name>helloJaxWs</servlet-name>
	<url-pattern>/helloJaxWsWeb</url-pattern>
</servlet-mapping>

还需要一个指定名为sun-jaxws.xml位于/WEB-INF/下:

<?xml version="1.0" encoding="UTF-8"?>
<endpoints
	xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"
	version="2.0">
	<endpoint
		name="helloJaxWsWeb"
		implementation="org.ws.server.ws.chap8.impl.JaxWsWebServiceImpl"
		url-pattern="/helloJaxWsWeb"/>
</endpoints>

在tomcat下运行该工程,访问即可:

http://localhost/sws-server/helloJaxWsWeb?wsdl

这样就完成了与web容器的集成,但是这样会引进很多依赖的包,见jaxws-rt-2.1.3.jar的MANIFEST.MF:

Major-Version: 2.1.3
Class-Path: jaxws-api.jar jsr181-api.jar jsr250-api.jar saaj-api.jar s
 aaj-impl.jar jsr173_api.jar sjsxp.jar resolver.jar jaxb-api.jar jaxb-
 impl.jar activation.jar stax-ex.jar streambuffer.jar stax-utils.jar

2、与spring的整合

这里主要考虑spring原生提供的对JAX-WS的支持,位于spring-web-xxx.jar下,分别是SimpleJaxWsServiceExporter和 SimpleHttpServerJaxWsServiceExporter

1、SimpleJaxWsServiceExporter
继承自AbstractJaxWsServiceExporter,在bean的初始化方法发布
@Override
protected void publishEndpoint(Endpoint endpoint, WebService annotation) {
	endpoint.publish(calculateEndpointAddress(endpoint, annotation.serviceName()));
}
 与我们之前介绍的
Endpoint.publish("http://localhost:8080/service/helloJaxWs", new HelloJAXWSImpl());
 类似,下面是一个配置:
@WebService(serviceName = "jaxWsSpringService")
public class JaxWsSpringServiceImpl implements JaxWsSpringService {

    @WebMethod
    public String sayHello() {
        return "Hello JaxWs-Spring";
    }

}
 注意这里serviceName需要指定,见上面的annotation.serviceName(),作为访问的方法。下面是spring的配置文件:
<bean class= "org.springframework.remoting.jaxws.SimpleJaxWsServiceExporter">
	<property name="baseAddress" value="http://localhost:8888/service/"></property>
</bean>
<bean class="org.ws.server.ws.chap6.impl.JaxWsSpringServiceImpl"/>
 在web容器或其他方式运行,这里在main方法测试:
ClassPathXmlApplicationContext xmlApplication = new ClassPathXmlApplicationContext("jaxws-spring.xml");
 页面访问http://localhost:8888/service/jaxWsSpringService?wsdl即可

2、SimpleHttpServerJaxWsServiceExporter
同样继承自AbstractJaxWsServiceExporter,在bean的初始化方法发布于SimpleJaxWsServiceExporter类似,只是采用的自定义的HttpServer:
@Override
protected void publishEndpoint(Endpoint endpoint, WebService annotation) {
	endpoint.publish(buildHttpContext(endpoint, annotation.serviceName()));
}
 其中
protected HttpContext buildHttpContext(Endpoint endpoint, String serviceName) {
	String fullPath = calculateEndpointPath(endpoint, serviceName);
	HttpContext httpContext = this.server.createContext(fullPath);
	if (this.filters != null) {
		httpContext.getFilters().addAll(this.filters);
	}
	if (this.authenticator != null) {
		httpContext.setAuthenticator(this.authenticator);
	}
	return httpContext;
}
 因此采用这种配置需要制定server实例,当然也可以配置filters,authenticator等更多的扩展。如一个典型的制定ip访问
public class AuthHandler extends Authenticator {

    @Override
    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);
    }

}
 具体配置如下:
<bean class="org.springframework.remoting.jaxws.SimpleHttpServerJaxWsServiceExporter">
	<property name="server" ref="server" />
	<property name="basePath" value="/ws/" />
	<property name="authenticator" ref="authenticator" />
</bean>

<bean id="server" class="org.springframework.remoting.support.SimpleHttpServerFactoryBean">
	<property name="hostname" value="localhost" />
	<property name="port" value="8890" />
</bean>

<bean id="authenticator" class="org.ws.server.ws.chap6.impl.AuthHandler"/>
 页面访问http://localhost:8890/ws/jaxWsSpringService?wsdl如果host正确即可见到wsdl文档,否则HTTP 错误 403(Forbidden):服务器拒绝执行该请求

 

分享到:
评论

相关推荐

    jax-ws与spring整合jar包下载

    在Android开发中,虽然JAX-WS并不是首选的Web服务技术(通常使用Retrofit或Volley等现代HTTP库),但理解JAX-WS与Spring的整合有助于开发者在其他Java项目中实现Web服务。同时,这些知识也可以帮助开发者更好地理解...

    java_webservice_JAX-RS.zip_cxf_jax_jax-rs_spring cxf

    CXF与Spring的整合** 将CXF与Spring框架结合,可以利用Spring的依赖注入和管理能力,使得Web服务的配置更加灵活。在Spring应用上下文中,我们可以声明CXF的Servlet或监听器,然后通过注解或XML配置来定义服务。...

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

    Spring可以与JAX-WS集成,提供更高级的功能,如AOP(面向切面编程)和声明式事务管理。 5. **XFire**: XFire是早期的Web服务框架,后来被Apache CXF所取代。在MyEclipse 6.5时期,XFire提供了JAX-WS实现的替代...

    Jaxws+Spring整合实例

    **正文** 在IT行业中,Java应用开发经常涉及到服务的提供与调用,而JAX-WS(Java API for XML Web Services)就是Java...通过研究这些文件,可以更深入地理解JAX-WS与Spring的整合过程,并将其应用到自己的项目中。

    webservice-simple-example

    【标题】"webservice-simple-example" 是一个关于如何将 JAX-WS(Java API for XML Web Services)与 Spring 框架整合的示例项目。这个项目旨在展示如何在实际开发中创建、部署和调用基于 JAX-WS 的 Web 服务,并...

    Spring-JAXWS-CXF:Spring with apache CXF intigration for JAX-WS

    通过研究这些文件,你可以深入了解Spring和CXF的整合,以及如何使用它们来创建和部署JAX-WS Web服务。 总结来说,Spring与Apache CXF的整合提供了强大的Web服务开发能力,结合了Spring的灵活性和CXF的Web服务实现...

    springjax-ws

    在本项目中,"springjax-ws"是一个演示示例,结合了Spring、JAX-WS和MyBatis,旨在帮助开发者了解如何在MyEclipse环境中配置和运行这样一个整合的应用。 首先,让我们深入理解Spring JAX-WS的核心概念。JAX-WS是一...

    JAX-WS-Web-Service-with-Apache-CXF-and-Spring-frameworks

    **JAX-WS与Apache CXF和Spring框架的整合** 在Java世界中,JAX-WS(Java API for XML Web Services)是用于构建和消费Web服务的标准API,它基于SOAP协议,提供了一种规范化的、面向服务的架构(SOA)实现方式。...

    song-ws.zip

    总结,Spring Boot 2.4.8与Webservice的整合为开发者提供了便利,无论是选择JAX-WS还是Spring-WS,都能快速地构建起稳定可靠的Web服务。通过合理的配置和实践,开发者可以充分利用Spring Boot的优势,提高开发效率,...

    WebService.zip

    - 子文件01.jaxws_webservice.zip和02.jaxws_webservice_spring.zip:可能包含了使用JAX-WS创建的Web服务实例,02.zip可能展示了如何将JAX-WS与Spring框架整合,以提高服务的可管理和可测试性。 整合Spring框架: ...

    ssh rest ws jax-rs jersey 做的小网站后台及web service接口

    【SSH REST WS JAX-RS Jersey 小网站后台及Web Service接口详解】 SSH(Spring、Struts、Hibernate)是Java Web开发中常见的三层架构,它整合了Spring的依赖注入、Struts的MVC模式和Hibernate的对象关系映射,提供...

    cxf+spring 整合包

    - CXF JAX-WS:用于实现SOAP Web服务 - CXF JAX-RS:用于实现RESTful Web服务 - CXF Transports:不同协议的支持,如HTTP、HTTPS - CXF Tools:如WSDL生成器、代码生成器等 - Spring Integration:CXF与Spring...

    webservice详细例子

    本示例将深入探讨`jax-ws`与`Spring`框架的整合,这在企业级开发中非常常见,因为两者结合可以提供灵活、高效的Web服务解决方案。 首先,让我们理解`JAX-WS`(Java API for XML Web Services)。它是Java平台上的...

    webServiceSprin整合jar包apache-cxf-2.5.9.rar

    总的来说,Apache CXF 2.5.9与Spring的整合是开发高效、灵活的Web服务的一个强大组合。它提供了丰富的功能,易于使用,并且可以很好地融入Spring的生态系统中。如果你需要最新的版本或者其他特定功能,可以通过官方...

    cxf.apache.org/schemas/(jaxrs.xsd、jaxrs.xsd、core.xsd)文件下载

    Apache CXF是一个开源的服务框架,它支持多种Web服务标准,包括JAX-WS和JAX-RS。在本文中,我们将深入探讨与标题和描述相关的知识点,主要关注JAX-RS和CXF的集成,以及如何利用xsd文件来增强IDE的配置提示。 JAX-RS...

    webservice-cxf-spring-jar.zip

    5. **JAX-WS和JAX-RS**:JAX-WS是Java API for XML Web Services的缩写,用于创建SOAP Web服务。JAX-RS是Java API for RESTful Web Services的缩写,用于实现RESTful服务。 6. **依赖管理**:在Java项目中,依赖...

    maven - spring4.1.6和cxf3.0.8 WebService整合代码

    总结,Spring与CXF的整合使我们能够利用Spring的管理能力和CXF的Web Service功能,创建出高效、灵活的Web应用程序。这个示例中的"HelloWorld"服务只是一个起点,实际上你可以构建更复杂的服务来满足实际业务需求。...

    webservice

    3. **JAX-WS (Java API for XML Web Services)**:由 Sun Microsystems 开发并成为 Java EE 规范的一部分,JAX-WS 是一种用于构建 SOAP 基于 XML 的 Web 服务的标准 API。它是 Java 平台上构建 Web 服务的主要选择之...

    apache-cxf-2.2.6.zip webservice cxf开发利器完整开发包

    3. **JAX-WS支持**:CXF提供了对Java API for XML Web Services (JAX-WS)的强大支持,允许开发者使用Java注解轻松创建SOAP Web服务。JAX-WS标准定义了如何在Java中表示Web服务接口和服务端点。 4. **JAX-RS支持**:...

    CXF整合spring实现SOAP接口开发

    - JAX-WS:Java API for XML Web Services,是Java平台上的SOAP标准,CXF基于此API实现服务端和客户端。 - 编写SOAP消息:SOAP消息包含Header和Body,使用XML格式,CXF提供了便利的工具类来构建和解析这些消息。 ...

Global site tag (gtag.js) - Google Analytics