太陽(yáng)雨

          痛并快樂(lè)著

          BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
            67 Posts :: 3 Stories :: 33 Comments :: 0 Trackbacks

          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 這樣將會(huì)發(fā)布兩個(gè)service,BookServiceEchoService。隨后就可以使用client端進(jìn)行測(cè)試了。

               //測(cè)試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及其實(shí)現(xiàn)了。

               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 簡(jiǎn)單的測(cè)試就是通過(guò)IE,輸入http://ip:port/context/services/BookService?wsdl或者http://ip:port/context/services/EchoService?wsdl,將會(huì)出現(xiàn)相應(yīng)的wsdl文檔。

               如果只是輸入http://ip:port/context/services/BookService,會(huì)出現(xiàn)Invalid SOAP request.這也說(shuō)明配置正確。

          2、直接集成Spring(通過(guò)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 余下的配置跟第一種方法一樣。

          posted on 2010-03-05 11:41 小蟲(chóng)旺福 閱讀(6896) 評(píng)論(2)  編輯  收藏 所屬分類: javaEE

          Feedback

          # re: XFire與Spring結(jié)合的幾種方式 2012-06-28 19:30
          您好,我的wsdl文檔是生成了,但是客戶端調(diào)用service的時(shí)候,service里面的entityManager沒(méi)有被初始化,為null,spring是不是還有配置?。????  回復(fù)  更多評(píng)論
            

          # re: XFire與Spring結(jié)合的幾種方式 2012-06-29 13:00 樓主
          @羽
          xfire已經(jīng)很久沒(méi)有用過(guò)了,而且已經(jīng)轉(zhuǎn)變?yōu)镃XF了,同學(xué)還是看下CXF吧,而且支持注解很方便,要與時(shí)俱進(jìn)嘛  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 娄烦县| 河北省| 屏东县| 东阿县| 东源县| 开阳县| 宜章县| 锦州市| 荥经县| 盱眙县| 长寿区| 内乡县| 丰都县| 玉树县| 玉门市| 望奎县| 永安市| 三门县| 乐安县| 蕲春县| 荥经县| 大新县| 临夏市| 秦安县| 玛纳斯县| 汽车| 焉耆| 洞头县| 卢氏县| 清丰县| 泰宁县| 柏乡县| 泸定县| 将乐县| 恭城| 泗水县| 两当县| 牙克石市| 绥宁县| 绥江县| 抚宁县|