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生成客户端代码

快试试吧

posted @ 2016-07-25 14:54  暗夜心慌方  阅读(666)  评论(1)    收藏  举报