xfire webservice

来源:互联网 发布:查理斯特亚斯 知乎 编辑:程序博客网 时间:2024/05/21 15:44

                                                                                                            xfire webservice


首先这里需要一些jar包

客户端:


服务器端的jar包没有红色圈起来的包 其他都一样

客户端如果少了这个包会报错->xfire Caused by: java.lang.ClassNotFoundException: org.apache.ws.commons.sch


下面介绍一下这个测试demo

step1:编写服务端的接口以及还实现类:



接口:

public interface  IAccount {
 public int account(int x,int y);
}

实现类:

public class ACCountImpl implements IAccount{


  public int account(int x, int y) {
    return x*y;
  }
}


step2:web.xml中加入如下代码(如果和spring整合这里的class就不是这个了);

<servlet>
    <servlet-name>XFireServlet</servlet-name>
    <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
    <load-on-startup>0</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>XFireServlet</servlet-name>
    <url-pattern>/services/*</url-pattern>
  </servlet-mapping>


step3:


在meta-inf下面添加services.xml内容如下:

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://xfire.codehaus.org/config/1.0">  
    <service>  
        <!-- webserviceq名称,调用时需要指定这个 -->  
        <name>MyService</name>  
        <!-- 接口类 -->  
        <serviceClass>com.IAccount</serviceClass>  
        <!-- 实现类 -->  
        <implementationClass>Impl.ACCountImpl</implementationClass>  
    </service>  
</beans>  

然后:访问http://localhost:8080/mywebserviceTest/MyService?wsdl

就可以看到相关的wsdl文件

客户端:

public class MyClient {
  public static void main(String args[]) throws  Exception {
      //需要客户端引入接口字节码
      /* Service service=new ObjectServiceFactory().create(IAccount.class);
       XFireProxyFactory factory=new XFireProxyFactory(XFireFactory.newInstance().getXFire());
       String url="http://localhost:8080/MyWebServiceTest/services/MyService";
       IAccount ia = null;
     try {
         ia = (IAccount)factory.create(service,url);
     } catch (MalformedURLException e) {
         System.out.println(e.getMessage());
         e.printStackTrace();
     }
       System.out.println(ia.account(2,2));
       System.out.println("sdf");*/
     //不需要客户端引入字节码
       Client client = new Client(new URL("http://localhost:8080/MyWebServiceTest/services/MyService?wsdl"));  
       Object[] results11 = client.invoke("account", new Object[]{2,2});  
       System.out.println(results11[0]);  
  }
  
}

注释掉的那部分是需要引入服务端接口的字节码jar包才可以调用的:


没有注释掉的方式 是可以直接访问的

0 0