IDEA快速 实现 SpringMVC 整合xfire 发布 WebService 服务_xfire pom-程序员宅基地

技术标签: WebService  

依赖名称 依赖版本
spring 4.3.10.RELEASE
xfire 1.26
一、idea快速搭建web项目

在这里插入图片描述

二、xfire 服务方搭建
1. pom依赖
 <properties>
     <spring.version>4.3.10.RELEASE</spring.version>
    <xfire-all.version>1.2.6</xfire-all.version>
  </properties>

    <!--spring start-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!--spring end-->


    <dependency>
      <groupId>org.codehaus.xfire</groupId>
      <artifactId>xfire-all</artifactId>
      <version>${xfire-all.version}</version>
      </dependency>
2. web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>

 <!-- webservices 接口 XFire 需要引入的 Servlet Start -->
    <servlet>
        <servlet-name>XFireServlet</servlet-name>
        <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
    </servlet>
    <!-- 区配前缀 Start -->
    <servlet-mapping>
        <servlet-name>XFireServlet</servlet-name>
        <url-pattern>/servlet/XFireServlet/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>XFireServlet</servlet-name>
        <url-pattern>/xfireUser/services/*</url-pattern>
    </servlet-mapping>
    <!-- 区配前缀 End -->
    <!-- webservices 接口 XFire 需要引入的 Servlet End -->
</web-app>
3. 创建一个entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class User implements Serializable {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}
4. 创建一个接口
package com.gblfy.service;

public interface IXfireService {

    /**
     * 测试传递json类型 的User对象 类型的信息 获取户信息接口
     *
     * @param jsonUser
     * @return
     */
    public String getUser(String jsonUser);

}

5. 创建接口实现类
package com.gblfy.service.impl;

import com.gblfy.service.IXfireService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

@Service
@Slf4j
public class IXfireServiceImpl implements IXfireService {

    /**
     * 测试传递User对象 类型的信息 获取户信息接口
     */
    @Override
    public String getUser(String jsonUser) {
        log.info("接收的到 纽约 发送的报文 {}", jsonUser);
        return jsonUser;
    }
}

6. 在WEB-INF创建一个META-INF的目录
7. 在META-INF创建一个xfire的目录
8. 在xfire创建一个services.xml的目录

services.xml 配置内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans>
    <service xmlns="http://xfire.codehaus.org/config/1.0">
        <!--
            1. 暴露的服务名
            2. 自定义命名空间
            3. 接口路径
            4. 接口实现类路径 -->
        <name>IXfireService</name>
        <namespace>CustomNamespaces</namespace>
        <serviceClass>com.gblfy.service.IXfireService</serviceClass>
        <implementationClass>com.gblfy.service.impl.IXfireServiceImpl
        </implementationClass>
    </service>
</beans>

项目截图:
在这里插入图片描述

启动项目验证测试:
浏览器访问:

http://localhost:8081/XFireTest/services/HelloService?wsdl

注:

格式:http://ip地址:端口号/项目名/区配前缀/暴露的服务名
名称 说明
协议 http://
ip地址 localhost
端口号 8081
项目名 XFireTest
区配前缀 /services/和/servlet/XFireServlet/
暴露的服务名 HelloService
服务后缀 ?wsdl
部署服务器 tomcat9

命名空间和方法名已标注:
在这里插入图片描述
浏览器访问:

http://localhost:8081/XFireTest/servlet/XFireServlet/HelloService?wsdl

在这里插入图片描述

这样服务端就用哪个xfire发布服务成功了。

二、xfire客户端搭建
1. 创建xfire客户端(企业版本)
package com.gblfy.utils;

import lombok.extern.slf4j.Slf4j;
import org.codehaus.xfire.client.Client;
import org.springframework.stereotype.Repository;

import java.net.MalformedURLException;
import java.net.URL;

@Repository
@Slf4j
public class WSXfireClientUtils {
    
