前面几篇
接下来介绍下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整合的过程中,XBean帮助解析Spring配置文件,将服务端点和服务实现类关联起来,确保Web服务的正确运行。此外,XBean还可以处理复杂的XML配置,提供更灵活的bean定义。 整合步骤大致如下: 1. ...
Java Web服务,特别是JAX-RS(Java API for RESTful Web Services)和Apache CXF,是企业级应用程序中实现服务接口的重要技术。本教程将深入探讨如何在SSH(Spring、Struts、Hibernate)架构中集成Web服务,以及如何...
Spring可以与JAX-WS集成,提供更高级的功能,如AOP(面向切面编程)和声明式事务管理。 5. **XFire**: XFire是早期的Web服务框架,后来被Apache CXF所取代。在MyEclipse 6.5时期,XFire提供了JAX-WS实现的替代...
spring-expression-3.0.7.RELEASE.jar,spring-hibernate3.jar,spring-jms-3.0.7.RELEASE.jar,spring-tx-3.0.7.RELEASE.jar,spring-web-3.0.7.RELEASE.jar,sqljdbc4.jar,stax2-api-3.1.1.jar,velocity-1.7.jar,WHICH_...
将JAX-WS与Spring整合,能够使Web服务的生命周期管理更加灵活和高效。 本实例“Jaxws+Spring整合”旨在演示如何在Spring环境中集成JAX-WS,实现一个完整的Web服务解决方案。首先,我们需要了解JAX-WS的基本概念和...
本教程将深入探讨如何在Spring框架中整合Apache CXF来构建JAX-WS Web服务。 首先,理解Spring和CXF的整合意义。Spring框架以其依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, ...
**JAX-WS与Apache CXF和Spring框架的整合** 在Java世界中,JAX-WS(Java API for XML Web Services)是用于构建和消费Web服务的标准API,它基于SOAP协议,提供了一种规范化的、面向服务的架构(SOA)实现方式。...
【标题】"webservice-simple-example" 是一个关于如何将 JAX-WS(Java API for XML Web Services)与 Spring 框架整合的示例项目。这个项目旨在展示如何在实际开发中创建、部署和调用基于 JAX-WS 的 Web 服务,并...
在本项目中,"springjax-ws"是一个演示示例,结合了Spring、JAX-WS和MyBatis,旨在帮助开发者了解如何在MyEclipse环境中配置和运行这样一个整合的应用。 首先,让我们深入理解Spring JAX-WS的核心概念。JAX-WS是一...
- 子文件01.jaxws_webservice.zip和02.jaxws_webservice_spring.zip:可能包含了使用JAX-WS创建的Web服务实例,02.zip可能展示了如何将JAX-WS与Spring框架整合,以提高服务的可管理和可测试性。 整合Spring框架: ...
Jersey是JAX-RS(Java API for RESTful Web Services)规范的实现,而Spring则是Java领域广泛应用的轻量级框架,它提供了丰富的功能,包括依赖注入、AOP(面向切面编程)以及服务管理。 首先,我们需要理解REST...
【标题】"cxf+spring 整合包" 涉及到的主要技术是Apache CXF和Spring框架的集成,这两个组件在企业级Java应用中广泛用于构建和消费Web服务。Apache CXF是一个开源的Java框架,它允许开发人员创建和实现Web服务,而...
总结,Spring Boot 2.4.8与Webservice的整合为开发者提供了便利,无论是选择JAX-WS还是Spring-WS,都能快速地构建起稳定可靠的Web服务。通过合理的配置和实践,开发者可以充分利用Spring Boot的优势,提高开发效率,...
本示例将深入探讨`jax-ws`与`Spring`框架的整合,这在企业级开发中非常常见,因为两者结合可以提供灵活、高效的Web服务解决方案。 首先,让我们理解`JAX-WS`(Java API for XML Web Services)。它是Java平台上的...
在开发Java Web应用程序时,Spring框架和Apache CXF常常被结合使用来构建高效、灵活的Web服务。Spring 3.0是Spring框架的一个重要版本,它引入了许多增强特性和优化,而CXF 3.1.4是Apache CXF的一个稳定版本,用于...
总结,Spring与CXF的整合使我们能够利用Spring的管理能力和CXF的Web Service功能,创建出高效、灵活的Web应用程序。这个示例中的"HelloWorld"服务只是一个起点,实际上你可以构建更复杂的服务来满足实际业务需求。...
【SSH REST WS JAX-RS Jersey 小网站后台及Web Service接口详解】 SSH(Spring、Struts、Hibernate)是Java Web开发中常见的三层架构,它整合了Spring的依赖注入、Struts的MVC模式和Hibernate的对象关系映射,提供...
Spring还支持与各种Web服务技术的集成,例如JAX-WS和JAX-RS,使得在Spring应用中使用和验证Web服务变得简单。 在"WebService验证与Spring整合"的主题中,主要涉及以下关键知识点: 1. **Spring与JAX-WS的整合**:...
将CXF与Spring整合,可以方便地创建、发布和消费SOAP接口,提升开发效率。以下将详细讲解这个主题。 1. **CXF框架介绍**:CXF,全称为CXF XFire,是一个用于构建和开发服务的开放源代码框架。它支持多种服务标准,...
将CXF与Spring整合的主要好处在于,可以利用Spring的强大管理和配置能力来管理CXF服务。Spring的DI可以帮助我们将CXF的服务bean与其他业务逻辑bean解耦,从而提高代码的可测试性和可维护性。此外,Spring还提供了对...