webservice在项目中经常使用,今天在项目中使用xfire,所以今天就简单写下xfire实现方式;
再写之前我们应该知道这几个问题:

  1. 什么是WebService?
  2. 它能做什么?
  3. 为什么要学习WebService?
  4. 学习WebService要达到什么目的?

今天我就不仔细写这些答案了,可以自行百度,或者等待我后面的文章更新出来详细说明;下面就直接写实现代码:
服务端的实现:
首先一个接口和一个实现类,接口就是为了发布出去让外部访问到我们内部的数据:
接口

public interface IHelloWebService {
public String sayHello(String name, int age);
}

实现类

public class HelloWebService implements IHelloWebService {

public String sayHello(String name, int age) {
return "我的名字是"+name+";今年"+age+"岁";
}

}

XFire创建WebService实例_sed

service.xml里面内容

<!-- START SNIPPET: services -->
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<!-- 服务名称 -->
<name>HellowebService</name>
<!-- 命名空间 -->
<namespace>http://xfire.codehaus.org/BookService</namespace>
<!-- 接口 -->
<serviceClass>com.wfg.webservice.IHelloWebService</serviceClass>
<!-- 实现类 -->
<implementationClass>com.wfg.webservice.impl.HelloWebService</implementationClass>

</service>
</beans>
<!-- END SNIPPET: services -->

xfire是用servlet实现的,所以要在web.xml里面配置如下的代码

<servlet>
<servlet-name>XFireServlet</servlet-name>
<display-name>XFire Servlet</display-name>
<servlet-class>
org.codehaus.xfire.transport.http.XFireConfigurableServlet
</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/servlet/XFireServlet/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>

友情提示不要忘记把xfire的jar包和依赖包导入项目中启动服务器在浏览器中访问:​​http://localhost:8080/webservice/services​​便可以查看我们的对外发布的接口

XFire创建WebService实例_xml_02


点击后查看详细的wsdl文档

在同一个应用中测试:

public class Test {

public static void main(String[] args) throws MalformedURLException {
Service service =(Service) new ObjectServiceFactory().create(IHelloWebService.class);
XFireProxyFactory factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire());
String url="http://localhost:8080/webservice/services/HellowebService";
IHelloWebService helloWebService=(IHelloWebService) factory.create( service, url);
String rest=helloWebService.sayHello("张三", 23);
System.out.println(rest);
}
}

时间使用中一般是在不同的应用中使用,甚至访问的应用都是不同的语言:下面我们还是使用Java实现,自己可以尝试.net c#等语言访问.
再client端建立2个文件分别为
build.properties

src.dir=${basedir}
lib.dir=G\:\\SSHworkspace1\\webservice_client\\WebRoot\\WEB-INF\\lib
wsdl.dir=http\://localhost\:8080/webservice/services/HellowebService?wsdl

build.xml

<?xml version="1.0" encoding="UTF-8"?>  
<project name="WebService" basedir="." default="gen-webservice">
<property file="build.properties"></property>
<path id="project-classpath">
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>
</path>

<target name="gen-webservice">
<taskdef name="wsgen" classname="org.codehaus.xfire.gen.WsGenTask"
classpathref="project-classpath" />
<wsgen outputDirectory="${src.dir}" wsdl="${wsdl.dir}"
package="stub.test.client" overwrite="true"/>
</target>
</project>

运行build.xml文件

XFire创建WebService实例_xml_03


项目中会自动生成上面的代码

测试代码

public class ClientTest {
public static void main(String[] args) {
HellowebServiceClient service = new HellowebServiceClient();
HellowebServicePortType portType =service.getHellowebServiceHttpPort();
System.out.println(portType.sayHello("张三",12));


}
}

项目代码:
链接:​​​http://pan.baidu.com/s/1dF7VF5R​​ 密码:c28r