快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

澳门新匍京1:Java webservice security(安全)jaxws 教程1BR1. 引入两个额外的jar包BR2. 修改applicationContext.xml文件BR3. webservice



媒介:

在前面的“ Java webservice jaxws 教程”,我们讲了基础的jax-ws的应用。

Jax-ws是业界公认的标准的webservice,它已经成为了一个行业界标准,包括cxf,着实cxf也是调用的jax-ws为标准的基于spring的webservice框架。

同时,大年夜家都知道天下上除了j2ee体系外,还存在.net体系,同时有过相关履历的同事们也知道用ws-security无非便是涉及到“加密”,“解密”,而JAVA的x509所涉及到的证书,公钥,私钥与.net体系之间是无法通用的。

然则webservice是因该属澳门新匍京1于无所谓说话的一个标准,是以为了让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)具体先容。

jax-ws集成SSH框架

1. 引入两个额外的jar包

jaxws-spring-1.8.jar与xbean-spring-2.8.jar。

2. 改动applicationContext.xml文件

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">

请留意血色加粗部分。

ü上面的描述,使得我们的Spring容器根据JAVA类: com.cts.pip.ws.RoleQuery天生响应的wsdl。

ü这边的: wss:binding url映射的是我们的web.xml中映射的响应的servleturl。

来看我们的web.xml中若何去映射我们的ser澳门新匍京1vle澳门新匍京1turl的:

jaxws-servlet

com.sun.xml.ws.transport.http.servlet.WSSpringServlet

jaxws-servlet

/roleQueryService

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 getRoles(){

List roleList=new ArrayList();

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与天生相关的办事类

(若何编译参考http://www.fengfly.com/plus/view-210092-1.html )。

把这个web利用宣布到tomcat中去,启动tomcat。

输入:http://localhost:8080/backendmanagement/roleQueryService?wsdl

我们可以获得wsdl的输出。

打开soapui,天生一个soap测试客户端:

测试一下我们的soap测试客户端:

可以看到右边我们获得了3条输出,这便是webservice经由过程spring的se澳门新匍京1rvice,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.RtnMeth澳门新匍京1odResponse;

public class JAXWSSPRINGPollingClient {

public static void main(String[] args) throws Exception {

RoleQueryService service = new RoleQueryService();

RoleQuery port = service.getRoleQueryPort();

Response getRoleAsync = port.getRolesAsync();

while (!getRoleAsync.isDone()) {

System.out.println("is not done");

}

List rtnList = new ArrayList();

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();

}

}

}

转自:http://blog.csdn.net/lifetragedy/article/details/7212112

您可能还会对下面的文章感兴趣: