zoukankan      html  css  js  c++  java
  • xfire 和 spring 集成的 两种方式

    转自:http://blog.sina.com.cn/s/blog_477252210100a7l4.html

    1、使用org.codehaus.xfire.spring.XFireSpringServlet与ServiceBean

    1.1 web.xml的配置

    <web-app>

    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
    classpath:applicationContext-webservice.xml
    </param-value>
    </context-param>
    <!-- Log4j configuration listener-->
    <listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>
    <!-- Spring framework -->
    <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <servlet>
    <servlet-name>XFireServlet</servlet-name>
    <display-name>XFire Servlet</display-name>
    <servlet-class>org.codehaus.xfire.spring.XFireSpringServlet</servlet-class>
    </servlet>

    <servlet-mapping>
    <servlet-name>XFireServlet</servlet-name>
    <url-pattern>/services/*</url-pattern>
    </servlet-mapping>


    </web-app>

    1.2 applicationContext-webservice.xml的配置:

    <beans>

    <import resource="classpath:org/codehaus/xfire/spring/xfire.xml"/>

    <bean name="echoService" class="org.codehaus.xfire.spring.ServiceBean">
    <property name="serviceBean" ref="echo"/>
    <property name="serviceClass" value="org.codehaus.xfire.test.Echo"/>
    <property name="inHandlers">
    <list>
    <ref bean="addressingHandler"/>
    </list>
    </property>
    </bean>

    <bean id="echo" class="org.codehaus.xfire.test.EchoImpl"/>

    <bean id="addressingHandler" class="org.codehaus.xfire.addressing.AddressingInHandler"/>

    <bean name="bookService" class="org.codehaus.xfire.spring.ServiceBean">
    <property name="serviceBean" ref="bookServiceBean"/>
    <property name="serviceClass" value="org.codehaus.xfire.demo.BookService"/>
    </bean>

    <bean id="bookServiceBean" class="org.codehaus.xfire.demo.BookServiceImpl"/>

    </beans>

    1.3 这样将会发布两个service,BookService和EchoService。随后就可以使用client端进行测试了。

    //测试BookService
    public static void main(String args[])
    {
    String serviceURL = "http://127.0.0.1:9001/xfire/services/BookService";
    Service serviceModel = new ObjectServiceFactory().create(BookService.class,null,"http://xfire.codehaus.org/BookService",null);
    XFireProxyFactory serviceFactory = new XFireProxyFactory();
    try
    {
    BookService service = (BookService) serviceFactory.create(serviceModel, serviceURL);
    Client client = Client.getInstance(service);
    client.addOutHandler(new OutHeaderHandler());
    Book[] books = service.getBooks();
    System.out.println("BOOKS:");
    for (int i = 0; i < books.length; i++)
    {
    System.out.println(books[i].getTitle());
    }
    }
    catch (MalformedURLException e)
    {
    e.printStackTrace();
    }
    }

    1.4 忘了BookService及其实现了。

    public interface BookService
    {
    public Book[] getBooks();

    public Book findBook(String isbn);

    public Map getBooksMap();
    }

     

    public class BookServiceImpl implements BookService
    {
    private Book onlyBook;

    public BookServiceImpl()
    {
    onlyBook = new Book();
    onlyBook.setAuthor("Dan Diephouse");
    onlyBook.setTitle("Using XFire");
    onlyBook.setIsbn("0123456789");
    }

    public Book[] getBooks()
    {
    return new Book[] { onlyBook };
    }

    public Book findBook(String isbn)
    {
    if (isbn.equals(onlyBook.getIsbn()))
    return onlyBook;

    return null;
    }

    public Map getBooksMap() {
    Map result = new HashMap();
    result.put(onlyBook.getIsbn(), onlyBook);
    return result;
    }
    }

    1.5 简单的测试就是通过IE,输入http://ip:port/context/services/BookService?wsdl或者http://ip:port/context/services/EchoService?wsdl,将会出现相应的wsdl文档。

    如果只是输入http://ip:port/context/services/BookService,会出现Invalid SOAP request.这也说明配置正确。

    2、直接集成Spring(通过Spring的org.springframework.web.servlet.DispatcherServlet)

    2.1 web.xml配置
    <web-app>
    <!-- START SNIPPET: xfire -->
    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
    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>
    <!-- END SNIPPET: xfire -->
    </web-app>
    2.2 xfire-servlet.xml配置
    <beans>
    <!-- START SNIPPET: xfire -->
    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="urlMap">
    <map>
    <entry key="/EchoService">
    <ref bean="echo"/>
    </entry>
    </map>
    </property>
    </bean>

    <bean id="echoBean" class="org.codehaus.xfire.spring.example.EchoImpl"/>

    <!-- Declare a parent bean with all properties common to both services -->
    <bean id="echo" 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="echoBean"/>
    </property>
    <property name="serviceClass">
    <value>org.codehaus.xfire.spring.example.Echo</value>
    </property>
    </bean>
    <!-- END SNIPPET: xfire -->
    </beans>
    2.3 余下的配置跟第一种方法一样。

    3、另外xfire的官方文档上还有一种方法,是通过XBean与Spring结合来实现webservice的expose。还是觉得上面的两种方法比较好。既然已经与spring集成在一起了,何必再引入其他的呢?以后的维护是不是也要有问题呢?

  • 相关阅读:
    XmlDocument和XDocument转String
    C# 6.0 (C# vNext) 新功能之:Null-Conditional Operator(转)
    <%%>与<scriptrunat=server>,<%=%>与<%#%>的区别(转)
    WINDOWS的用户和用户组说明
    C#获取网页内容的三种方式(转)
    C#操作XML方法:新增、修改和删除节点与属性
    linq to xml操作XML(转)
    C#使用tesseract3.02识别验证码模拟登录(转)
    C#修饰符
    SQL语句备份和还原数据库(转)
  • 原文地址:https://www.cnblogs.com/leonkobe/p/3220562.html
Copyright © 2011-2022 走看看