加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

XFire+WebService+Spring简单Demo

发布时间:2020-12-17 01:21:50 所属栏目:安全 来源:网络整理
导读:XFire简介: XFire是新一代的Java Web服务引擎,XFire使得在JavaEE应用中发布Web服务变得轻而易举。和其他Web服务引擎相比,XFire的配置非常简单,可以非常容易地和Spring集成,它使得Java开发人员终于可以获得和.Net开发人员一样的开发效率。具体内容请访问

XFire简介:

XFire是新一代的Java Web服务引擎,XFire使得在JavaEE应用中发布Web服务变得轻而易举。和其他Web服务引擎相比,XFire的配置非常简单,可以非常容易地和Spring集成,它使得Java开发人员终于可以获得和.Net开发人员一样的开发效率。具体内容请访问:http://baike.baidu.com/view/920041.html

WebService简介:

它是一种构建应用程序的普遍模型,可以在任何支持网络通信的操作系统中实施运行;它是一种新的web

webservice

应用程序分支,是自包含、自描述、模块 化的应用,可以发布、定位、通过web调用。Web Service是一个应用组件,它逻辑性的为其他应用程序提供数据与服务.各应用程序通过网络协议和规定的一些标准数据格式(Http,XML,Soap)来访问Web Service,通过Web Service内部执行得到所需结果.Web Service可以执行从简单的请求到复杂商务处理的任何功能。一旦部署以后,其他Web Service应用程序可以发现并调用它部署的服务。

具体内容请访问:http://baike.baidu.com/view/837392.html

使用这三种技术主要是在客户端调用服务器端的方法,属于远程调用。

先看服务器端:

新建一个java project项目,按下图建立包结构:

其实要写的代码非常简单,或许你看到了会不相信,在SOAPService.java中代码如下:

?

public ? interface ?SOAPService? {?


????String?sayHi(String?x);

????
int?add(int?x,int?y);

????
int?sendmsm(String?context,int?to);

}
?


在SOAPServiceImpl.java中代码如下:

?

public ? class ?SOAPServiceImpl? implements ?SOAPService? {?


????
public?String?sayHi(String?x)?{

?????????
return("Hello?my?friend,?"?+?x?+?"!?Glad?to?see?you!");

????}

????
public?int?add(int?x,int?y){

????????
return?x+y;

????}

????
public?int?sendmsm(String?context,?int?to)?{

????????
return?0;

????}

}
?


简单吧?重要的是配置,pom.xml是将所用到的jar包的dependency放进去,运行在dos窗口下找到这个项目然后执行这两条语句:mvn eclipse:clean ,mvn eclipse:eclipse语句就会将文件中所需要的jar包下载下来,当然你的电脑上必须配置maven,具体怎么配置我就说了,如果你没有配置的话你可以将所需要的jar包下载下来,然后添加到build path中。在web项目最重要的就是web.xml文件中的配置,在文件中配置如下:

?

< listener >

????
< listener-class > org.springframework.web.context.ContextLoaderListener </ listener-class >

</ listener > ?


< context-param >

????
< param-name > contextConfigLocation </ param-name >

????
< param-value > /WEB-INF/classes/Spring-*.xml </ param-value >

</ context-param > ?


<!-- 编码设置 -->

< filter >

????
< filter-name > SetCharacterEncoding </ filter-name >

????
< filter-class > org.springframework.web.filter.CharacterEncodingFilter </ filter-class >

????
< init-param >

????????
< param-name > encoding </ param-name >

????????
< param-value > UTF-8 </ param-value >

????
</ init-param >

</ filter >

< filter-mapping >

????
< filter-name > SetCharacterEncoding </ filter-name >