    /**
     * WSXfire 客户端
     *
     * @param url       代用地址
     * @param nameSpace 命名空间
     * @param method    方法名
     * @param tReqXml   请求报文
     * @return tResXml   响应报文
     * @throws MalformedURLException
     * @throws Exception
     */
    public static String wSXfireClient(String url, String nameSpace, String method, String tReqXml) throws Exception {
    
        long forStrTime = 0L;
        long endToStart = 0L;

        Client client = new Client(new URL(url));
        client.setProperty(nameSpace, method);
        log.info("开始转发请求报文******************************* {}", tReqXml);
        forStrTime = System.currentTimeMillis();
        Object[] result = client.invoke(method, new Object[]{
    tReqXml});
        log.info("响应报文: {}", result[0]);

        long forEndTime = System.currentTimeMillis();
        endToStart = (long) (forEndTime - forStrTime);
        log.info("转发消耗的时间: {}  毫秒", endToStart);

        String tResXml = (String) result[0];
        return tResXml;
    }
}
2. xfire客户端调用
package utils;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.gblfy.entity.User;
import com.gblfy.utils.WSXfireClientUtils;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
@Slf4j
public class WSXfireClientTest {
    

    //引入json工具类
    private static final ObjectMapper MAPPER = new ObjectMapper();

    @Autowired
    private WSXfireClientUtils wsXfireClient;

    @Test
    public void testXfireStrType() throws Exception {
    
        String url = "http://localhost:8080/xfireUser/services/IXfireService?wsdl";
        String nameSpace = "CustomNamespaces";
        String method = "getUser";
        String tReqXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" + "<bookstore>\r\n"
                + "    <book id=\"1\">\r\n" + "        <name>方国军</name>\r\n" + "        <author>乔治马丁</author>\r\n"
                + "        <year>2014</year>\r\n" + "        <price>89</price>\r\n" + "    </book>\r\n"
                + "    <book id=\"2\">\r\n" + "        <name>安徒生童话</name>\r\n" + "        <year>2004</year>\r\n"
                + "        <price>77</price>\r\n" + "        <language>English</language>\r\n" + "    </book>    \r\n"
                + "</bookstore>";
//        String tReqXml = "Xfire客户端调用成功";
        String message = wsXfireClient.wSXfireClient(url, nameSpace, method, tReqXml);
        log.info("返回报文 {}", message);
    }
    @Test
    public void testXfireObjToJsonStrType() throws Exception {
    
        String url = "http://localhost:8080/xfireUser/services/IXfireService?wsdl";
        String nameSpace = "CustomNamespaces";
        String method = "getUser";
        User user = new User().builder()
                .id(1l)
                .age(2)
                .email("[email protected]")
                .name("gblfy").build();
        // 1. 数据对象转jsonStr处理 易快速解析处理
        String tReqXml = MAPPER.writeValueAsString(user);
        String message = wsXfireClient.wSXfireClient(url, nameSpace, method, tReqXml);
        log.info("返回报文 {}", message);
    }
}

本文项目源码:https://gitee.com/gb_90/webserice-column

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_40816738/article/details/94166059

智能推荐

Git学习系列(一)初识Git-程序员宅基地

文章浏览阅读718次。Git作为一个版本控制工具,在工作中我们常常会用到它,尤其是在移动开发中,Git可谓是版本管理神器。下面让我们来认识一下Git:Git是一个分布式版本控制软件,它是由Linux的作者Linus用C写的一个分布式版本控制系统。如果大家对Git的历史比较感兴趣,可以点击链接进入官网了解:A Short History of GitGit主要特点有如下:1、速度:Git在本地上保存着所有

餐饮行业怎么才能玩转大数据?-程序员宅基地

文章浏览阅读154次。编者按:用数据将传统餐饮门店信息搬到线上,大众点评兴起;以数据化为基础,餐饮门店经营实现移动化,点单、叫号、排队模式火了。目前,餐饮行业的数据应用更多在供应链管理和餐饮门店运营状况实时监控分析,每个餐饮商家各自为战,实际数据的应用比大数据的应用更多,而大数据更多用于用户画像和少数大企业的经营管理。不过,基于大数据在电商的应用和餐饮的发展趋势,大数据的应..._如何获得每个城市的餐饮大数据

Dialog异常 Unable to add window, token not valid_token not valid-程序员宅基地

文章浏览阅读584次。好记性不如烂笔头问题描述 Activity 延时显示 Dialog ,在显示之前, Activity 已经销毁 报错 Unable to add window -- token android.os.BinderProxy@e6ee7d8 is not valid; is your activity running?问题分析 错误信息很明确,是没有 token 导致的. 而 toke_token not valid

基于SSH框架的电影订票系统网站的设计与实现-程序员宅基地

