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("冯魁"));

????}

}
?


这样就会调用服务器端的方法了!
本人也是初学,只是会简单的使用原理懂的不多,请各位大虾批评指正!