Jax-ws在使用上很方便,也很轻量级。重点是他是jvnet(dev.java.net)的项目,是基于java标准的(JSR181)。

  不过它与Spring的整合相对麻烦,于此,我将自己的一些研究结果贴出来以供备忘和后来者参考。

  首先我们要有组件支持,包括三部分(我们需要他们的jar包):

    Spring

    jax-ws

    jaxws commons spring

  Spring就不用说了,如果大家使用MyEclipse的话就直接添加支持。

  jax-ws的jar包可以再网站上下载,或者搜索下载“jax-ws 2.2”。

  jaxws commons spring的jar包是中间件,这个可能不好下载,如果不适用maven的话可能就只能在网络上搜索下载“jaxws-spring-1.8”(包含不只一个jar包哦)。

  

  然后我们导入jar包并创建web项目。

    

  然后编写一个测试WebService类:

 package org.coderecord.blog;

 import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
import org.springframework.stereotype.Service; /**
* 测试服务类<br>
* Service注解为在使用Spring的packeage-scan功能进行自动装配<br>
* WebService注解中可以不传递参数<br>
* SOAPBinding中也可不传递参数,或者按照自己的需求进行更改
*/
@Service("helloWorldService")
@WebService(targetNamespace = "org.coderecord.blog")
@SOAPBinding(style = Style.RPC)
public class HelloWorldService { /* 使用Spring来注入dao或service吧
@Autowired
private XXDao xxDao;*/ /**
* 接口方法必须加上WebMethod注解
*/
@WebMethod
public void sayHello() {
System.out.println("Hello World!");
}
}

HelloWorldService

  然后修改applicationContext.xml,加上webservice的绑定,这里面有几个问题,对于wss和ws的schema必须加上:

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ws="http://jax-ws.dev.java.net/spring/core"
xmlns:wss="http://jax-ws.dev.java.net/spring/servlet" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://jax-ws.dev.java.net/spring/core
http://jax-ws.dev.java.net/spring/core.xsd
http://jax-ws.dev.java.net/spring/servlet
http://jax-ws.dev.java.net/spring/servlet.xsd"> <context:component-scan base-package="org.coderecord.blog">
</context:component-scan> <wss:binding url="/service/hello">
<wss:service>
<ws:service bean="#helloWorldService" />
</wss:service>
</wss:binding>
</beans>

applicationContext

  最后修改web.xml,修改几个地方:

    加上Spring的listener,并配置正确;

    加上WSSpringServlet的拦截。

 <?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- Start WebService Config -->
<servlet>
<servlet-name>JAXWSServlet</servlet-name>
<servlet-class>com.sun.xml.ws.transport.http.servlet.WSSpringServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JAXWSServlet</servlet-name>
<url-pattern>/service/hello</url-pattern>
</servlet-mapping>
<!-- End WebService Config -->
</web-app>

web

  最后就启动,搞定。

  访问localhost:8080/ExJaxwsSpring/service/hello?wsdl就是接口;访问localhost:8080/ExJaxwsSpring就是你的网站。

  

于2016-02-22:

有朋友说用新版Spring(Spring4.x)时产生“Caused by: java.lang.IllegalArgumentException: class com.sun.proxy.$Proxy5 has neither @WebSerivce nor @WebServiceProvider annotation”类似错误,这是由于“代理”类生成的子类(为了方便AOP)没有了@WebService注解。如果你不清楚Proxy和AOP,我举个栗子,你继承一个有注解的类,子类会继承父类的注解吗?

那么解决办法是在ws:service节点中加入一个impl属性约定继承的接口。例如

<wss:binding url="/service/hello">
<wss:service>
<ws:service bean="#helloWorldService" impl="org.coderecord.blog.HelloWorldService" />
</wss:service>
</wss:binding>

欢迎您移步我们的交流群,无聊的时候大家一起打发时间:

或者通过QQ与我联系:

(最后编辑时间2016-02-22 10:07:57)

