﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-吃饭不洗手</title><link>http://www.blogjava.net/ying-7839/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 11:43:26 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 11:43:26 GMT</pubDate><ttl>60</ttl><item><title>XFire几种绑定方式的区别。</title><link>http://www.blogjava.net/ying-7839/archive/2006/09/21/71066.html</link><dc:creator>吃饭不洗手</dc:creator><author>吃饭不洗手</author><pubDate>Thu, 21 Sep 2006 05:26:00 GMT</pubDate><guid>http://www.blogjava.net/ying-7839/archive/2006/09/21/71066.html</guid><wfw:comment>http://www.blogjava.net/ying-7839/comments/71066.html</wfw:comment><comments>http://www.blogjava.net/ying-7839/archive/2006/09/21/71066.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/ying-7839/comments/commentRss/71066.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ying-7839/services/trackbacks/71066.html</trackback:ping><description><![CDATA[
		<p>
				<font color="#000000">1、Aegis Binding这是XFire默认的绑定方式。<br />      他的特点是支持简单的绑定，不支持复杂的shema绑定。如果要实现复杂的schema绑定，需要自定义实现Type。<br />       1）public PurchaseOrderType receiveOrder(PurchaseOrderType po){......}<br />       2）public class PurchaseOrderType extends Type<br />            {<br />    <br />                 <span class="code-keyword"><font color="#000091">public</font></span> ReferenceToDataType() {<br />                      setTypeClass(PurchaseOrderType.class);<br />                      setSchemaType(<span class="code-keyword"><font color="#000091">new</font></span> QName(.. the QName of the type you're returning ..));<br />                 }<br /><br />                 <span class="code-keyword"><font color="#000091">public</font></span> void writeObject(<span class="code-object"><font color="#910091">Object</font></span> value, XMLStreamWriter writer, <br />                                    MessageContext context)<br />                 {<br />                      PurchaseOrderType data = (PurchaseOrderType) value;<br />                      ... <span class="code-keyword"><font color="#000091">do</font></span> you're writing to the writer<br />                 }<br /><br />                 <span class="code-keyword"><font color="#000091">public</font></span><span class="code-object"><font color="#910091">Object</font></span> readObject( MessageReader reader, MessageContext context )<br />                 {<br />                      <span class="code-comment"><font color="#808080">// If you're reading you can read in a reference to the data<br /></font></span>                      XMLStreamReader reader = context.getInMessage().getXMLStreamReader();<br /><br />                      PurchaseOrderType data = read(reader);<br />                      <span class="code-keyword"><font color="#000091">return</font></span> data;<br />                 }<br /><br />                 <span class="code-keyword"><font color="#000091">public</font></span> void writeSchema(Element schemaRoot)<br />                 {<br />    <span class="code-comment"><font color="#808080">                  // override </font><span class="code-keyword"><font color="#000091">this</font></span><font color="#808080"> to write out your schema<br /></font></span>    <span class="code-comment"><font color="#808080">                  // </font><span class="code-keyword"><font color="#000091">if</font></span><font color="#808080"> you have it in DOM form you can convert it to YOM via DOMConverter<br /></font></span>                 }<br />               }<br />2、Jibx绑定<br />     这种类型的绑定相对来说不需要自己写额外的代码，代是需要自己在开发之前进行Jibx的预编译，他会为我们生成相应的辅助类。但是这些东需要额外的配置，所以在开发过程中也不是很方便。<br />3、XMLBeans绑定<br />    这种绑定支持任意复杂的schema，可以自动生成javabean代码。<br />  <br />   唉，没时间了，有空再继续吧。现在先做个开始。</font>
		</p>
<img src ="http://www.blogjava.net/ying-7839/aggbug/71066.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ying-7839/" target="_blank">吃饭不洗手</a> 2006-09-21 13:26 <a href="http://www.blogjava.net/ying-7839/archive/2006/09/21/71066.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XFire与Spring结合的几种方式。</title><link>http://www.blogjava.net/ying-7839/archive/2006/09/21/70991.html</link><dc:creator>吃饭不洗手</dc:creator><author>吃饭不洗手</author><pubDate>Thu, 21 Sep 2006 01:42:00 GMT</pubDate><guid>http://www.blogjava.net/ying-7839/archive/2006/09/21/70991.html</guid><wfw:comment>http://www.blogjava.net/ying-7839/comments/70991.html</wfw:comment><comments>http://www.blogjava.net/ying-7839/archive/2006/09/21/70991.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/ying-7839/comments/commentRss/70991.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ying-7839/services/trackbacks/70991.html</trackback:ping><description><![CDATA[
		<p>1、使用org.codehaus.xfire.spring.XFireSpringServlet与ServiceBean</p>
		<p>1.1 web.xml的配置</p>
		<p> &lt;web-app&gt;<br /> &lt;display-name&gt;Spring Image Database&lt;/display-name&gt;<br /> &lt;description&gt;Spring Image Database sample application&lt;/description&gt;<br /> &lt;!--<br />  These values are used by ContextLoaderListener, defined immediately below.<br />        The files listed below are used to initialize the business logic portion of the application.<br />        Each dispatcher servlet (defined further down) has their own configuration file,<br />        which may or may not depend on items in these files.<br />    --&gt;<br />    &lt;context-param&gt;<br />       &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;<br />       &lt;param-value&gt;<br />     classpath:applicationContext-webservice.xml<br />    &lt;/param-value&gt;<br />    &lt;/context-param&gt;<br /> &lt;!-- Log4j configuration listener--&gt;<br /> &lt;listener&gt;<br />  &lt;listener-class&gt;org.springframework.web.util.Log4jConfigListener&lt;/listener-class&gt;<br /> &lt;/listener&gt;<br /> &lt;!-- Spring framework --&gt;<br /> &lt;listener&gt;<br />        &lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt;<br /> &lt;/listener&gt;</p>
		<p> &lt;servlet&gt;<br />        &lt;servlet-name&gt;XFireServlet&lt;/servlet-name&gt;<br />        &lt;display-name&gt;XFire Servlet&lt;/display-name&gt;<br />        &lt;servlet-class&gt;org.codehaus.xfire.spring.XFireSpringServlet&lt;/servlet-class&gt;<br />    &lt;/servlet&gt;<br />               <br />    &lt;servlet-mapping&gt;<br />        &lt;servlet-name&gt;XFireServlet&lt;/servlet-name&gt;<br />        &lt;url-pattern&gt;/services/*&lt;/url-pattern&gt;<br />    &lt;/servlet-mapping&gt;</p>
		<p> &lt;welcome-file-list&gt;<br />  &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;<br /> &lt;/welcome-file-list&gt;<br /> <br />&lt;/web-app&gt;</p>
		<p>1.2 applicationContext-webservice.xml的配置：</p>
		<p>&lt;beans&gt;</p>
		<p>    &lt;import resource="classpath:org/codehaus/xfire/spring/xfire.xml"/&gt;<br />    <br />    &lt;bean name="<font color="#ff0000">echoService</font>" class="<font color="#ff00ff">org.codehaus.xfire.spring.ServiceBean</font>"&gt;<br />        &lt;property name="serviceBean" ref="echo"/&gt;<br />        &lt;property name="serviceClass" value="org.codehaus.xfire.test.Echo"/&gt;<br />        &lt;property name="inHandlers"&gt;<br />            &lt;list&gt;<br />                &lt;ref bean="addressingHandler"/&gt;<br />            &lt;/list&gt;<br />        &lt;/property&gt;<br />    &lt;/bean&gt;</p>
		<p>    &lt;bean id="echo" class="org.codehaus.xfire.test.EchoImpl"/&gt;</p>
		<p>    &lt;bean id="addressingHandler" class="org.codehaus.xfire.addressing.AddressingInHandler"/&gt;<br /> <br />   &lt;bean name="<font color="#ff0000">bookService</font>" class="<font color="#ff00ff">org.codehaus.xfire.spring.ServiceBean</font>"&gt;<br />        &lt;property name="serviceBean" ref="bookServiceBean"/&gt;<br />        &lt;property name="serviceClass" value="org.codehaus.xfire.demo.BookService"/&gt;<br />    &lt;/bean&gt;</p>
		<p>    &lt;bean id="bookServiceBean" class="org.codehaus.xfire.demo.BookServiceImpl"/&gt;</p>
		<p>&lt;/beans&gt;</p>
		<p>1.3 这样将会发布两个service，<font color="#ff0000">BookService</font>和<font color="#ff0000">EchoService。</font><font color="#000000">随后就可以使用client端进行测试了。</font></p>
		<p>
				<font color="#ff0000">
				</font>     //测试BookService<br />    public static void main(String args[])<br />    { <br />        String serviceURL = "<a href="http://127.0.0.1:9001/xfire/services/BookService" _fcksavedurl="http://127.0.0.1:9001/xfire/services/BookService">http://127.0.0.1:9001/xfire/services/BookService</a>";<br />        Service serviceModel = new ObjectServiceFactory().create(BookService.class,null,"<a href="http://xfire.codehaus.org/BookService&quot;,null" _fcksavedurl="http://xfire.codehaus.org/BookService&quot;,null">http://xfire.codehaus.org/BookService",null</a>);<br />        XFireProxyFactory serviceFactory = new XFireProxyFactory();<br />        try<br />        {<br />            BookService service = (BookService) serviceFactory.create(serviceModel, serviceURL);<br />            Client client = Client.getInstance(service);<br />            client.addOutHandler(new OutHeaderHandler());<br />            Book[] books = service.getBooks();<br />            System.out.println("BOOKS:");<br />            for (int i = 0; i &lt; books.length; i++)<br />            {<br />                System.out.println(books[i].getTitle());<br />            }<br />        }<br />        catch (MalformedURLException e)<br />        {<br />            e.printStackTrace();<br />        }<br />    }</p>
		<p>1.4 忘了BookService及其实现了。</p>
		<p>     public interface BookService<br />    {<br />              public Book[] getBooks();<br />    <br />              public Book findBook(String isbn);<br />    <br />             public Map getBooksMap();<br />   }</p>
		<p> </p>
		<p>    public class BookServiceImpl implements BookService<br />    {<br />    private Book onlyBook;<br />    <br />    public BookServiceImpl()<br />    {<br />        onlyBook = new Book();<br />        onlyBook.setAuthor("Dan Diephouse");<br />        onlyBook.setTitle("Using XFire");<br />        onlyBook.setIsbn("0123456789");<br />     }</p>
		<p>     public Book[] getBooks() <br />     {<br />        return new Book[] { onlyBook };<br />     }<br />    <br />     public Book findBook(String isbn)<br />     {<br />        if (isbn.equals(onlyBook.getIsbn()))<br />            return onlyBook;<br />        <br />        return null;<br />     }</p>
		<p>     public Map getBooksMap() {<br />  Map result = new HashMap();<br />  result.put(onlyBook.getIsbn(), onlyBook);<br />  return result;<br />     }<br />    }</p>
		<p>1.5 简单的测试就是通过IE，输入<a href="http://ip:port/context/services/BookService?wsdl" _fcksavedurl="http://ip:port/context/services/BookService?wsdl">http://ip:port/context/<font color="#000000">services/</font>BookService?wsdl</a>或者<a href="http://ip:port/context/services/EchoService?wsdl" _fcksavedurl="http://ip:port/context/services/EchoService?wsdl">http://ip:port/context/<font color="#000000">services/</font>EchoService?wsdl</a>，将会出现相应的wsdl文档。</p>
		<p>     如果只是输入<a href="http://ip:port/context/services/BookService" _fcksavedurl="http://ip:port/context/services/BookService">http://ip:port/context/<font color="#000000">services/</font>BookService</a>，会出现Invalid SOAP request.这也说明配置正确。</p>
		<p>2、直接集成Spring（通过Spring的org.springframework.web.servlet.DispatcherServlet）</p>
		<p>2.1 web.xml配置<br />&lt;web-app&gt;<br />&lt;!-- START SNIPPET: xfire --&gt;<br />    &lt;context-param&gt;<br />        &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;<br />        &lt;param-value&gt;<br />        classpath:org/codehaus/xfire/spring/xfire.xml&lt;/param-value&gt;<br />    &lt;/context-param&gt;</p>
		<p>    &lt;context-param&gt;<br />        &lt;param-name&gt;log4jConfigLocation&lt;/param-name&gt;<br />        &lt;param-value&gt;/WEB-INF/log4j.properties&lt;/param-value&gt;<br />    &lt;/context-param&gt;</p>
		<p>    &lt;listener&gt;<br />        &lt;listener-class&gt;org.springframework.web.util.Log4jConfigListener&lt;/listener-class&gt;<br />    &lt;/listener&gt;</p>
		<p>    &lt;listener&gt;<br />        &lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt;<br />    &lt;/listener&gt;</p>
		<p>    &lt;servlet&gt;<br />        &lt;servlet-name&gt;xfire&lt;/servlet-name&gt;<br />        &lt;servlet-class&gt;org.springframework.web.servlet.DispatcherServlet&lt;/servlet-class&gt;<br />    &lt;/servlet&gt;</p>
		<p>    &lt;servlet-mapping&gt;<br />        &lt;servlet-name&gt;xfire&lt;/servlet-name&gt;<br />        &lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />    &lt;/servlet-mapping&gt;<br />&lt;!-- END SNIPPET: xfire --&gt;<br />&lt;/web-app&gt;<br />2.2 xfire-servlet.xml配置<br />&lt;beans&gt;<br />    &lt;!-- START SNIPPET: xfire --&gt;<br />    &lt;bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"&gt;<br />        &lt;property name="urlMap"&gt;<br />            &lt;map&gt;<br />                &lt;entry key="/EchoService"&gt;<br />                    &lt;ref bean="echo"/&gt;<br />                &lt;/entry&gt;<br />            &lt;/map&gt;<br />        &lt;/property&gt;<br />    &lt;/bean&gt;<br /><br />    &lt;bean id="echoBean" class="org.codehaus.xfire.spring.example.EchoImpl"/&gt;<br /><br />    &lt;!-- Declare a parent bean with all properties common to both services --&gt;<br />    &lt;bean id="echo" class="<font color="#ff00ff">org.codehaus.xfire.spring.remoting.XFireExporter</font>"&gt;<br />        &lt;property name="serviceFactory"&gt;<br />            &lt;ref bean="xfire.serviceFactory"/&gt;<br />        &lt;/property&gt;<br />        &lt;property name="xfire"&gt;<br />            &lt;ref bean="xfire"/&gt;<br />        &lt;/property&gt;<br />        &lt;property name="serviceBean"&gt;<br />            &lt;ref bean="echoBean"/&gt;<br />        &lt;/property&gt;<br />        &lt;property name="serviceClass"&gt;<br />            &lt;value&gt;org.codehaus.xfire.spring.example.Echo&lt;/value&gt;<br />        &lt;/property&gt;<br />    &lt;/bean&gt;<br />    &lt;!-- END SNIPPET: xfire --&gt;<br />&lt;/beans&gt;<br />2.3 余下的配置跟第一种方法一样。</p>
		<p>3、另外xfire的官方文档上还有一种方法，是通过XBean与Spring结合来实现webservice的expose。还是觉得上面的两种方法比较好。既然已经与spring集成在一起了，何必再引入其他的呢？以后的维护是不是也要有问题呢？</p>
		<p> 在随后的文章里将会介绍xfire与Jibx结合的例子。</p>
<img src ="http://www.blogjava.net/ying-7839/aggbug/70991.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ying-7839/" target="_blank">吃饭不洗手</a> 2006-09-21 09:42 <a href="http://www.blogjava.net/ying-7839/archive/2006/09/21/70991.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>