webservice接口示例(spring+xfire+webservice)

CreateTime--2018年4月2日17:36:07

Author:Marydon

一、准备工作

  1.1 jar包

  springjar包,xfire jar包,webservicejar包

  1.2 目录结构

二、代码设计

  web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>demo_WebService</display-name> <!-- spring的核心配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-applicationContext.xml</param-value>
</context-param> <!-- spring的监听器,用于在服务器开启的时会自动加载spring的配置文件 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <!-- xfire的核心servlet,用于发布webservice服务 -->
<servlet>
<servlet-name>XFireServlet</servlet-name>
<servlet-class>org.codehaus.xfire.spring.XFireSpringServlet</servlet-class>
<!-- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> -->
<!-- 用于标记容器是否在启动的时候就加载这个servlet -->
<!-- 当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;
当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。
正数的值越小,启动该servlet的优先级越高。
如果我们在web.xml中设置了多个servlet的时候,可以使用load-on-startup来指定servlet的加载顺序,服务器会根据load-on-startup的大小依次对servlet进行初始化。不过即使我们将load-on-startup设置重复也不会出现异常,服务器会自己决定初始化顺序。
-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<!-- 在这个URI下开放WebService服务,即该路径下的所有请求由XFireSpringServlet接管 -->
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

  spring-applicationContext.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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd"> <!--加载webservice 组件的配置-->
<import resource="config/spring-webService.xml"/> </beans>

  spring-webService.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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> <!-- 引入XFire预配置信息 -->
<import resource="classpath:org/codehaus/xfire/spring/xfire.xml" /> <!-- 接口业务实现 -->
<bean id="servicTestImpl" class="webService.impl.ServiceTestImpl">
<!-- 这里可以配置数据层 -->
<!-- <constructor-arg index="0" ref="daoVIRTUAL_CARD"/> -->
</bean> <!--
java接口类的名称就是webservice的(访问该接口的)名称,无法自定义接口的名称
class-使用XFire导出器
-->
<bean id="myFirstInterface" class="org.codehaus.xfire.spring.remoting.XFireExporter">
<!-- 引用xfire.xml中定义工厂 -->
<property name="serviceFactory" ref="xfire.serviceFactory"/>
<!-- 引用xfire.xml中定义的xfire实例 -->
<property name="xfire" ref="xfire"/>
<!-- 提供服务接口的实现类 -->
<property name="serviceBean" ref="servicTestImpl" />
<!-- 提供服务的接口,这个接口是向客户端进行暴露,里面的方法都可以被客户端所访问 -->
<property name="serviceClass" value="webService.IServiceTest"/>
</bean> </beans>

  IServiceTest.java

package webService;

/**
* webservice接口测试
* @author Marydon
* @createTime 2018年3月9日上午9:32:11
* @updateTime
* @Email:Marydon20170307@163.com
* @version:1.0.0
*/
public interface IServiceTest {
/**
* 获取用户信息
* @return
*/
public String getUserInfo(String xml);
}

  ServiceTestImpl.java

package webService.impl;

import org.apache.commons.lang.StringUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper; import webService.IServiceTest; /**
* webservice接口测试实现类
* @author Marydon
* @createTime 2018年3月9日上午9:38:09
* @updateTime
* @Email:Marydon20170307@163.com
* @version:1.0.0
*/
public class ServiceTestImpl implements IServiceTest { @Override
public String getUserInfo(String xml) {
// 返回xml信息
String xmlResult = "";
try {
// 1.解析xml,获取document对象
Document document = DocumentHelper.parseText(xml);
System.out.println(document.asXML().toString());
// 获取参数id的值
String id = document.selectSingleNode("//userId").getText(); // 2.参数校验
if (!StringUtils.isEmpty(id)) {
StringBuffer sb = new StringBuffer();
sb.append("<Response>");
// 姓名
sb.append("<userName>").append("Marydon").append("</userName>");
sb.append("<error_text>").append("成功").append("</error_text>");
sb.append("</Response>");
Document bodyDoc = DocumentHelper.parseText(sb.toString());
xmlResult = bodyDoc.getRootElement().asXML();
System.out.println(xmlResult);
} else {
// 返回错误信息
xmlResult = this.returnErrorXml("id为空!");
}
System.out.println(xmlResult); } catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} return xmlResult;
} /**
* 返回错误信息
* @param errorMsg
* @return
* @throws DocumentException
*/
private static String returnErrorXml(String errorMsg) throws DocumentException { // 返回xml信息
String xmlResult = "";
StringBuilder sb = new StringBuilder();
sb.append("<Response>");
sb.append("<error_text>").append(errorMsg).append("</error_text>");
sb.append("</Response>");
Document bodyDoc = DocumentHelper.parseText(sb.toString());
xmlResult = bodyDoc.getRootElement().asXML();
System.out.println("XML:" + xmlResult);
return xmlResult;
}
}

三、测试阶段

  1.是否接口是否发布成功:

  在浏览器中打开上面的接口地址:http://127.0.0.1:8070/demo/services/IServiceTest?wsdl,

  如果出现wsdl文档,则表示发布成功。

  2.测试数据传输:

  方法一:借助工具SoapUI

  方法二:使用java借助xfire调用接口

  相关推荐里↓↓↓有介绍。

