开发者社区> javaboy2012> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

基于xfire的web service开发例子

简介:
+关注继续查看


1. 开发服务接口

package com.yanek.demo.webservice;

public interface IHelloWorldService {
   
    public String sayHello(String name);
   
    public String[] getUsers();
    public User[] getUserList();
   
}


2. 开发开发服务接口实现类

package com.yanek.demo.webservice;

public class HelloWorldServiceImpl implements IHelloWorldService {
   
    public String sayHello(String name){
        return "hello,"+name;
    }
   
    public String[] getUsers(){

     String[] users=new String[2];
     users[0]="yanek";
     users[1]="aspboy";
        return users;
    }
   
    public User[] getUserList(){
     
     
     User u1=new User();
     u1.setAge(1);
     u1.setUsername("u1");
     
     User u2=new User();
     u2.setAge(2);
     u2.setUsername("u2");
     
     User[] users=new User[2];
     users[0]=u1;
     users[1]=u2;
        return users;
    }
   
   
}

相关类

package com.yanek.demo.webservice;

public class User implements java.io.Serializable
{
 private int age;
 private String username;
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
 public String getUsername() {
  return username;
 }
 public void setUsername(String username) {
  this.username = username;
 }
 
 

}

3.  web.xml中配置


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" 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>
    <load-on-startup>0</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>XFireServlet</servlet-name>
    <url-pattern>/services/*</url-pattern>
  </servlet-mapping>
</web-app>


4. services.xml文件

配置接口和实现类的名称

路径:classes/META-INF/xfire/services.xml


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">

<service>
        <name>HelloWorldService</name>
        <serviceClass>
            com.yanek.demo.webservice.IHelloWorldService
        </serviceClass>
        <implementationClass>
            com.yanek.demo.webservice.HelloWorldServiceImpl
        </implementationClass>
        <style>wrapped</style>
        <use>literal</use>
        <scope>application</scope>
    </service>


</beans>

 

部署后测试服务是否启动

访问:http://helloworld.myframework.com:8099/services/HelloWorldService?wsdl

如下 则成功发布!

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://webservice.demo.yanek.com" xmlns:tns="http://webservice.demo.yanek.com" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenc11="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soapenc12="http://www.w3.org/2003/05/soap-encoding" xmlns:soap11="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
  <wsdl:types>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://webservice.demo.yanek.com" elementFormDefault="qualified" attributeFormDefault="qualified">
<xsd:element name="getUserList">
<xsd:complexType/>
</xsd:element>
<xsd:complexType name="ArrayOfUser">
<xsd:sequence>
<xsd:element name="User" type="tns:User" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="User">
<xsd:sequence>
<xsd:element name="age" type="xsd:int" minOccurs="0"/>
<xsd:element name="username" type="xsd:string" minOccurs="0" nillable="true"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="getUserListResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="out" type="tns:ArrayOfUser" nillable="true" minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="getUsers">
<xsd:complexType/>
</xsd:element>
<xsd:complexType name="ArrayOfString">
<xsd:sequence>
<xsd:element name="string" type="xsd:string" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="getUsersResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="out" type="tns:ArrayOfString" nillable="true" minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="sayHello">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="in0" type="xsd:string" nillable="true" minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="sayHelloResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="out" type="xsd:string" nillable="true" minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
  </wsdl:types>
  <wsdl:message name="getUserListResponse">
    <wsdl:part name="parameters" element="tns:getUserListResponse"/>
  </wsdl:message>
  <wsdl:message name="sayHelloResponse">
    <wsdl:part name="parameters" element="tns:sayHelloResponse"/>
  </wsdl:message>
  <wsdl:message name="getUserListRequest">
    <wsdl:part name="parameters" element="tns:getUserList"/>
  </wsdl:message>
  <wsdl:message name="getUsersResponse">
    <wsdl:part name="parameters" element="tns:getUsersResponse"/>
  </wsdl:message>
  <wsdl:message name="getUsersRequest">
    <wsdl:part name="parameters" element="tns:getUsers"/>
  </wsdl:message>
  <wsdl:message name="sayHelloRequest">
    <wsdl:part name="parameters" element="tns:sayHello"/>
  </wsdl:message>
  <wsdl:portType name="HelloWorldServicePortType">
    <wsdl:operation name="getUserList">
      <wsdl:input name="getUserListRequest" message="tns:getUserListRequest"/>
      <wsdl:output name="getUserListResponse" message="tns:getUserListResponse"/>
    </wsdl:operation>
    <wsdl:operation name="getUsers">
      <wsdl:input name="getUsersRequest" message="tns:getUsersRequest"/>
      <wsdl:output name="getUsersResponse" message="tns:getUsersResponse"/>
    </wsdl:operation>
    <wsdl:operation name="sayHello">
      <wsdl:input name="sayHelloRequest" message="tns:sayHelloRequest"/>
      <wsdl:output name="sayHelloResponse" message="tns:sayHelloResponse"/>
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="HelloWorldServiceHttpBinding" type="tns:HelloWorldServicePortType">
    <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="getUserList">
      <wsdlsoap:operation soapAction=""/>
      <wsdl:input name="getUserListRequest">
        <wsdlsoap:body use="literal"/>
      </wsdl:input>
      <wsdl:output name="getUserListResponse">
        <wsdlsoap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="getUsers">
      <wsdlsoap:operation soapAction=""/>
      <wsdl:input name="getUsersRequest">
        <wsdlsoap:body use="literal"/>
      </wsdl:input>
      <wsdl:output name="getUsersResponse">
        <wsdlsoap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="sayHello">
      <wsdlsoap:operation soapAction=""/>
      <wsdl:input name="sayHelloRequest">
        <wsdlsoap:body use="literal"/>
      </wsdl:input>
      <wsdl:output name="sayHelloResponse">
        <wsdlsoap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="HelloWorldService">
    <wsdl:port name="HelloWorldServiceHttpPort" binding="tns:HelloWorldServiceHttpBinding">
      <wsdlsoap:address location="http://helloworld.myframework.com:8099/services/HelloWorldService"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

 


5.本地测试:

测试代码和服务代码在相同系统中

测试中使用服务中的类


package com.yanek.demo.webservice;

import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.List;

import org.codehaus.xfire.XFireFactory;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;

public class HelloWorldClient {
    public static void main(String args[]) {
        Service srvcModel = new ObjectServiceFactory()
                .create(IHelloWorldService.class);
        XFireProxyFactory factory = new XFireProxyFactory(XFireFactory
                .newInstance().getXFire());
        
       
        //wsdl:  http://helloworld.myframework.com:8099/services/HelloWorldService?wsdl
        //String helloWorldURL = "http://localhost:8081/HelloWorld/services/HelloWorldService";
        String helloWorldURL = "http://helloworld.myframework.com:8099/services/HelloWorldService";
        //http://helloworld.myframework.com:8099/services/HelloWorldService?wsdl
        try {
            IHelloWorldService srvc = (IHelloWorldService) factory.create(
                    srvcModel, helloWorldURL);
            System.out.println(srvc.sayHello("yanek"));
           
            String[] users=srvc.getUsers();
            for(int i=0;i<users.length;i++)
            {
             System.out.println(users[i]);
             
            }
           
            User[] users1=srvc.getUserList();
            for(int i=0;i<users1.length;i++)
            {
             System.out.println(users1[i].getUsername());
             
            }
           
           
           
           
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }

    }
}


在其他系统
中调用

一. 使用jar包,使用代理类调用


1. 把相关提供服务的类打包hello.jar


2. 调用系统中按照如上代理类调用

 

package com.yanek.demo.webservice;

import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.List;

import org.codehaus.xfire.XFireFactory;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;

public class HelloWorldClient {
    public static void main(String args[]) {
        Service srvcModel = new ObjectServiceFactory()
                .create(IHelloWorldService.class);
        XFireProxyFactory factory = new XFireProxyFactory(XFireFactory
                .newInstance().getXFire());
        
       
        //wsdl:  http://helloworld.myframework.com:8099/services/HelloWorldService?wsdl
        //String helloWorldURL = "http://localhost:8081/HelloWorld/services/HelloWorldService";
        String helloWorldURL = "http://helloworld.myframework.com:8099/services/HelloWorldService";
        //http://helloworld.myframework.com:8099/services/HelloWorldService?wsdl
        try {
            IHelloWorldService srvc = (IHelloWorldService) factory.create(
                    srvcModel, helloWorldURL);
            System.out.println(srvc.sayHello("yanek"));
           
            String[] users=srvc.getUsers();
            for(int i=0;i<users.length;i++)
            {
             System.out.println(users[i]);
             
            }
           
            User[] users1=srvc.getUserList();
            for(int i=0;i<users1.length;i++)
            {
             System.out.println(users1[i].getUsername());
             
            }
           
           
           
           
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }

    }
}

 

二 根据wsdl使用工具生成客户端代理类


eclipse插件

按照插件生产的代码调用


file-->new-->webservice-->webservice client

http://helloworld.myframework.com:8099/services/HelloWorldService?wsdl


相关jar包:

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
移动 Web 开发的10个优秀 JavaScript 框架
选择正确的 JavaScript 框架,对于开发移动 Web 应用程序是至关重要的,也是移动应用程序开发的一项重要任务。开发人员可以使用框架实现的功能高效地达到他们的开发目标。这些预实现的组件采用优秀的设计模式和最佳实践,促进应用程序以标准化的方式开发。最重要的是,它让开人员在开发过程中得心应手。
112 0
【今日推荐】移动 Web 开发的10个最佳 JavaScript 框架
  选择正确的 JavaScript 框架,对于开发移动 Web 应用程序是至关重要的,也是移动应用程序开发的一项重要任务。开发人员可以使用框架实现的功能高效地达到他们的开发目标。这些预实现的组件采用优秀的设计模式和最佳实践,促进应用程序以标准化的方式开发。
1865 0
分享20个Web开发中模式弹窗应用案例
  模式窗口是位于网页最顶层的一个小页面,使用模式窗口可以简化用户界面,让可以访问更多的信息而不用离开当前页面,这是吸引用户注意力到重要内容上面的一种非常有效的方法。不过,需要注意的是,使用模式窗口会使得用户无法和遮罩下面的页面进行交互,可能让部分用户感觉有点烦,因此模式窗口有其特定的使用场景。
876 0
032_《Delphi下用Intraweb开发WEB程序应用实战(第二版)》
《Delphi下用Intraweb开发WEB程序应用实战第二版》 Delphi 教程 系列书籍 (032) 《Delphi下用Intraweb开发WEB程序应用实战第二版》 网友(邦)整理 EMail: shuaihj@163.com 下载地址: Pdf 作 者:高勇 内容简介 IntraWeb是Delphi自带的一套Web开发框架,它由Atozed Software公司(http://www.atozedsoftware.com)在2002年制作,并完美的植入Delphi7中。
1838 0
12个便于web设计及开发的在线工具
请不要低估这些小工具,他们极其的方便并且能节省很多的时间和工作,下面就是这些在线工具的列表,挑几款来试试吧。 我还是比较喜欢Ajax Load和Web 20 Badges Generator的,你们呢? Favico 一个图标制作工具,很是方便。
965 0
Web开发必备资料(牛腩整理)
自己在WEB开发中必备的资料整理了一下,包含如下东西:以上工具都是本人在WEB开发中常用的,那个截图工具有个获取屏幕上任何一个地方的颜色值,很好用,而且用它来计算DIV的宽度高度也很好用.更新于 2010年10月4日15时45分,增加了正则表达式的相关工具下载地址: http://niunan.
597 0
《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之75---BREW 中的WEB代理
版权声明:本文为半吊子子全栈工匠(wireless_com,同公众号)原创文章,未经允许不得转载。
634 0
ZedGraph图形控件在Web开发中的应用
ZedGraph介绍: ZedGraph是一个功能强大图形控件,可以根据任意数据集创建2D曲线,bar,和pie图,同时我们既可以Windows Form中,也可以在ASP.NET Web Form中使用它。
856 0
利用QT进行web与本地混合应用开发-转载
[T] 利用QT进行web与本地混合应用开发  Qt Features for Hybrid Web/Native Application Development。原文参见 http://www.qtsoftware.com/forms/whitepapers/reg-whitepaper-hybrid. (限于本人英文水平,只译其大概)Qt提供了本地 C++对象与JavaScript的无缝集成,是进行本地与web混合应用开发的理想平台。
1709 0
《人人都玩开心网:Ext JS+Android+SSH整合开发Web与移动SNS》样章下载
本文为原创,如需转载,请注明作者和出处,谢谢! 第1章:开发梦缘起开心网第5章:开心桌面:完全模拟Windows桌面的开心网第15章:移动电子相册:捕捉精彩瞬间 书中实例截图    前言      互联网的发展,就是一个不断上演奇迹的过程。
1127 0
+关注
javaboy2012
学习是一种精神,分享是一种美德
文章
问答
文章排行榜
最热
最新
相关电子书
更多
从Web到Cloud App——YunOS Web App 开发经验分享
立即下载
Web应用系统性能优化
立即下载
WEB浏览器中即将发生的安全变化
立即下载