Spring整合JAX-WS的更多相关文章

  1. CXF和spring整合遇到的问题:No bean named 'cxf' is defined

    今天在做ws和spring整合的时候,很不幸的遇到了这个问题,百度了好久,竟然没人遇到这个问题,后来谷歌了一下,都是遇到这个问题的了...在看到一篇文章中提到了cxf.xml,所以我果断的打开这个配置 ...

  2. Spring整合CXF,发布RSETful 风格WebService(转)

    Spring整合CXF,发布RSETful 风格WebService 这篇文章是承接之前CXF整合Spring的这个项目示例的延伸,所以有很大一部分都是一样的.关于发布CXF WebServer和Sp ...

  3. 13_CXF和Spring整合发布服务

    [服务端] 第一步:建立一个Web项目 第二步:填充CXF jar包 第三步:创建接口及服务类 [工程截图(对比之前的WebService_CXF_Server00)] [applicationCon ...

  4. Spring整合CXF步骤,Spring实现webService,spring整合WebService

    Spring整合CXF步骤 Spring实现webService, spring整合WebService >>>>>>>>>>>> ...

  5. Spring整合CXF,发布RSETful 风格WebService

    原文地址:http://www.cnblogs.com/hoojo/archive/2012/07/23/2605219.html 这篇文章是承接之前CXF整合Spring的这个项目示例的延伸,所以有 ...

  6. 【WebService】WebService之CXF和Spring整合(六)

    前面介绍了WebService与CXF的使用,项目中我们经常用到Spring,这里介绍CXF与Spring整合 步骤 1.创建一个Maven Web项目,可以参照:[Maven]Eclipse 使用M ...

  7. Java WebService 教程系列之 Spring 整合 CXF

    Java WebService 教程系列之 Spring 整合 CXF 一.引入 jar 包 <dependency> <groupId>org.apache.cxf</ ...

  8. 【jersey】 spring 整合jersey 实现RESTful webservice

         Jersey是一个RESTFUL请求服务JAVA框架,与常规的JAVA编程使用的struts框架类似,它主要用于处理业务逻辑层.与Struts类似,它同样可以和hibernate,sprin ...

  9. 30Mybatis_mybatis和spring整合-原始dao开发

    这篇文章很重要, 第一步:我们讲一下整合的思路: 我们以前要用Mybatis是需要sqlMapConfig.xml(这个配置文件需要配置dataource,以及mapper.xml文件.)sqlMap ...

  10. Spring整合WebSocket

    WebSocket,干什么用的?我们有了HTTP,为什么还要用WebSocket?很多同学都会有这样的疑问.我们先来看一个场景,大家的手机里都有微信,在微信中,只要有新的消息,这个联系人的前面就会有一 ...

随机推荐

  1. Java 中的反射机制

    JAVA反射机制 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的信息以及动态调用对象的方法的功能称为ja ...

  2. Asp.Net Web API 2第十一课——在Web API中使用Dependency Resolver

    前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 本文主要来介绍在Asp.N ...

  3. 自己动手写客户端UI库——事件机制(设计思路大放送)

    在上一篇文章中我们创建了一个Button控件,并把这个控件显示在界面上, 在这一篇文章中,我们将为这个控件增加一个事件和一个方法 一:怎么绑定事件的问题 在Winform中,我们对一个按钮绑定事件的方 ...

  4. Xperf Basics: Recording a Trace (the easy way)(转)

      http://randomascii.wordpress.com/2013/04/20/xperf-basics-recording-a-trace-the-easy-way/   Some ti ...

  5. 错误The request sent by the client was syntactically incorrect ()的解决

    http://www.cnblogs.com/xiandedanteng/p/4168609.html 这个错误是SpringMVC报出来的,见到它意味着html/jsp页面的控件名称 和 contr ...

  6. Atitti.java exp ast java表达式语法ast构造器

    Atitti.java exp ast java表达式语法ast构造器 /atiplat_cms/src/com/attilax/lang/AstParser.java 原理 分割tokens_sli ...

  7. Which Clang Warning Is Generating This Message?

    Which Clang Warning Is Generating This Message? 根据前面页面制作的pdf:clangwarninglist.pdf 百度网盘:http://pan.ba ...

  8. TL-WR702N 连接有线路由

    2015-12-23日 备忘录: 1. TL-WR702N一定要设置为 route模式,一定选择“动态ip”,而不是“PPPOE” 2.有线路由器 与  TL-WR702N 的IP不能在一个网段: 目 ...

  9. 教你如何删除WIN7系统文件以及无法删除的文件

    http://jingyan.baidu.com/article/2f9b480d6d42ce41cb6cc2cc.html 我不怎么会说话,就简单明了的说吧!当我们想删除一个文件时提示无法删除,有些 ...

  10. win7给C盘扩容

    win7给C盘扩容 需要给C盘在不重装系统的情况下进行扩容.在网上搜索了不少资料,包括使用系统自带的分区工具,PQ等软件,都没有成功.不小心看到了分区助手,使用之,迅速的解决了问题,而且解决的非常完美 ...