Xfire开发webservice
用Xfire开发webservice所需要用到的所有jar包:http://share.weiyun.com/6c51fd7f3dec37a65fe8b8bf7e359cff
先开发服务端
第一步:创建一个web project

第二步:创建一个接口interface
package com.service; public interface people { String say(); String getName(String name); }
第三步:创建接口实现类
package com.service.Impl; import com.service.people; public class YellowP implements people { public String say() { String say = "I'm yellow people"; return say; } public String getName(String name) { return "My name is " + name; } }
第四步:修改web.xml 目的是注册servlet, 发布暴露WSDL.
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet> <servlet-name>XFireServlet</servlet-name> <servlet-class> org.codehaus.xfire.transport.http.XFireConfigurableServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>XFireServlet</servlet-name> <url-pattern>/services/*</url-pattern>//这个就是要访问,http://127.0.0.1:8080/{工程名}/services </servlet-mapping> </web-app>
第五步:在src添加META-INF/xfire/services.xml,可别直接添加到工程原有的那个META-INF中,这个文件要存在于classes中
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://xfire.codehaus.org/config/1.0"> <service> <name>HelloService</name> <serviceClass>com.service.people</serviceClass> <implementationClass>com.service.Impl.YellowP</implementationClass> </service> </beans>
注意:由于xfire和spring2.0存在冲突,所以这么写是会报错误的
注意:xfire和spring2.0存在冲突,所以上面这么些会报错误的,错误码如下:
javax.servlet.ServletException: Error initializing XFireServlet. ......
...... org.springframework.beans.factory.BeanDefinitionStoreException: Unrecognized xbean element mapping: beans in namespace http://xfire.codehaus.org/config/1.0
官方解决:
Spring 2.x support
Because of Spring 2.x new feature, services.xml
default namespace must not be declared on the root element of
configuration ( beans ) and need to be moved to <service> tag
level
意思是新的spring2.0功能中不允许将在根节点配置属性,需要将要配置的属性移到service节点。
所以将services.xml改为如下:
<?xml version="1.0" encoding="UTF-8"?> <beans> <service xmlns="http://xfire.codehaus.org/config/1.0"> <name>HelloService</name> <serviceClass>com.service.people</serviceClass> <implementationClass>com.service.Impl.YellowP</implementationClass> </service> </beans>
以上,服务端就开发好了,可以访问了:http://winclpt:8080/Xfire/services/HelloService?wsdl
客户端开发
方法一:WSDL动态生成
public static void main(String[] args) throws MalformedURLException, Exception { URL url = new URL("http://winclpt:8080/Xfire/services/HelloService?wsdl"); Client client = new Client(url); Object[] result = client.invoke("say", new Object[0]); Object[] result1 = client.invoke("getName",new Object[]{"winclpt"}); System.out.println(result[0]+"\r\r\n"+result1[0]); }
方法二:服务提供者告诉你interface,你可以使用如下三种方式来开发:YourService即是服务提供者告诉给你的一个interface(当然,也可以根据WSDL的定义,自己定义一个同样的interface)。
1.简单方法
Service service = new ObjectServiceFactory().create(people.class); String url = "http://winclpt:8080/Xfire/services/HelloService"; people p = (people)new XFireProxyFactory().create(service,url); String r = p.say(); System.err.println(r);
2.JSR-181 注解的方式
这个people接口需要用@WebService注解
Service service = new AnnotationServiceFactory().create(people.class); String url = "http://winclpt:8080/Xfire/services/HelloService"; people p = (people)new XFireProxyFactory().create(service,url); String r = p.say(); System.err.println(r);
方法三:除过以上方法当然也可以用wsimport -keep url生成客户端代码
快试试吧

浙公网安备 33010602011771号