xfire发布webservice

本文详细介绍了如何使用XFire框架在服务器端发布Web服务,包括配置web.xml,编写配置文件如xfire.xml,services.xml,以及业务逻辑和服务实现。同时,也讲解了客户端如何使用Axis技术消费这些Web服务,包括下载必要的jar文件,生成客户端代码,并提供测试代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一步:编写xfire的服务器端

首先需要xfire的jar文件,可以到官方网站下载 ,同时根据自己项目的需要下载oracle的jar文件,springjar文件和struts的jar文件。

你可以直接访问这个地址下载:http://eft21.download.youkuaiyun.com/

然后编写web.xml文件在里面配置xfire,spring等

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
      PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
      "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
 <display-name>doms application</display-name>

 <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>
   classpath:/com/stt/apps/doms/application_context.xml,
   /WEB-INF/classes/pms/Application*.xml,/WEB-INF/classes/xfire.xml
  </param-value>
 </context-param>


 <listener>
  <listener-class>
   org.springframework.web.context.ContextLoaderListener
  </listener-class>
 </listener>


 <!-- export exportfile service by xfire -->
  
  <servlet>
        <servlet-name>XFireServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>

   <servlet-mapping>
     <servlet-name>XFireServlet</servlet-name>
     <url-pattern>/extenal/*</url-pattern>
   </servlet-mapping>
 <!-- xfire end  -->

</web-app>

在src目录下放入xfire的配置文件

customEditors.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

  <bean id="customEditorConfigurer"
    class="org.springframework.beans.factory.config.CustomEditorConfigurer">
    <property name="customEditors">
      <map>
        <entry key="org.codehaus.xfire.service.ServiceFactory">
          <bean class="org.codehaus.xfire.spring.editors.ServiceFactoryEditor">
            <property name="transportManager" ref="xfire.transportManager" />
          </bean>
        </entry>
      </map>
    </property>
  </bean>

</beans>

 

xfire.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

  <import resource="customEditors.xml"/>
 
  <bean id="xfire.serviceRegistry"
    class="org.codehaus.xfire.service.DefaultServiceRegistry"
    singleton="true" />

  <bean id="xfire.transportManager"
    class="org.codehaus.xfire.transport.DefaultTransportManager"
    singleton="true" init-method="initialize" destroy-method="dispose">
  </bean>

  <bean id="xfire" class="org.codehaus.xfire.DefaultXFire"
    singleton="true">
    <constructor-arg index="0">
      <ref bean="xfire.serviceRegistry" />
    </constructor-arg>
    <constructor-arg index="1">
      <ref bean="xfire.transportManager" />
    </constructor-arg>
  </bean>

  <bean id="xfire.typeMappingRegistry"
    class="org.codehaus.xfire.aegis.type.DefaultTypeMappingRegistry"
    init-method="createDefaultMappings" singleton="true">
  </bean>

  <bean id="xfire.aegisBindingProvider"
    class="org.codehaus.xfire.aegis.AegisBindingProvider"
    singleton="true">
    <constructor-arg index="0">
      <ref bean="xfire.typeMappingRegistry" />
    </constructor-arg>
  </bean>

  <bean id="xfire.serviceFactory"
    class="org.codehaus.xfire.service.binding.ObjectServiceFactory"
    singleton="true">
    <constructor-arg index="0">
      <ref bean="xfire.transportManager" />
    </constructor-arg>
    <constructor-arg index="1">
      <ref bean="xfire.aegisBindingProvider" />
    </constructor-arg>
  </bean>

  <bean id="xfire.servletController"
    class="org.codehaus.xfire.transport.http.XFireServletController"
    singleton="true">
    <constructor-arg>
      <ref bean="xfire" />
    </constructor-arg>
  </bean>

  <bean id="xfire.messageServiceFactory"
    class="org.codehaus.xfire.service.binding.ObjectServiceFactory">
    <constructor-arg index="0" ref="xfire.transportManager" />
    <constructor-arg index="1" ref="xfire.messageBindingProvider" />
    <property name="style" value="message" />
  </bean>

  <bean id="xfire.messageBindingProvider"
    class="org.codehaus.xfire.service.binding.MessageBindingProvider" />

  <!--
  <bean id="commons-attributes"
    class="org.codehaus.xfire.spring.config.ServiceFactoryBean">
    <constructor-arg index="0" value="commons-attributes" />
  </bean>
 
  <bean id="jsr181"
    class="org.codehaus.xfire.spring.config.ServiceFactoryBean"
    init-method="initialize">
    <constructor-arg index="0" value="jsr181" />
  </bean>
 -->
</beans>

 

和xfireXmlBeans.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

  <bean id="xfire.xmlbeansServiceFactory"
    class="org.codehaus.xfire.service.binding.ObjectServiceFactory"
    singleton="true">
    <constructor-arg index="0" ref="xfire.transportManager" />
    <constructor-arg index="1" ref="xfire.xmlbeansBindingProvider" />
    <property name="wsdlBuilderFactory" ref="xfire.xmlbeansWSDLBuilderFactory"/>
  </bean>
 
  <bean id="xfire.xmlbeansBindingProvider"
    class="org.codehaus.xfire.aegis.AegisBindingProvider"
    singleton="true">
    <constructor-arg index="0" ref="xfire.xmlbeansTypeRegistry" />
  </bean>
 
  <bean id="xfire.xmlbeansTypeRegistry"
    class="org.codehaus.xfire.xmlbeans.XmlBeansTypeRegistry"
    singleton="true"/>
   
  <bean id="xfire.xmlbeansWSDLBuilderFactory"
    class="org.codehaus.xfire.xmlbeans.XmlBeansWSDLBuilderFactory"/>
</beans>

 

并且在在src目录中建立META-INF目录并建立xfire目录加入services.xml文件里面配置要发布的服务的类名

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

 <service>
  <name>exportFileService</name>
  <serviceClass>
   com.stt.apps.doms.service.extenal.ExportFileService
  </serviceClass>
  <implementationClass>
   com.stt.apps.doms.service.extenal.impl.ExportFileServiceImpl
  </implementationClass>
  <style>wrapped</style>
  <use>literal</use>
  <scope>application</scope>
 </service></beans>

 

然后再WEB-INF目录中加入xfireXmlBeans.xml文件配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

  <bean id="xfire.xmlbeansServiceFactory"
    class="org.codehaus.xfire.service.binding.ObjectServiceFactory"
    singleton="true">
    <constructor-arg index="0" ref="xfire.transportManager" />
    <constructor-arg index="1" ref="xfire.xmlbeansBindingProvider" />
    <property name="wsdlBuilderFactory" ref="xfire.xmlbeansWSDLBuilderFactory"/>
  </bean>
 
  <bean id="xfire.xmlbeansBindingProvider"
    class="org.codehaus.xfire.aegis.AegisBindingProvider"
    singleton="true">
    <constructor-arg index="0" ref="xfire.xmlbeansTypeRegistry" />
  </bean>
 
  <bean id="xfire.xmlbeansTypeRegistry"
    class="org.codehaus.xfire.xmlbeans.XmlBeansTypeRegistry"
    singleton="true"/>
   
  <bean id="xfire.xmlbeansWSDLBuilderFactory"
    class="org.codehaus.xfire.xmlbeans.XmlBeansWSDLBuilderFactory"/>
</beans>

到现在为止所有的配置文件已经完成,接着我们该写对应的业务逻辑(ExportFileService)和数据逻辑(ExportFileDao)等

并配置spring的配置文件等

 

 

第二步:客户端的编写

客户端就相对简单些了,我们可以用axis技术实现

axis的客户端jar文件可以到官方网站下载

你可以直接访问这个地址下载:http://eft21.download.youkuaiyun.com/

建立两个批处理文件

1,cp.bat

   内容:

set cp=%cp%;%1

2,wsdl2java.bat

    内容:
set cp=
for %%1 in (E:/client/*.jar) do call cp.bat %%1
java -cp %cp% org.apache.axis.wsdl.WSDL2Java http://localhost:8080/wsdexfire/exportService?wsdl
pause

 

运行一下wsdl2java.bat文件可以得到客户端文件

 

我们可以编写简单的测试文件来调用服务   test.java:

package test;

import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;

import org.apache.axis.AxisFault;

import com.web.service.ExportServiceHttpBindingStub;


public class Test {

 public static void main(String[] args) {
  URL u;
  try {
   u = new URL("http://localhost:8080/wsdexfire/exportService");
   ExportServiceHttpBindingStub ins = new ExportServiceHttpBindingStub(u,null);
   System.out.println(ins.getLoginName(71));
  } catch (AxisFault e) {
   e.printStackTrace();
  }catch (MalformedURLException e1) {
   e1.printStackTrace();
  }catch (RemoteException e) {
   e.printStackTrace();
  }
 }

}

 

完成!

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值