XFire创建WebService实例
原创
©著作权归作者所有:来自51CTO博客作者_温柔一刀的原创作品,请联系作者获取转载授权,否则将追究法律责任
webservice在项目中经常使用,今天在项目中使用xfire,所以今天就简单写下xfire实现方式;
再写之前我们应该知道这几个问题:
- 什么是WebService?
- 它能做什么?
- 为什么要学习WebService?
- 学习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+"岁";
}
}
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便可以查看我们的对外发布的接口
点击后查看详细的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文件
项目中会自动生成上面的代码
测试代码
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