本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7579093
建立时间:2006年5月29日




[Spring]XFire与Spring结合的几种方式
软件技术

lhwork 发表于 2006/9/21 10:18:59

1、使用org.codehaus.xfire.spring.XFireSpringServlet与ServiceBean 1.1 web.xml的配置  <web-app> <display-name>Spring Image Database</display-name> <description>Spring Image Database sample application</description> <!--  These values are used by ContextLoaderListener, defined immediately below.        The files listed below are used to initialize the business logic portion of the application.        Each dispatcher servlet (defined further down) has their own configuration file,        which may or may not depend on items in these files.    -->    <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>  <welcome-file-list>  <welcome-file>index.jsp</welcome-file> </welcome-file-list> </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集成在一起了,何必再引入其他的呢?以后的维护是不是也要有问题呢?  在随后的文章里将会介绍xfire与Jibx结合的例子。


阅读全文(17165) | 回复(1) | 编辑 | 精华
 


回复:XFire与Spring结合的几种方式
软件技术

iwen(游客)发表评论于2010/5/12 11:03:48

你的XFIRE.XML 呢?


个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


回复:XFire与Spring结合的几种方式
软件技术

Yvon(游客)发表评论于2009/3/17 13:37:50

之前的系统用到了xfire,正在查找资料,谢谢博主

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.051 second(s), page refreshed 144775864 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号