微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

XFire+WebService+Spring简单Demo

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项目,按下图建立包结构:

1

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

 

@H_502_33@

@H_502_33@

public   interface  SOAPService 
@H_502_33@


@H_502_33@

    String sayHi(String x);
@H_502_33@

    
int add(int x,int y);
@H_502_33@

    
int sendmsm(String context,int to);
@H_502_33@

}
 
@H_502_33@


@H_502_33@

在SOAPServiceImpl.java中代码如下:

 

@H_502_33@

@H_502_33@

public   class  SOAPServiceImpl  implements  SOAPService 
@H_502_33@


@H_502_33@

@H_502_33@

    
public String sayHi(String x) {
@H_502_33@

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

    }

@H_502_33@

@H_502_33@

    
public int add(int x,int y){
@H_502_33@

        
return x+y;
@H_502_33@

    }

@H_502_33@

@H_502_33@

    
public int sendmsm(String context, int to) {
@H_502_33@

        
return 0;
@H_502_33@

    }

@H_502_33@

}
 
@H_502_33@


@H_502_33@

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

 

@H_502_33@

< listener >
@H_502_33@

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

</ listener >  
@H_502_33@


@H_502_33@

< context-param >
@H_502_33@

    
< param-name > contextConfigLocation </ param-name >
@H_502_33@

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

</ context-param >  
@H_502_33@


@H_502_33@

<!-- 编码设置 -->
@H_502_33@

< filter >
@H_502_33@

    
< filter-name > SetCharacterEncoding </ filter-name >
@H_502_33@

    
< filter-class > org.springframework.web.filter.CharacterEncodingFilter </ filter-class >
@H_502_33@

    
< init-param >
@H_502_33@

        
< param-name > encoding </ param-name >
@H_502_33@

        
< param-value > UTF-8 </ param-value >
@H_502_33@

    
</ init-param >
@H_502_33@

</ filter >
@H_502_33@

< filter-mapping >
@H_502_33@

    
< filter-name > SetCharacterEncoding </ filter-name >
@H_502_33@

    
< url-pattern > /* </ url-pattern >
@H_502_33@

</ filter-mapping >  
@H_502_33@


@H_502_33@

<!-- xfire 设置WS  -->
@H_502_33@

< servlet >
@H_502_33@

    
< servlet-name > xfire </ servlet-name >
@H_502_33@

    
< servlet-class > org.springframework.web.servlet.dispatcherServlet </ servlet-class >
@H_502_33@

</ servlet >
@H_502_33@

< servlet-mapping >
@H_502_33@

    
< servlet-name > xfire </ servlet-name >
@H_502_33@

    
< url-pattern > *.Service </ url-pattern >
@H_502_33@

</ servlet-mapping >  
@H_502_33@


@H_502_33@

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


@H_502_33@

< beans >
@H_502_33@

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

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

    
<!--  定义访问的url  -->
@H_502_33@

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

        
< property  name ="urlMap" >  
@H_502_33@

          
< map >  
@H_502_33@

            
< entry  key ="/Services/Hello.Service" >
@H_502_33@

                
< ref  bean ="WsHelloService"   />  
@H_502_33@

             
</ entry >
@H_502_33@

         
</ map >  
@H_502_33@

        
</ property >  
@H_502_33@

    
</ bean >  
@H_502_33@

    
<!--  使用XFire导出器  -->
@H_502_33@

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

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

       
< property  name ="serviceFactory"  ref ="xfire.serviceFactory"   />
@H_502_33@

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

       
< property  name ="xfire"  ref ="xfire"   />
@H_502_33@

    
</ bean >
@H_502_33@

     
< bean  id ="WsHelloService"  parent ="baseWebService" >
@H_502_33@

      
<!--  业务服务bean  -->
@H_502_33@

      
< property  name ="serviceBean"  ref ="WsHelloImpl" />
@H_502_33@

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

      
< property  name ="serviceClass"  value ="com.cmcc.interfaces.soAPService"   />
@H_502_33@

    
</ bean >  
@H_502_33@

</ beans >  
@H_502_33@


@H_502_33@

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

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

 

@H_502_33@

< beans >
@H_502_33@

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

</ beans >

 

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

 

@H_502_33@

< beans >
@H_502_33@

    
< bean  id ="WsHelloImpl"  class ="com.cmcc.impl.soAPServiceImpl" >
@H_502_33@

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

    
</ bean >
@H_502_33@

</ beans >  
@H_502_33@


@H_502_33@

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

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

看下图勾选

1

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

2

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

3



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

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

 

@H_502_33@

@H_502_33@

public   class  WsFactory  {
@H_502_33@

    
private static ArrayList l;
@H_502_33@

    
private static HashMap props;
@H_502_33@

    
private static ObjectServiceFactory serviceFactory;
@H_502_33@

@H_502_33@

    
/**
@H_502_33@

     * 上传信息
@H_502_33@

     * 
*/

@H_502_33@

@H_502_33@

    
public static SOAPService getSOAPService(){
@H_502_33@

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

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

        serviceFactory 
= new ObjectServiceFactory();
@H_502_33@

        l 
= new ArrayList();
@H_502_33@

        l.add(Integer.
class.getName());
@H_502_33@

        props 
= new HashMap();
@H_502_33@

        props.put(AegisBindingProvider.WRITE_XSI_TYPE_KEY, Boolean.TRUE);
@H_502_33@

        props.put(AegisBindingProvider.READ_XSI_TYPE_KEY, Boolean.TRUE);
@H_502_33@

        props.put(AegisBindingProvider.OVERRIDE_TYPES_KEY, l);
@H_502_33@

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

        SOAPService service 
= null;
@H_502_33@

@H_502_33@

        
try {
@H_502_33@

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

@H_502_33@

        }
 catch (MalformedURLException e) {
@H_502_33@

            e.printstacktrace();
@H_502_33@

        }

@H_502_33@

        
return service;
@H_502_33@

    }

@H_502_33@

}
 
@H_502_33@


@H_502_33@

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

 

@H_502_33@

@H_502_33@

public   class  WSTest {
@H_502_33@

@H_502_33@

    
public static void main(String[]args) {
@H_502_33@

        SOAPService service 
= WsFactory.getSOAPService();
@H_502_33@

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

    }

@H_502_33@

}
 
@H_502_33@


@H_502_33@

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