文章浏览阅读3.9k次。源码及论文:源码及论文下载:http://www.byamd.xyz/tag/java/开发计划1. 甘特图2. 开发计划简述如图所示在项目初期阶段,首先开始需求调研。需求调研阶段,我们将首先根据初期的会议内容考虑市场需求以及基本的市场现状,并根据以上的内容设计问卷来寻找痛点。我们准备使用第三方问卷工具,以电子问卷的方式来进行调查。初步预计会收到200份问卷。在需求调查阶段,同时开展对同类型的网站的评估工作。进入初步的需求分析阶段。目标是取得现有电影购票网站的基本购票流程,并对其交互等

异常的捕获和处理-程序员宅基地

文章浏览阅读3k次。异常的处理

ASP.NET Core微服务实战系列-程序员宅基地

文章浏览阅读510次。ASP.NET Core微服务实战系列 原文:ASP.NET Core微服务实战系列  希望给你3-5分钟的碎片化学习,可能是坐地铁、等公交,积少成多,水滴石穿,码字辛苦,如果你吃了蛋觉得味道不错,希望点个赞,谢谢关注。前言  这里记录的是个人奋斗和成长的地方,该篇只是一个系列目录和构想,并没有完全真正开弓。之所以有这个题目,是..._微服务 asp.net core

随便推点

Java NIO SocketChannel简述及示例_niosocketchannel-程序员宅基地

文章浏览阅读596次,点赞2次,收藏3次。SocketChannel简述及demoJAVA NIO之SocketChannel1. 简述2. 特点3. 解决问题4. demo功能5. 工作原理6. 代码示例7. 涉及知识扩充JAVA NIO之SocketChannel1. 简述NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,已经被越来..._niosocketchannel

docker内的debian9使用ntpdate同步时间时报错step-systime: Operation not permitted-程序员宅基地

文章浏览阅读3.8k次。场景在docker下使用tzselect设置时间,最后提示编辑profile追加TZ='Asia/Shanghai'; export TZvim/etc/profilesource /etc/profile发现时区正确了,但时间和宿主机相差几分钟....使用 ntpdate cn.pool.ntp.org同步时间提示ntpdate[534]: step-systime: Operation not permitted使用 ntpdate ntp.s..._step-systime: operation not permitted

基于功能安全的车载计算平台开发:硬件层面_mcu 不同通道 共因-程序员宅基地

文章浏览阅读537次,点赞18次,收藏6次。如果不具备关于复杂元器件的安全故障比例的详细信息,可假定安全故障的保守比例为50%,并假定通过内部自检和外部看门狗(表中的安全机制SM4)达到对违背安全目标的总体覆盖率为90%。这里的意图不是一定需要全面的分析,比如要求对于微控制器内或者来自于一个复杂的PCB板上任何理论可能的信号组合的桥接故障进行详尽的分析。根据硬件故障对安全目标产生影响的不同,硬件故障可分为安全相关故障与非安全相关故障,其中安全相关故障又进一步分为单点故障、残余故障、多点可探测故障、多点可感知故障、多点潜伏故障与安全故障。

VS2022无法启动程序(系统找不到制定的文件)问题_vs2022无法启动程序找不到指定文件-程序员宅基地

文章浏览阅读3.1w次,点赞47次,收藏108次。如何解决VS2022无法启动程序(系统找不到制定的文件)的问题。_vs2022无法启动程序找不到指定文件

Chapter4 The Relational Model_order pairs and cartesian product-程序员宅基地

文章浏览阅读756次。Chapter4 The Relational Model4.2TerminologyAn relational model is based on the mathematical concept of a relation,whichis phycisally represented as a table.4.2.1Relational Data Structurewe d_order pairs and cartesian product

java检查手机号是否被注册_【java】如何开发一个检测手机号注册过哪些网站的应用?...-程序员宅基地

文章浏览阅读707次。问题描述使用python或其它语言开发一个检测手机号注册过哪些网站的应用问题出现的环境背景及自己尝试过哪些方法在登陆一个很久没使用的网站时,原注册的手机号已弃用无法找回密码。所以希望有这么一款应用,能够在我输入手机号时列出注册过的网站,方便更换注册账号用的手机号目前的思路是,使用爬虫爬到网站中忘记密码的页面,然后输入手机号。这么做有几个问题:爬取忘记密码页面的通用规则该用什么思路去写关于验证码,我..._java 导入验证手机号是否注册某个网站