基于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包:

目录
相关文章
|
14天前
|
监控 JavaScript 前端开发
《理解 WebSocket:Java Web 开发的实时通信技术》
【4月更文挑战第4天】WebSocket是Java Web实时通信的关键技术,提供双向持久连接,实现低延迟、高效率的实时交互。适用于聊天应用、在线游戏、数据监控和即时通知。开发涉及服务器端实现、客户端连接及数据协议定义,注意安全、错误处理、性能和兼容性。随着实时应用需求增加,WebSocket在Java Web开发中的地位将更加重要。
|
25天前
|
Web App开发 前端开发 开发工具
介绍Web开发的基础知识
介绍Web开发的基础知识
26 7
|
1月前
|
存储 资源调度 应用服务中间件
浅谈本地开发好的 Web 应用部署到 ABAP 应用服务器上的几种方式
浅谈本地开发好的 Web 应用部署到 ABAP 应用服务器上的几种方式
24 0
|
1月前
|
存储 前端开发 JavaScript
从前端到后端,探索现代Web开发技术
本文探索了现代Web开发技术的各个方面,包括前端和后端开发以及多种编程语言的应用。通过对JavaScript、Java、Python、C、PHP和Go等语言的介绍,深入探讨了前端和后端开发的基本原理和常用工具。同时,还涵盖了数据库技术在Web开发中的重要性和应用场景。无论你是初学者还是有经验的开发者,本文都能为你提供全面的视角和实用的知识,帮助你在Web开发领域取得更好的成果。
|
1月前
|
前端开发 开发者
探索前端技术的新趋势:Web组件化开发
【2月更文挑战第11天】 在这篇文章中,我们将深入探讨Web组件化开发的概念及其对前端开发领域的影响。不同于传统的摘要方式,我们通过一个故事来引入主题:想象在一个快速变化的数字世界里,有一座由各种小型、独立、可复用的建筑块构成的城市,每个建筑块都拥有独特的功能和风格,它们可以自由组合,创造出无限可能的城市景观。这座城市,就像是使用了Web组件化开发技术的前端项目。接下来,我们将详细探讨Web组件化开发的优势、实现方式以及面临的挑战,为前端开发者提供一个全面的视角来理解和应用这一重要的技术趋势。
62 5
|
1月前
|
缓存 关系型数据库 API
后端开发:构建高效、可扩展的Web应用程序的关键
后端开发:构建高效、可扩展的Web应用程序的关键
18 0
|
3天前
|
PHP
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
|
3天前
|
前端开发 数据挖掘 API
使用Python中的Flask框架进行Web应用开发
【4月更文挑战第15天】在Python的Web开发领域,Flask是一个备受欢迎的轻量级Web框架。它简洁、灵活且易于扩展,使得开发者能够快速地构建出高质量的Web应用。本文将深入探讨Flask框架的核心特性、使用方法以及在实际开发中的应用。
|
15天前
|
XML JSON JavaScript
使用JSON和XML:数据交换格式在Java Web开发中的应用
【4月更文挑战第3天】本文比较了JSON和XML在Java Web开发中的应用。JSON是一种轻量级、易读的数据交换格式,适合快速解析和节省空间,常用于API和Web服务。XML则提供更强的灵活性和数据描述能力,适合复杂数据结构。Java有Jackson和Gson等库处理JSON,JAXB和DOM/SAX处理XML。选择格式需根据应用场景和需求。
|
25天前
|
API
2024常用Web支付开发讲解教程
本教程为web支付开发,讲解了最常用的两钟支付:支付宝支付和微信支付,服务器配置和API对接,学完本课程可以学会微信支付、和支付宝支付开发。
17 2
2024常用Web支付开发讲解教程