IDEA快速 实现 SpringMVC 整合xfire 发布 WebService 服务

文章目录

          • 一、idea快速搭建web项目
          • 二、xfire 服务方搭建
            • 1. pom依赖
            • 2. web.xml
            • 3. 创建一个entity
            • 4. 创建一个接口
            • 5. 创建接口实现类
            • 6. 在WEB-INF创建一个META-INF的目录
            • 7. 在META-INF创建一个xfire的目录
            • 8. 在xfire创建一个services.xml的目录
          • 二、xfire客户端搭建
            • 1. 创建xfire客户端(企业版本)
            • 2. xfire客户端调用

依赖名称依赖版本
spring4.3.10.RELEASE
xfire1.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对象 类型的信息 获取户信息接口*/@Overridepublic 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();@Autowiredprivate WSXfireClientUtils wsXfireClient;@Testpublic 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);}@Testpublic 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("gblfy@163.com").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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523763.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qt中QMap与QMultimap用foreach遍历

引言 若只是单独的遍历容器&#xff0c;不修改容器中元素的值&#xff0c;可以使用foreach来实现&#xff0c;比使用迭代器来遍历元素更简洁&#xff0c;使用foreach迭代器是创建了原来容器的副本&#xff0c;所有不能修改容器中数据。下面看两个示例。 示例 示例一 遍历QM…

腾讯面试:一条SQL语句执行得很慢的原因有哪些?

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a;帅地转自&#xff1a;苦逼的码农说实话&#xff0c;这个问题可以涉及…

QT中将float数转换为QString类型

概述 直接上代码&#xff0c;下面是示例&#xff1a; 示例一 float up 23.45; QString str QString::number(up ,f,2);示例二 float up 23.45; QString str QString::asprintf("%.2f",up);示例三 float up 23.45; QString str; str str.setNum(up,f,2);示…

分布式精华问答 | 分布式系统面临哪些挑战?​

布式的处理方式越来越受到业界的青睐——计算机系统正在经历一场前所未有的从集中式向分布式架构的变革。今天&#xff0c;我们就来看看关于分布式的精华问答吧&#xff01;1Q&#xff1a;什么是分布式缓存&#xff1f;A&#xff1a;为了提高性能和响应时间&#xff0c;在应用程…

Spring4.x集成xfire1.26 问题汇总

WebService专栏之xfire集成异常总览 文章目录一、asm.jar包冲突1.1 问题现象1.2 问题定位&#xff1a;1.3 解决方案&#xff1a;二、 Old 1.x singleton attribute in use2.1 问题现象2.2 问题定位2.3 解决方案&#xff1a;三、Unrecognized xbean element mapping3.1 问题定位…

qt中十进制转换为十六进制和二进制字符串,以及二进制字符串转十进制,十六进制字符串

概述 直接上代码&#xff0c;记录一下&#xff0c;方便日后使用&#xff1a; 示例一 将十进制转换为二进制和十六进制字符串&#xff1b; int num 23; QString str QString::number(num,16);//转换为十六进制 str QString::number(num,2);//转换为二进制示例二 将二进制…

如何使用「番茄法」高效的写算法题?

戳蓝字“CSDN云计算”关注我们哦&#xff01; 作者&#xff1a;侯振宇转自&#xff1a;五分钟学算法01 目的 持续做算法题的目的仍然是自身能力提升。可以继续细化成三点:保持思维敏捷。非常重要&#xff0c;状态好才能保持对编程的热情。对基础的数据结构、查找和排序保持熟练…

双因子认证(Two-factor authentication)

一、简介 简言之&#xff0c;双因素身份验证&#xff08;也称为“两步验证”&#xff09;是指身份验证涉及两个阶段——通常是除了常规密码&#xff09;之外的某种一次性密码&#xff08;OTP&#xff1a;One-Time Password&#xff09;。网上银行已经使用这种方法很长一段时间了…

Spring中,使用工具类无法自动注入service

这个问题我其实遇到很久了&#xff0c;目前解决方案是手动注入service&#xff0c;并且把工具类也手动注入。 场景&#xff1a; 在spring中&#xff0c;我们经常会定义工具类来做一些奇怪的事情&#xff0c;我当前是通过定时任务quarz调度工具类&#xff0c;工具类再调servic…

