WebService入门初使用(一)创建WebService服务

前言

本文所用WebService基于maven-ssm-cxf,此处暂时仅使用做记录,后期看心情适当整理相关知识点。

服务端

加入maven依赖

首先pom.xml添加cxf的相关依赖,此处贴出的仅是cxf的相关依赖。

<properties>
    <cxf.version>3.1.8</cxf.version>
</properties>
   <!--cxf-->
    <!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-frontend-jaxws -->
    <dependency>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-rt-frontend-jaxws</artifactId>
      <version>${cxf.version}</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-core -->
    <dependency>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-core</artifactId>
      <version>${cxf.version}</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-transports-http -->
    <dependency>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-rt-transports-http</artifactId>
      <version>${cxf.version}</version>
    </dependency>

web.xml配置

接着我们需要配置一个CXF的servlet:

<!--定义一个cxf的servlet-->
  <servlet>
    <servlet-name>CXFServlet</servlet-name>
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>CXFServlet</servlet-name>
    <url-pattern>/webservice/*</url-pattern>
  </servlet-mapping>

整合Spring配置

接下来是最重要的一部,用Spring整合CXF:

在这之前新建一个CXF的包(至于如何命名,就看你心情了),如下图:

这里有两个主要类

  • IHelloService接口。
  • 实现IHelloService接口的HelloServiceImpl类。 代码如下:

IHelloService.java

其中就只定义了一个简单的say()方法。

package cn.wind.WebServiceE.webServices;

import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;

/**
 * Created by wind on 2016/11/15.
 */
@WebService(targetNamespace = "webServices.WebServiceE.wind.cn")
public interface IHelloSevice {
    @WebResult(name="Resultstr")
    public  String say(@WebParam(name="str" )String str,@WebParam(name="AA" )int a);
}

HelloServiceImpl.java

这里就是对say()方法的简单实现。

package cn.wind.WebServiceE.webServices.impl;

import cn.wind.WebServiceE.webServices.IHelloSevice;
import org.springframework.stereotype.Component;


import javax.jws.WebService;

/**
 * Created by wind on 2016/11/15.
 */
@Component("HelloWord")
@WebService(targetNamespace = "webServices.WebServiceE.wind.cn")
public class HelloserServiceImpl  implements IHelloSevice{
    @Override
    public String say(String str,int a ) {
        System.out.print("This is "+str);
        return "Hello "+str;
    }
}

接下来就是整合Spring了,由于需要使用到CXF的标签,所以我们需要添加额外的命名路径如下:

为了方便扩展,单独写了一个cxf配置文档,通过将如下代码放入spring.xml(Spring配置文档)中即可,具体路径需根据自己的实际情况做相应更改。

<import resource="classpath:conf/spring-cxf.xml"/>

spring-cxf.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:jaxws="http://cxf.apache.org/jaxws"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
        http://cxf.apache.org/jaxws
        http://cxf.apache.org/schemas/jaxws.xsd
        http://www.springframework.org/schema/context
	    http://www.springframework.org/schema/context/spring-context-3.0.xsd
       ">
    <import resource="classpath:META-INF/cxf/cxf.xml"/>
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
    <!-- 自动扫描webService -->
    <context:component-scan base-package="cn.wind.WebServiceE.webServices" />
    <!-- 定义webservice的发布接口  -->
    <jaxws:endpoint
            implementor="#HelloWord"
            address="/HelloWorld"></jaxws:endpoint>
</beans>

#helloWorld指的是我们在HelloWorldImpl类中所自定义的名字,/HelloWorld则是我们需要访问的地址。

附:此处所用文档目录如图:

之后我们运行项目输入该地址:http://localhost:8080/webservice/HelloWorld?wsdl如果出现如下界面:

最初由于没有在接口和实现类的@WebService后面添加 targetNamespace属性,导致红框部分的具体的参数没有被wsdl描述,只是放了一句 <soap:body use="literal"/> ,让人摸不着头脑。之后添加后,但是该属性使用正向命名(即:cn.wind.WebServiceE.webServices)时,后期客户端导出使用时相应java文件头部信息为

package webServices.WebServiceE.wind.cn

故之后,服务器端反向设置(即 :@WebService(targetNamespace = "webServices.WebServiceE.wind.cn")),后期客服端导出时将变为正向的

package cn.wind.WebServiceE.webServices

注:后来看资料,说targetNamespace“是服务端的包结构,不要暴露出去!”,故很多教程中这个属性都是用的网址,本文此处为了与后面的客户端部分简单统一,偷了点懒,暂时暴露就暴露吧。

参考资料

SSM(四)WebService入门详解

使用 CXF 构建WebService中的问题分享

相关下载

点击下载

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏潇涧技术专栏

Art of Android Development Reading Notes 2

(1)任何一个操作系统都需要有相应的IPC机制,Linux上可以通过命名通道、共享内存、信号量等来进行进程间通信。 (2)Android系统不仅可以使用Bin...

932
来自专栏黑泽君的专栏

day12_JavaWeb设计模式与案例学习笔记

    C/S:客户端 / 服务器 (胖客户端)比如:LOL、CS、魔兽世界。.exe安装文件。     B/S:浏览器 / 服务器(瘦客户端)比如:页游。网页...

982
来自专栏java达人

Log4j详细使用教程

日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录。在apache网站:jakarta.apache....

2385
来自专栏小筱月

SSM整合开发

controller:作为请求转发,调用service接口处理逻辑,页面所有路径的访问方法:控制层的命名空间+@RequestMapping的value ser...

4081
来自专栏阿杜的世界

Spring实战2:装配bean—依赖注入的本质主要内容

任何一个成功的应用都是由多个为了实现某个业务目标而相互协作的组件构成的,这些组件必须相互了解、能够相互协作完成工作。例如,在一个在线购物系统中,订单管理组件需要...

1282
来自专栏菩提树下的杨过

spring cloud 学习(4) - hystrix 服务熔断处理

hystrix 是一个专用于服务熔断处理的开源项目,当依赖的服务方出现故障不可用时,hystrix有一个所谓的断路器,一但打开,就会直接拦截掉对故障服务的调用,...

2105
来自专栏Java架构师学习

Spring面试底层原理的那些问题,你是不是真的懂Spring?

4584
来自专栏精讲JAVA

关于Spring底层原理面试的那些问题,你是不是真的懂Spring?

Spring 框架是一个为 Java 应用程序的开发提供了综合、广泛的基础性支持的 Java 平台。Spring帮助开发者解决了开发中基础性的问题,使得开发人员...

2K3
来自专栏用户2442861的专栏

Log4j详细使用教程

版权声明:本文为博主林炳文Evankaka原创文章,转载请注明出处http://blog.csdn.net/evankaka

1.7K1
来自专栏微服务生态

玩转EhCache之最简单的缓存框架

Ehcache是一个用Java实现的使用简单,高速,实现线程安全的缓存管理类库,ehcache提供了用内存,磁盘文件存储,以及分布式存储方式等多种灵活的cach...

7074

扫码关注云+社区

领取腾讯云代金券