????
< url-pattern > /* </ url-pattern >

</ filter-mapping > ?


<!-- xfire?设置WS? -->

< servlet >

????
< servlet-name > xfire </ servlet-name >

????
< servlet-class > org.springframework.web.servlet.DispatcherServlet </ servlet-class >

</ servlet >

< servlet-mapping >

????
< servlet-name > xfire </ servlet-name >

????
< url-pattern > *.Service </ url-pattern >

</ servlet-mapping > ?


对于xfire项目这个xfire-servlet.xml也是很重要的,在xfire-servlet.xml文件中配置下:


< beans >

????
<!-- ?引入XFire预配置信息? -->

????
< import? resource ="classpath:org/codehaus/xfire/spring/xfire.xml" ? />

????
<!-- ?定义访问的url? -->

???????
< bean? class ="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" > ?

????????
< property? name ="urlMap" > ?

??????????
< map > ?

????????????
< entry? key ="/Services/Hello.Service" >

????????????????
< ref? bean ="WsHelloService" ? /> ?

?????????????
</ entry >

?????????
</ map > ?

????????
</ property > ?

????
</ bean > ?

????
<!-- ?使用XFire导出器? -->

????
< bean? id ="baseWebService" ?class ="org.codehaus.xfire.spring.remoting.XFireExporter" ?lazy-init ="false" ?abstract ="true" >

???????
<!-- ?引用xfire.xml中定义的工厂? -->

???????
< property? name ="serviceFactory" ?ref ="xfire.serviceFactory" ? />

???????
<!-- ?引用xfire.xml中的xfire实例? -->

???????
< property? name ="xfire" ?ref ="xfire" ? />

????
</ bean >

?????
< bean? id ="WsHelloService" ?parent ="baseWebService" >

??????
<!-- ?业务服务bean? -->

??????
< property? name ="serviceBean" ?ref ="WsHelloImpl" />

??????
<!-- ?业务服务bean的窄接口类? -->

??????
< property? name ="serviceClass" ?value ="com.cmcc.interfaces.SOAPService" ? />

????
</ bean > ?

</ beans > ?


上面的功能写的很清楚了。

在spring-content.xml文件中的配置如下:

?

< beans >

????
< import? resource ="spring/Spring-Service.xml" ? />

</ beans >

?

它的功能连接spring-servicie.xml文件中的内容,就是一个中间桥梁的作用。在spring-service.xml文件中的配置如下:

?

< beans >

????
< bean? id ="WsHelloImpl" ?class ="com.cmcc.impl.SOAPServiceImpl" >

???????
<!-- <property?name="userService"?ref="UserService"></property>? -->

????
</ bean >

</ beans > ?


这个配置文件就是通过spring和实体的程序连接到一起。

看客户端,客户端有两种形式,一个是自动生成的,新建一个web service project

看下图勾选

然后选择finish,然后再服务器开启的的状态下,右击这个项目新建一个web service client

在wsdl中写上访问服务器端的url,然后finish,然后就完成了客户端的程序,你可以在客户端的程序中调用服务器的方法。



另一种客户端生成的形式就是自己来写了,新建一个XFireWSDemoClient的project,然后建立如下包结构:
?

SOAPService.java的包路径一定要和服务器端的包路径相同,在WsFactory.JAVA中是用来生成service的,代码如下:

?

public ? class ?WsFactory? {

????
private?static?ArrayList?l;

????
private?static?HashMap?props;

????
private?static?ObjectServiceFactory?serviceFactory;

????
/**

?????*?上传信息

?????*?
*/

????
public?static?SOAPService?getSOAPService(){

????????
//调用xfire的远程方法,将接收到的xml信息解析后发送给服务器??

????????String?url?=?"http://localhost:8080/Services/Hello.Service";

????????serviceFactory?
=?new?ObjectServiceFactory();

????????l?
=?new?ArrayList();

????????l.add(Integer.
class.getName());

????????props?
=?new?HashMap();

????????props.put(AegisBindingProvider.WRITE_XSI_TYPE_KEY,?Boolean.TRUE);

????????props.put(AegisBindingProvider.READ_XSI_TYPE_KEY,?Boolean.TRUE);

????????props.put(AegisBindingProvider.OVERRIDE_TYPES_KEY,?l);

????????Service?serviceModel?
=?serviceFactory.create(SOAPService.class,props);

????????SOAPService?service?
=?null;

????????
try?{

????????????service?
=?(SOAPService)?new?XFireProxyFactory().create(serviceModel,url);

????????}
?catch?(MalformedURLException?e)?{

????????????e.printStackTrace();

????????}

????????
return?service;

????}

}
?


wstest.java只是一个简单的测试类,代码如下:

?

public ? class ?WSTest {

????
public?static?void?main(String[]args)?{

????????SOAPService?service?
=?WsFactory.getSOAPService();

????????System.out.println(service.sayHi(
"冯魁"));

????}

}
?


这样就会调用服务器端的方法了!

本人也是初学,只是会简单的使用原理懂的不多,请各位大虾批评指正!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读