当前位置: 代码迷 >> Web前端 >> XFire令WebService如斯简单
  详细解决方案

XFire令WebService如斯简单

热度:273   发布时间:2012-11-09 10:18:47.0
XFire令WebService如此简单
?

运行环境:JBOXX 4.04 、 Tomcat <st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899">5.3.9</st1:chsdate>

开发工具:Eclipse3.1 + MyEclipse 4.0

?

1.?????? 利用xFire发布WebService<o:p></o:p>

对于一般的接口方法,即方法的返回类型或参数不是ListMap中存放对象的方法,则只需要两步简单的配置即可。

一、配置web.xml

添加一个servlet

xml 代码
  1. <servlet>??
  2. ????????<servlet-name>webservice</servlet-name>??
  3. ????????<servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>??
  4. ????</servlet>??
  5. ??
  6. ????<servlet-mapping>??
  7. ????????<servlet-name>webservice</servlet-name>??
  8. ????????<url-pattern>/servlet/XFireServlet/*</url-pattern>??
  9. ????</servlet-mapping>??
  10. ????<servlet-mapping>??
  11. ????????<servlet-name>webservice</servlet-name>??
  12. ????????<url-pattern>/services/*</url-pattern>??
  13. </servlet-mapping>??

?

?

一、建立services.xml

? 在源代码包src(也可能是其它的名称)下建立META-INF/xfire文件夹,并在下面建立services.xml文件。

xml 代码
  1. <!--?START?SNIPPET:?services?-->??
  2. <beans??xmlns="http://xfire.codehaus.org/config/1.0">??
  3. ??<service?>??
  4. ????<name>helloWorld</name>??
  5. ????<namespace>http://6.1.8.16:8080/xfireWebService/services/helloWorld</namespace>??
  6. ????<serviceClass>com.excellence.webservice.test.helloWorld</serviceClass>??
  7. ????<implementationClass>com.excellence.webservice.test.HelloWorldImpl</implementationClass>??
  8. ??</service>??
  9. </beans>??
  10. <!--?END?SNIPPET:?services?-->??

?

?

一 name 元素:表示该webService的名称<o:p></o:p>

二 namespace 元素:表示该webService的命名空间<o:p></o:p>

三 serviceClass 元素:表示该webService的接口<o:p></o:p>

四 implementationClass 元素:表示该webService的实现类<o:p></o:p>

  <o:p></o:p>

对!就是这么简单,就可以啦。

? <o:p></o:p>

如果返回类型是ListMap,并且里面存放的是自定义类的话,则需要增加一个对于服务接口的配置文件。该文件的命名规则是 接口文件名.aegis.xml。例如接口是HelloWorld.java的话,则此配置文件命名为HelloWorld.aegis.xml<o:p></o:p>

xml 代码
  1. <?xml?version="1.0"?encoding="UTF-8"?>??
  2. <mappings>??
  3. ??<mapping?>??
  4. ????<method?name="getUsers">??
  5. ??????<return-type?componentType="com.excellence.webservice.test.User"/>??
  6. ????</method>??
  7. ??</mapping>??
  8. </mappings>??

?

getUsers方法返回类型是List,里面装的User对象。对于这种类型的方法,在配置文件中描述了它的返回值类型。<o:p></o:p>

如果返回的类型是Map的话,做法和List一样。但定义的类型,是Map中的Value部分,并且这样的话,MapValue所存放的对象就必须全部是同一种类啦。<o:p></o:p>

?

1 楼 mcikevin 2007-02-06  
tomcat5.0.28可以吗?
2 楼 superallen 2007-02-07  
试一下吧,我是用的5.5.9,JBOSS4.0也可以。
但websphere application server 和weblogic不行
3 楼 卒子99 2007-02-07  
XFire用过一段时间,感觉还是不错的,相对axis来说,部署相当简单,基本上写完Java类就搞定了。相对于axis2来说,它使用的性的特性,如采用Rest的传输协议,采用Stax的XML处理模型,还有许多新的特性和标准,感觉XFire在WS方面会大有作为,关注ing,有要学习的可以交流一下啦
4 楼 afteryuan 2007-03-06  
一直报org.codehaus.xfire.XFireRuntimeException: Could not invoke service.. Nested exception is org.codehaus.xfire.fault.XFireFault: Couldn't instantiate class. cn.lsdf.ebs.webservice.remote.OrderForm
org.codehaus.xfire.fault.XFireFault: Couldn't instantiate class. cn.lsdf.ebs.webservice.remote.OrderForm异常,怎么回事。
<?xml version="1.0" encoding="UTF-8"?>
<mappings>
  <mapping >
    <method name="getOrderForms">   
      <return-type componentType="cn.lsdf.ebs.webservice.remote.OrderForm"/>
    </method>
    <method name="getOrderForm">   
      <return-type componentType="cn.lsdf.ebs.webservice.remote.OrderForm"/>
    </method>
  </mapping>
</mappings>
5 楼 afteryuan 2007-03-06  
找到问题了。If you have constructors defined in your Java beans, make sure a default constructor (i.e. no arguments) is also declared. (Aegis needs a no-argument contstructor to instantiate client Java classes.)

需要一个无参的构造器。
6 楼 wangwenpinghello 2007-04-27  
大家都用过,我想请教一个问题,怎么使用xfire客户端来调用远程的xfire  WebService啊,最好有个例子
7 楼 lxz8157 2007-05-11  
wangwenpinghello 写道
大家都用过,我想请教一个问题,怎么使用xfire客户端来调用远程的xfire  WebService啊,最好有个例子


/**
 * 版权信息:
 * 文件编号:TestCallWebService.java
 * 文件名称:
 * 系统编号:
 * 系统名称:
 * 设计作者:
 * 完成日期:2006-11-3
 * 设计文档:
 * 内容摘要:
 * 
 * 修改记录1:
 * 修改日期:
 * 修 改 人: 
 * 修改内容:
 * 包括Bug/变更:<bug/变更 ID> 活动标题  >
 * 
 */
package com.zte.ihs.eyouems.test;

import java.net.MalformedURLException;
import java.net.URL;

import org.codehaus.xfire.client.Client;

/**
 * 类 编 号:TestCallWebService.java
 * 类 名 称:
 * 内容摘要:
 * 完成日期:
 * 编码作者:
 */
public class TestCallWebService
{
    //记得传入WebServer的服务地址,应该从常量配置中获得。
    URL ServerUrl = null;
    
    public String sendESBMessage(String webServiceURL, String xmlStr)
    {

        try
        {
            ServerUrl = new URL(webServiceURL);
        }
        catch (MalformedURLException e1)
        {
            e1.printStackTrace();
        }

        Client client = null;
        Object[] returnMessage = null;

        try
        {
            client = new Client(ServerUrl);
        
        //就是这里了,指定调用的方法,并传入参数  
        returnMessage = client.invoke("SendMsg", new Object[] { "测试", xmlStr });
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

        String receiveMessage = (String) returnMessage[0];

        return receiveMessage;
    }

}

8 楼 godson_2003 2007-05-11  
能举个复杂例子么?如返回List类型 远程调用怎么做?
9 楼 wq_pro 2007-07-03  
如果你写的服务返回List,可以利用myeclipse自动生成客户端代码
10 楼 yhb_4323 2007-07-03  
我在做项目中,加入Spring 2.0就报错,xFire自己带的Spring是1.2.6。
我现在没有环境,所以没有发错误信息。
大家知道怎么解决吗?
  相关解决方案