XFire简介:html
XFire是新一代的Java Web服务引擎,XFire使得在JavaEE应用中发布Web服务变得垂手可得。和其余Web服务引擎相比,XFire的配置很是简单,能够很是容易地和Spring集成,它使得Java开发人员终于能够得到和.Net开发人员同样的开发效率。具体内容请访问:http://baike.baidu.com/view/920041.htmljava
WebService简介:web
它是一种构建应用程序的广泛模型,能够在任何支持网络通讯的操做系统中实施运行;它是一种新的webspring

webservice服务器
应用程序分支,是自包含、自描述、模块 化的应用,能够发布、定位、经过web调用。Web Service是一个应用组件,它逻辑性的为其余应用程序提供数据与服务.各应用程序经过网络协议和规定的一些标准数据格式(Http,XML,Soap)来访问Web Service,经过Web Service内部执行获得所需结果.Web Service能够执行从简单的请求到复杂商务处理的任何功能。一旦部署之后,其余Web Service应用程序能够发现并调用它部署的服务。网络
具体内容请访问:http://baike.baidu.com/view/837392.htmlapp
使用这三种技术主要是在客户端调用服务器端的方法,属于远程调用。eclipse
先看服务器端:maven
新建一个java project项目,按下图创建包结构:ide

其实要写的代码很是简单,或许你看到了会不相信,在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("冯魁"));
}
}

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