首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WebService入门初使用(一)创建WebService服务

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

作者头像
WindCoder
发布2018-09-20 16:10:05
2.4K0
发布2018-09-20 16:10:05
举报
文章被收录于专栏:WindCoderWindCoder

前言

本文所用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的包(至于如何命名,就看你心情了),如下图:

WebService入门初使用
WebService入门初使用

这里有两个主要类

  • 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则是我们需要访问的地址。

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

WebService入门初使用
WebService入门初使用

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

WebService入门初使用
WebService入门初使用

最初由于没有在接口和实现类的@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中的问题分享

相关下载

点击下载

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 服务端
    • 加入maven依赖
      • web.xml配置
        • 整合Spring配置
        • 参考资料
          • 相关下载
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档