文章目录
- 一、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客户端调用
依赖名称 | 依赖版本 |
---|---|
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对象 类型的信息 获取户信息接口*/@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