文档章节

基于J2EE应用发布WebService服务

蜡笔小小小新
 蜡笔小小小新
发布于 2015/12/27 20:17
字数 1274
阅读 159
收藏 16

1介绍

CXF号称是SOA框架,上一篇已经简单介绍了下WebService和CXF,这篇不再累述.

可能下面这张图可以很清楚地说明WebService在J2EE系统间的作用,比如系统间信息交互,或者新旧系统的整合等等.


2开发WebService服务端(提供服务的系统)

2.1新建项目

新建一个WEB项目,并且导入Spring和CXF至少所需要的JAR包,下面是这个项目的JAR,不过最好用maven管理这些依赖.

2.2搭建Spring+CXF环境

编写web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
    <display-name>SpringCXF_Server</display-name>

    <!-- Spring -->
    <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>
    
    <!-- 配置CXF请求Servlet -->
    <servlet>  
        <servlet-name>CXF</servlet-name>  
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>  
        <load-on-startup>1</load-on-startup>  
    </servlet>  
    <!-- 这里是拦截所有请求 -->
    <servlet-mapping>  
        <servlet-name>CXF</servlet-name>  
        <url-pattern>/*</url-pattern>  
    </servlet-mapping>  

</web-app>

在某个目录下新建一个spring容器配置文件:这里命名为applicationContext.xml

<?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:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jaxws="http://cxf.apache.org/jaxws"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
                     http://www.springframework.org/schema/beans/spring-beans.xsd 
                     http://www.springframework.org/schema/tx 
                     http://www.springframework.org/schema/tx/spring-tx.xsd 
                     http://www.springframework.org/schema/aop 
                     http://www.springframework.org/schema/aop/spring-aop.xsd
                     http://www.springframework.org/schema/context 
                       http://www.springframework.org/schema/context/spring-context-3.0.xsd
                       http://cxf.apache.org/jaxws  
                        http://cxf.apache.org/schemas/jaxws.xsd">


    <import resource="classpath:META-INF/cxf/cxf.xml" />
    <!-- apache-cxf3.0以上版本不在需要该xml
    <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /> -->
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

    <!-- 服务提供组件 -->
    <bean id="userServiceImpl" class="com.lin.ws.impl.UserServiceImpl"></bean>

    <!-- implementor参数默认是一个bean,为了使该参数依赖其他bean,在注入的时候写上"#id" 
            address是该服务的地址,默认是项目的地址+这里定义的参数,比如:http://locahost:8080/SpringCXF_Server/UserService-->
    <jaxws:endpoint id="userService" implementor="#userServiceImpl"
        address="/UserService" />

</beans>



2.3设计服务接口和实体类

package com.lin.ws.entity;

public class User {
    
    private Integer id;
    
    private String name;
    
    private String password;

    public User() {
        super();
        // TODO Auto-generated constructor stub
    }

    public User(Integer id, String name, String password) {
        super();
        this.id = id;
        this.name = name;
        this.password = password;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", password=" + password
                + "]";
    }

}



package com.lin.ws.intf;

import javax.jws.WebService;

import com.lin.ws.entity.User;

@WebService
public interface IUserService {
    
    public User login(String name,String password);

}


2.4编写接口实现类

package com.lin.ws.impl;

import javax.jws.WebService;

import com.lin.ws.entity.User;
import com.lin.ws.intf.IUserService;

//serviceName定义该服务的名称,将显示在wsdl文档中
@WebService(endpointInterface="com.lin.ws.intf.IUserService",serviceName="UserService")
public class UserServiceImpl implements IUserService {

    @Override
    public User login(String name, String password) {
        
        return new User(1, name, password);
    }

}


2.5发布服务

在tomcat里运行这个web项目就发布了服务,访问wsdl文档:http://locahost:8080/SpringCXF_Server/UserService?wsdl


系统的目录结构


3如何访问该服务

3.1开发客户端系统(该系统访问WebService服务)

新建一个web项目(例如该项目是基于Spring+Struts2的),导包,由于需要Jaxws的接口代理,也导入CXF的jar包

并写好各个xml文件....


3.2生成客户端代码

进入该项目的src目录,用wsdl2java生成java代码


3.3编写一个Struts2 action处理请求

package com.lin.ws.action;

import com.lin.ws.intf.IUserService;
import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {

    private static final long serialVersionUID = 1L;
    
    private IUserService userService;//服务端接口
    
    private String name;
    private String password;
    
    public IUserService getUserService() {
        return userService;
    }
    public void setUserService(IUserService userService) {
        this.userService = userService;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    
    @Override
    public String execute() throws Exception
    {
        System.out.println("Login Success"+userService.login(name, password).toString());
        
        return SUCCESS;
    }

}

在Spring容器里配置这个action,并且注入它依赖的接口:

<?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:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jaxws="http://cxf.apache.org/jaxws"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
                     http://www.springframework.org/schema/beans/spring-beans.xsd 
                     http://www.springframework.org/schema/tx 
                     http://www.springframework.org/schema/tx/spring-tx.xsd 
                     http://www.springframework.org/schema/aop 
                     http://www.springframework.org/schema/aop/spring-aop.xsd
                     http://www.springframework.org/schema/context 
                       http://www.springframework.org/schema/context/spring-context-3.0.xsd
                       http://cxf.apache.org/jaxws  
                        http://cxf.apache.org/schemas/jaxws.xsd">

    <bean name="loginAction" class="com.lin.ws.action.LoginAction">
        <property name="userService" ref="userService"></property>
    </bean>
    
    <!-- 配置webservice服务端接口代理,声明的id可用于依赖注入
            address的参数是该服务的地址 -->
    <jaxws:client id="userService" 
    serviceClass="com.lin.ws.intf.IUserService" 
    address="http://localhost:8080/SpringCXF_Server/UserService">
    </jaxws:client>

</beans>


在struts里面配置这个action:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">


<struts>

    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />
    <constant name="struts.objectFactory" value="spring" />
    <constant name="struts.i18n.encoding" value="UTF-8"></constant>
    
    <package name="default" namespace="/" extends="struts-default">
        <action name="login" class="loginAction">
        <result>/WEB-INF/content/success.jsp</result>
    </action>
    </package>

</struts>

然后运行,发送请求访问这个action......


系统的目录结构


4总结

一个基于Spring的J2EE系统发布了某些WebService服务,那么该系统就是服务的提供者,它对外提供一份WSDl文档用于它的客户访问它所提供的服务.


其次,客户在得到该WSDL文档后,在自己原有的系统或开发新系统来生成服务端接口代理,客户调用这些接口就像调用本地接口一样,从而实现多系统间信息交流或多系统整合.系统的

© 著作权归作者所有

共有 人打赏支持
蜡笔小小小新
粉丝 32
博文 114
码字总数 75210
作品 0
深圳
后端工程师
使用Axis+Eclipse开发webservice

使用Axis+Eclipse开发webservice 什么是webservice? 从架构师的角度来理解:webservice是一个软件系统,为了支持跨网络的机器间相互操作交互而设计。Web Service服务通常被定义为一组模块化...

李禾根
2012/10/09
0
0
jax-ws之webservice security(安全)续

前言: 在前面的“5天学会jaxws-webservice教程”,我们讲了基本的jax-ws的使用。 Jax-ws是业界公认的标准的webservice,它已经成为了一个行业界标准,包括cxf,其实cxf也是调用的jax-ws为标...

AbrahamLeeJay
2014/07/17
0
0
servelet,webservice,RMI的区别

最近项目中有提供或者调用别的接口,在纠结中到底是用servlet还是用webservice,所以上网查看了下他们以及RMI之间的区别,方便加深了解。 首先比较下servlet和webservice下 请求: servlet:...

疯狂的兔子
2014/08/05
0
0
bbossgroups cxf Webservice服务管理框架

Bboss aop 框 架中很好地集成了 apache cxf webservice 服务框架,原理如下图: 下面具体来介绍如果通过 bboss aop 框架来管理和发布基于 apache cxf webservice 服务框架的 webservice 服务...

bboss
2010/04/02
0
0
开发基于xfire的webservice的两种方式

一. 通过MyEclipse工具,导入webservice库到web project或新建webservice工程。自动将普通的javabean(必须要以接口和实现类的方式出现)发布为webservice。在WebRoot下生成一个WebServices目...

soothwolf
2013/09/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

windbg学习记录

我开始熟练使用windbg是从帮助手册开始的,也就是.hh命令。 就像学习windows开发从msdn开始一样,微软的产品虽然不开源,但是文档做的是相当的好。然而那些开源的东西呢?开源的竞争力其实就...

simpower
8分钟前
0
0
学习scala的网站汇总

https://www.codacy.com/blog/how-to-learn-scala/

Littlebox
10分钟前
0
0
配置本地的cloud9开发环境

前言 说到在线IDE开发环境,cloud9是不能绕过的,cloud9支持很多语言,默认支持的就有Node.js,Python,Ruby,PHP,Go,更逆天的是,他还支持数据库,包括MySQL,MongoDB,Redis,SQLite。但...

Kefy
14分钟前
0
0
springcloud应用程序上下文层次结构

如果您从SpringApplication或SpringApplicationBuilder构建应用程序上下文,则将Bootstrap上下文添加为该上下文的父级。这是一个Spring的功能,即子上下文从其父进程继承属性源和配置文件,因...

itcloud
19分钟前
0
0
新程序员最爱的免费资源

简评:国外美女程序员推荐了她自己用过的一些免费资源,对新手比较友好的那种。 原作者 Ali Spittel,是个美女程序员,以下这些资源都是她自己试过的。以下「我」代表 Ali Spittel。 学 HTML...

极光推送
22分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部