在前面的“5天学会jaxws-webservice教程”,我们讲了基本的jax-ws的使用。
Jax-ws是业界公认的标准的webservice,它已经成为了一个行业界标准,包括cxf,其实cxf也是调用的jax-ws为标准的基于spring的webservice框架。
同时,大家都知道世界上除了j2ee体系外,还存在.net体系,同时有过相关经验的同事们也知道用ws-security无非就是涉及到“加密”,“解密”,而JAVA的x509所涉及到的证书,公钥,私钥与.net体系之间是无法通用的。
但是webservice是因该属于无所谓语言的一个标准,因此为了让j2ee的webservice与.net的webservice能够互相调用(当然包括ws-security里的加密解密),SUN与微软联合推出了一个:WCF。
WCF是Windows Communication Foundation的缩写,原来代号为Indigo,它是MS为SOA(Service Oriented Architecture 面向服务架构)而设计的一套完整的技术框架。利用它能够开发出分布式(Distributed)应用程序,而且开发难度相比以前的.NETRemoting和ASP.NETXML Web Service等都有了大幅度的降低。
那么搞J2EE的人如何去支持这个WCF呢?我们不可能去用.net的语言在J2EE工程中写符合WCF的Webservice?
因此,SUN在jax-ws上推出了一套框架叫:metro,用于支持WCF的webservice.
在下面的介绍中,我们会先以一个jax-ws结合SSH框架的例子来作为一个承上启下的开头,现在开始我们的ws-security之旅吧。
该教程为基础篇,不涉及到QoS与wcf相关,只有阅读完了本教程,才能过渡到真正的jax-ws的ws-security。真正的可扩展的符合wcf标准的WebserviceQoS会在另一篇教程中(METRO)详细介绍。
1. 引入两个额外的jar包
jaxws-spring-1.8.jar与xbean-spring-2.8.jar。
2. 修改applicationContext.xml文件
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:ws="http://jax-ws.dev.java.net/spring/core"
xmlns:wss="http://jax-ws.dev.java.net/spring/servlet"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.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">
|
请注意红色加粗部分。
<bean id="roleQuery" class="com.cts.pip.ws.RoleQuery" />
<wss:binding url="/roleQueryService">
<wss:service>
<ws:service bean="#roleQuery" />
</wss:service>
</wss:binding>
|
ü 上面的描述,使得我们的Spring容器根据JAVA类: com.cts.pip.ws.RoleQuery生成相应的wsdl。
ü 这边的: wss:binding url映射的是我们的web.xml中映射的相应的servleturl。
来看我们的web.xml中如何去映射我们的servleturl的:
<servlet>
<servlet-name>jaxws-servlet</servlet-name>
<servlet-class>com.sun.xml.ws.transport.http.servlet.WSSpringServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>jaxws-servlet</servlet-name>
<url-pattern>/roleQueryService</url-pattern>
</servlet-mapping>
|
3. 们的webservice
package com.cts.pip.ws;
import javax.annotation.Resource;
import javax.jws.WebMethod;
import javax.jws.WebService;
import org.apache.log4j.Logger;
import com.cts.pip.dto.*;
import java.util.*;
import com.cts.pip.service.*;
@WebService
public class RoleQuery {
protected Logger log = Logger.getLogger(this.getClass());
@Resource
RoleService roleService;
@WebMethod
public List<RoleDTO> getRoles(){
List<RoleDTO> roleList=new ArrayList<RoleDTO>();
try{
roleList=roleService.queryRole();
log.info("roleList Size====="+roleList.size());
return roleList;
}catch(Exception e){
log.error(e);
return null;
}
}
}
|
可以看到,我们的这个类,可以直接annotation进一个由spring容器管理的service层,层我们的webservice可以集成spring,调用springcontext中管理的任何资源,相信这个实用阶值会比较大吧,对吧?呵呵。
4. 们的webservice成wsdl与生成相关的服务类
(如何编译参考5天学会jaxws-webservice教程第一天)。
把这个web应用发布到tomcat中去,启动tomcat。
输入:http://localhost:8080/backendmanagement/roleQueryService?wsdl
我们可以得到wsdl的输出。
打开soapui,生成一个soap测试客户端:
测试一下我们的soap测试客户端:
可以看到右边我们得到了3条输出,这就是webservice通过spring的service,spring的service通过hibernate的dao获得到数据的soap包。代表我们的webservice服备端已经发布成功。
5. 开发客户端
这边如何编译,如何引用wsdl生成客户端所需要的stub一并滤过,详细请参见:5天学会jaxws-webservice教程第一天中相关的内容,下面只给出实现的客户端,在这边我们使用的polling方式的webservice客户端。
package com.cts.pip.ws;
import javax.xml.ws.*;
import java.util.*;
import com.cts.pip.ws.*;
import ctsjavacoe.ws.fromjava.CollectionWS;
import ctsjavacoe.ws.fromjava.RtnMethodResponse;
public class JAXWSSPRINGPollingClient {
public static void main(String[] args) throws Exception {
RoleQueryService service = new RoleQueryService();
RoleQuery port = service.getRoleQueryPort();
Response<GetRolesResponse> getRoleAsync = port.getRolesAsync();
while (!getRoleAsync.isDone()) {
System.out.println("is not done");
}
List<RoleDTO> rtnList = new ArrayList<RoleDTO>();
try {
GetRolesResponse getRolesResponse = getRoleAsync.get();
rtnList = getRolesResponse.getReturn();
System.out.println("return size======" + rtnList.size());
for (RoleDTO r : rtnList) {
System.out.println(r.getRoleId() + " " + r.getRoleName());
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
|
分享到:
相关推荐
MyEclipse8_0中使用 JAX-WS 部署 WebService 实例 - 外衣 - 博客频道 - CSDN_NET.mht
基于jax-ws 实现的web service client和server端的demo程序。 注:如果使用的是 myeclipse 时 server 部署到tomcat 启动的时候会报错 解决办法:找到myeclipse安装目录下的 plugins 目录里 查找 webservices-rt.jar,...
JAX-WS方式开发和部署webservice应用,JAX-WS方式开发和部署webservice应用,JAX-WS方式开发和部署webservice应用,JAX-WS方式开发和部署webservice应用,JAX-WS方式开发和部署webservice应用
公司代码实现,简单的webservice服务 发布,实现客户端的调用。
欢迎下载JAX-WS实现WebService.zip。本压缩文件介绍了如何使用JAX-WS技术实现WebService 参考博客:http://blog.csdn.net/gaohuanjie/article/details/50523517
JAX-WS发布webservice例子,基于http://blog.csdn.net/yy_love_my/article/details/44938329所说的做的一个简单且能运行的列子,基于maven工程,如果使用servlet发布方式,执行命令:mvn tomcat7:run
以jdk1.6以上自带的jax-ws来发布webservice,压缩包里包含服务端和客户端,下载导入即可启动运行测试,有疑问的话欢迎咨询哈
利用myeclipse创建的 jax-ws demo
MyEclipse6_5上基于JAX-WS开发Webservice(中文示例)
Java 基于第三方插件实现WebService实在麻烦,尤其是要添加几十M的Jar包...还好,自从JDK 1.6开始,Java自身已经支持WebSeervice的开发即JAX-WS,附件是一个简单的示例,供入门参考。注意,JDK环境要求1.6及以上版本。
jax-ws webservice完整demo,包含所有jax-ws 2.2jar包。
使用JAX-WS开发WebService入门教程.pdf
webService部署tomcat需要的jax-ws 的完整jar包
jax-ws-webservice开发 通过myeclipse进行 jax-ws的开发及其客户的编写
基于JAX-WS实现的WebService服务 资源包含的文件如下: 1、JAX-WS实现WebService文档 2、WebService服务端实现源码 3、WebService客户端实现源码
讲解了从服务器端的开发,到Tomcat服务器部署,再到客服端调用,整个开发流程,并有实例代码
MyEclipse基于JAX-WS开发Webservice+WebserviceClient客户端调用.zip
JAX-WS使用教程 1、JAX-WS概述 2、创建Web Service 2.1 从java开始 2.1.1 运行wsgen 2.1.2 生成的WSDL和XSD 2.1.3 目录结构 2.2 从WSDL开始 2.2.1 运行wsimport 2.2.2 生成的java代码 2.3发布Web ...
使用 Eclipse JavaEE 开发 WebService 时,若选择手动创建原生的JAX-WS服务,需要导入此jar资源(教程详见我的博文https://blog.csdn.net/weixin_50604409/article/details/116399530)。 如果您同时装有 IntelliJ ...
NULL 博文链接:https://liuyunlong1229.iteye.com/blog/1678559