四、总结

  使用xfire发布webservice服务有两种方式:

  1.使用org.codehaus.xfire.spring.XFireSpringServlet来管理webservice请求
  使用这种方式,/services,即http://127.0.0.1:8070/demo_WebService/services
  会显示出项目下所有的接口信息
  另外,接口的名称和定义的Java接口名称一致,其访问路径就是:接口名称+"?wsdl"
  并且,接口的访问路径无法自定义修改  

  2.使用org.springframework.web.servlet.DispatcherServlet来管理webservice请求
  使用这种方式,/services,即http://127.0.0.1:8070/demo_WebService2/services
  不会显示出项目下所有的接口信息
  另外,接口的名称和设置该java接口类的bean注入的name属性的值相对应,name的值+"?wsdl"
  修改name的值,就可以改变该接口所对应的访问路径

  使用spring来管理webservice请求的例子也已经写好,加qq付费获取源码。

 

webservice接口示例(spring+xfire+webservice)的更多相关文章

  1. php中创建和调用webservice接口示例

    php中创建和调用webservice接口示例   这篇文章主要介绍了php中创建和调用webservice接口示例,包括webservice基本知识.webservice服务端例子.webservi ...

  2. 使用cxf开发webservice接口

    项目中经常用到开发webservice接口,及调用webService接口.这里讲解如何使用cxf开发webService接口. 一.webservice介绍及理解 webservice是一种跨平台, ...

  3. 『动善时』JMeter基础 — 50、使用JMeter测试WebService接口

    目录 1.什么是WebService 2.WebService和SOAP的关系 3.什么是WSDL 4.测试WebService接口前的准备 (1)如何判断是WebService接口 (2)如何获取W ...

  4. 『动善时』JMeter基础 — 51、使用JMeter测试WebService接口

    目录 1.什么是WebService 2.WebService和SOAP的关系 3.什么是WSDL 4.测试WebService接口前的准备 (1)如何判断是WebService接口 (2)如何获取W ...

  5. 【SoapUI、Postman、WebServiceStudio、Jmeter】接口测试工具结合测试webservice接口(发送XML格式参数)

    目录: SoapUI测试webservice接口,发送XML格式参数 Postman测试webservice接口,发送XML格式参数 WebServiceStudio.exe测试webservice接 ...

  6. C++webservice接口调用

    一.WebService例子 1.准备要调用的webservice接口的wsdl地址,比如网上的查询天气接口:http://ws.webxml.com.cn/WebServices/WeatherWS ...

  7. xfire集成spring构建webservice

    前言:xfire.spring都是比较流行的技术,这里就不再赘述他们各自的优点:本文着重介绍xfire和spring的整合,不会做太深入的探究. 服务端 1. web.xml配置 spring配置部分 ...

  8. 从xfire谈WebService接口化编程

    前段时间有博友在看我的博文<WebService入门案例>后,发邮件问我关于WebService 接口在java中的开发,以及在实际生产环境中的应用.想想自己入职也有一段时间了,似乎也该总 ...

  9. CXF集成spring做webservice接口

    一 . cxf 的jar包 1.cxf-2.3.3.jar 2.wsdl4j-1.6.2.jar 3.wss4j-1.5.11.jar 4.wstx-asl-3.2.0.jar 5.XmlSchema ...

随机推荐

  1. bzoj 3940: [Usaco2015 Feb]Censoring -- AC自动机

    3940: [Usaco2015 Feb]Censoring Time Limit: 10 Sec  Memory Limit: 128 MB Description Farmer John has ...

  2. [转]Android:布局实例之模仿QQ登录界面

    Android:布局实例之模仿QQ登录界面 预览图: 准备: 1.找到模仿对象 QQ登陆界面UI下载>>>>> 2.导入工程 3.查看布局结构和使用控件 其对应效果图分布 ...

  3. 微信小程序缓存滑动距离,当页面浏览到一定位置,滑动其他页面后返回该页面记录之前的滑动距离

    15.微信小程序缓存滑动距离 我们在浏览页面的时候,然后左滑或者右滑到新的页面,等返回此页面,我们希望可以记录上次滑动的距离 虽然这个实现起来并不难,但是会遇到一些坑,因为scroll-view的组件 ...

  4. JS之RegExp对象(一)

    JavaScript提供了一个RegExp对象来完毕有关正則表達式的操作和功能,每一条正則表達式模式相应一个RegExp实例.有两种方式能够创建RegExp对象的实例.      使用RegExp的显 ...

  5. 我弄的一些TASKER配置

    http://tieba.baidu.com/p/2184969007 我弄的一些配置,需要的童鞋们找自己想要的吧,有些配置感觉还是很繁琐,请高手不吝赐教才好,图片太多,就发链接了. ◆保持屏幕开启, ...

  6. 阿里云+django实战记录

    2013年7月13日10:36:53:接上篇,bae部署django没成功,转战阿里云.. 阿里云服务器最便宜69/月,现在有个活动,新用户送20元现金券,我就花了RMB 49买了一个,操作系统选的是 ...

  7. matlab colormap

    This table lists the built-in colormaps functions. Colormap Name Color Scale parula

  8. PHP:IIS下的PHP开发环境搭建

    背景 发现书柜中有好几本PHP的图书,决定还是学学PHP,本文介绍一下在Windows环境下PHP开发环境的搭建. 运行环境搭建 下载和安装下面三个软件: IIS. http://php.iis.ne ...

  9. 关于Gson在强转时的ClassCastException

    关于Gson的坑人指出: 将list转化为json String beanListToJson = gson.toJson(list, type); 将json还原为list List<T &g ...

  10. Linux下C获取所有可用网卡信息

    在Linux下开发网络程序时,经常会遇到需要取本地网络接口名.IP.广播地址.子网掩码或者MAC地址等信息的需求,最常见的办法是配合宏SIOCGIFHWADDR.SIOCGIFADDR.SIOCGIF ...