sizeof与strlen使用中的问题

概述 直接上代码&#xff0c;使用中经常会涉及到sizeof与strlen计算的问题&#xff0c;下面看例子&#xff1a; char *pstr "hello"; char pstr[] "hellonini"; char pstr[6] "hello";上述求sizeof(pstr)的值&#xff0c;分别为&#xff1a…

从人工智能到云,英特尔开源技术推动软件栈创新

戳蓝字“CSDN云计算”关注我们哦&#xff01;2019年英特尔开源技术峰会&#xff08;OSTS&#xff09; 【CSDN记者现场报道】5月14-16日&#xff0c;英特尔主办一年一度的开源技术峰会&#xff08;OSTS&#xff09;。该峰会源自2004年的一次内部会议&#xff0c;从最初只有几十个…

Axis2搭建WebService服务

使用Axis2搭建WebService服务 文章目录一、服务端部署1.1 在web.xml配置文件中添加映射路径&#xff1a;2. 创建目录及文件3. 新建服务接口4. 新建接口实现类5. 发布服务6. 浏览器测试二、客户端部署2.1 Axis2客户端通用工具类封装(企业版本)2.2 单元测试(命名空间默认)&#x…

c++实现引用计数

概述 当有指针指向同一块内存空间时&#xff0c;计数器加1&#xff0c;没增加一个指向该内存空间的指针&#xff0c;计数器加1&#xff0c;同理&#xff0c;当原本指向该内存空间的指针指向另一块内存&#xff0c;计数器减1&#xff0c;被指向的另一个内存的计数器加1。下面是…

焦虑的 BAT、不安的编程语言,揭秘程序员技术圈生存现状!

戳蓝字“CSDN云计算”关注我们哦&#xff01;【CSDN 编者按】在迭代不休的技术圈中&#xff0c;仅在过去的一个月期间&#xff0c;我们见证了有史以来第一张黑洞照片的诞生&#xff1b;经历了为让人义愤填膺的 996&#xff1b;思考了作为程序员的年龄之槛&#xff1b;膜拜了技术…

axis2手动设置命名空间targetNamespace

修改services.xml&#xff1a; name &#xff1a;你暴露的接口服务名 targetNamespace 命名空间 <service name"ws" targetNamespace"url" >,添加targetNamespace属性&#xff0c;然后添加标签&#xff1a; <schema schemaNamespace"url&…

5G精华问答 | 除了速度,5G还能带来什么?

从2016年以来&#xff0c;5G热度逐步攀升。作为下一代移动通信网络&#xff0c;如果用一个关键词来形容5G&#xff0c;那就是“快”。5G不仅会极大地改变人们现有的生活和工作方式&#xff0c;提升通信效率&#xff0c;还可以加大很多前沿技术和产品落地的可能性。今天&#xf…

Spring获取JavaBean的xml形式和注解形式

Spring获取JavaBean的xml形式和注解形式 文章目录一、用xml文件方式管理JavaBean1. 创建一个xml配置文件2. 将一个Bean交由spring创建并管理3. 获取Spring上下文&#xff0c;获取bean二、用注解获取Javabean1. 创建一个class配置java文件2. 将一个bean交由Spring创建并管理3. 获…

C++中两个栈实现一个队列

引言 首先看这个标题的时候&#xff0c;需要联想到栈和队列的特点&#xff0c;栈是先进后出&#xff0c;队列是先进先出。假如三个元素1&#xff0c;2&#xff0c;3&#xff0c;将这三个元素依次入栈1后&#xff0c;再将栈1中元素依次出栈放入到栈2中&#xff0c;栈1中只留下最…

Kube-OVN:基于OVN的开源Kubernetes网络实践

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;今天&#xff0c;许多企业开始运行Kubernetes集群&#xff0c;并从中受益。但我们仍然…

IntelliJ IDEA中创建xml文件

1、file—setting&#xff0c;左上角输入template&#xff0c;2、在左侧栏找到File And Code Templates3、中间选中Files4、点击号&#xff0c;添加模板5、输入模板名字&#xff1a;Name:mybatis-cfg.xml &#xff08;name可以自定义&#xff09;6、后缀名extension&#xff1a…