Spring+XFire开发[web service]

    技术2022-05-11  73

    Spring+XFire开发[web service]

     

    经过4天的努力,终于把XFireSpring结合起来做了一个web service发布成功了

    首先建立一个工程,创建一个接口(XFiceFace):

    package com.fire.face;

    public interface XFireFace { public int doAdd(int i,int k);}

    接着创建有一个实现类(XFireFace):

    package com.fire.imservlet;

    import com.fire.face.XFireFace;

    public class XFireFaceIm implements XFireFace{ public int doAdd(int i,int k){  return i+k; }}

    看过我前面文章的朋友很容易想到会去建立一个META-INF/xfire/service.xml文件.

    因为集成了Spring,再次可以不必了.

    因为web服务的定义在xfire-servlet.xml中可以找到。

    接下来就该写配置文件了.

    WEB-INF文件夹下创建applicationContext.xml文件,这是Spring的配置文件.

    需要说明的是,这个文件很重要.

    里面的BEAN ,必须设置正确,然后在 XXX-SERVLET.XML 中把接口类和实现类都指定好才行.

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

     <bean id="xfim"  class="com.fire.imservlet.XFireFaceIm"/> <bean id="domInHandler"   class="org.codehaus.xfire.util.dom.DOMInHandler" />

     <bean id="wss4jTokenHandler"  class="org.codehaus.xfire.security.wss4j.WSS4JInHandler" /></beans>

    其中xfim这个bean,就是本工程发布的实现类

    你可以只写一个...

    当然你也可以在这个文件中定义其他的需要Spring管理的bean

     

    接下来配置xfire-servlet.xml

    WEB-INF文件夹下创建

    根据Spring规范,我把这个文件名起做xfire-servlet.xml.

    需要注意的是此处的xfire是在web.xml当中配置的DispatcherServlet的名称.

    其中xfim是我在applicationContext.xml中配置的那个Bean.

    map就是java.util.map

    因为是个集合类.

    此处实现了Spring的注入!

    <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//Spring//DTD Bean//EN"    "http://www.springframework.org/dtd/spring-beans.dtd"><!-- Application Context --><beans> <bean  class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">  <property name="urlMap">   <map>    <entry key="/XFireFace">     <ref bean="XFireService"/>    </entry>   </map> </property> </bean> <bean id="XFireService"   class="org.codehaus.xfire.spring.remoting.XFireExporter">  <property name="serviceFactory">            <ref bean="xfire.serviceFactory"/>     </property>        <property name="xfire">            <ref bean="xfire"/>        </property>        <property name="serviceBean">         <ref bean="xfim"/>        </property>        <property name="serviceClass">         <value>com.fire.face.XFireFace</value>        </property> </bean></beans>

    最后就是修改web.xml文件了

    <?xml version="1.0" encoding="UTF-8"?><web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <context-param>        <param-name>contextConfigLocation</param-name>        <param-value>/WEB-INF/applicationContext.xml        classpath:org/codehaus/xfire/spring/xfire.xml</param-value>    </context-param>        <context-param>     <param-name>log4jConfigLocation</param-name>     <param-value>/WEB-INF/log4j.properties</param-value>    </context-param>     <listener>        <listener-class>        org.springframework.web.util.Log4jConfigListener        </listener-class> </listener>  <listener>        <listener-class>        org.springframework.web.context.ContextLoaderListener        </listener-class>    </listener>

        <servlet>        <servlet-name>xfire</servlet-name>        <servlet-class>        org.springframework.web.servlet.DispatcherServlet        </servlet-class>    </servlet>

        <servlet-mapping>        <servlet-name>xfire</servlet-name>        <url-pattern>/*</url-pattern>    </servlet-mapping>

     </web-app>

    OK此时启动服务器,我用的是tomcat5.0.28

    控制台会输入如下信息,log4j有一个警告,不需管它!

    log4j:WARN No appenders could be found for logger (org.apache.catalina.startup.Embedded).log4j:WARN Please initialize the log4j system properly.

    log4j:WARN No appenders could be found for logger (org.apache.commons.beanutils.ConvertUtils).log4j:WARN Please initialize the log4j system properly.

    然后可以在浏览器访问:http://localhost:8080/xfire/XFireFace?wsdl

    浏览器输出以下服务信息,代表发布成功!

    你将可以通过http://localhost:8080/xfire/XFireFace来调用此服务了!

      <?xml version="1.0" encoding="UTF-8" ?>

    - <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap11="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope" xmlns:soapenc11="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soapenc12="http://www.w3.org/2003/05/soap-encoding" xmlns:tns="http://face.fire.com" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://face.fire.com">

    - <wsdl:types>

    - <xsd:schema targetNamespace="http://face.fire.com" elementFormDefault="qualified" attributeFormDefault="qualified">

    - <xsd:element name="doAdd">

    - <xsd:complexType>

    - <xsd:sequence>

      <xsd:element name="in0" type="xsd:int" minOccurs="1" maxOccurs="1" />

      <xsd:element name="in1" type="xsd:int" minOccurs="1" maxOccurs="1" />

      </xsd:sequence>

      </xsd:complexType>

      </xsd:element>

    - <xsd:element name="doAddResponse">

    - <xsd:complexType>

    - <xsd:sequence>

      <xsd:element name="out" type="xsd:int" minOccurs="1" maxOccurs="1" />

      </xsd:sequence>

      </xsd:complexType>

      </xsd:element>

      </xsd:schema>

      </wsdl:types>

    - <wsdl:message name="doAddResponse">

      <wsdl:part element="tns:doAddResponse" name="parameters" />

      </wsdl:message>

    - <wsdl:message name="doAddRequest">

      <wsdl:part element="tns:doAdd" name="parameters" />

      </wsdl:message>

    - <wsdl:portType name="XFireFacePortType">

    - <wsdl:operation name="doAdd">

      <wsdl:input message="tns:doAddRequest" name="doAddRequest" />

      <wsdl:output message="tns:doAddResponse" name="doAddResponse" />

      </wsdl:operation>

      </wsdl:portType>

    - <wsdl:binding name="XFireFaceHttpBinding" type="tns:XFireFacePortType">

      <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />

    - <wsdl:operation name="doAdd">

      <wsdlsoap:operation soapAction="" />

    - <wsdl:input name="doAddRequest">

      <wsdlsoap:body use="literal" />

      </wsdl:input>

    - <wsdl:output name="doAddResponse">

      <wsdlsoap:body use="literal" />

      </wsdl:output>

      </wsdl:operation>

      </wsdl:binding>

    - <wsdl:service name="XFireFace">

    - <wsdl:port binding="tns:XFireFaceHttpBinding" name="XFireFaceHttpPort">

      <wsdlsoap:address location="http://localhost:8080/xfire/XFireFace" />

      </wsdl:port>

      </wsdl:service>

      </wsdl:definitions>

     

     

     

    最新回复(0)