您的位置:首页 > 编程语言 > Java开发

XFire+WebService+Spring简单Demo

2011-02-25 16:53 453 查看
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("冯魁"));


}


}





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

本人也是初学,只是会简单的使用原理懂的不多,请各位大虾批评指正!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: