posts - 2,  comments - 2,  trackbacks - 0
            2006年9月21日

          1、Aegis Binding這是XFire默認(rèn)的綁定方式。
          ????? 他的特點(diǎn)是支持簡單的綁定,不支持復(fù)雜的shema綁定。如果要實(shí)現(xiàn)復(fù)雜的schema綁定,需要自定義實(shí)現(xiàn)Type。
          ?????? 1)public PurchaseOrderType receiveOrder(PurchaseOrderType po){......}
          ?????? 2)public class PurchaseOrderType extends Type
          ??????????? {
          ????
          ?????????????????public ReferenceToDataType() {
          ??????????????????????setTypeClass(PurchaseOrderType.class);
          ??????????????????????setSchemaType(new QName(.. the QName of the type you're returning ..));
          ?????????????????}

          ?????????????????public void writeObject(Object value, XMLStreamWriter writer,?
          ????????????????????????????????????MessageContext context)
          ?????????????????{
          ??????????????????????PurchaseOrderType data = (PurchaseOrderType) value;
          ??????????????????????... do you're writing to the writer
          ?????????????????}

          ?????????????????publicObject readObject( MessageReader reader, MessageContext context )
          ?????????????????{
          ??????????????????????// If you're reading you can read in a reference to the data
          ??????????????????????XMLStreamReader reader = context.getInMessage().getXMLStreamReader();

          ??????????????????????PurchaseOrderType data = read(reader);
          ??????????????????????return data;
          ?????????????????}

          ?????????????????public void writeSchema(Element schemaRoot)
          ?????????????????{
          ??????????????????????// override this to write out your schema
          ??????????????????????// if you have it in DOM form you can convert it to YOM via DOMConverter
          ?????????????????}
          ???????????????}
          2、Jibx綁定
          ???? 這種類型的綁定相對(duì)來說不需要自己寫額外的代碼,代是需要自己在開發(fā)之前進(jìn)行Jibx的預(yù)編譯,他會(huì)為我們生成相應(yīng)的輔助類。但是這些東需要額外的配置,所以在開發(fā)過程中也不是很方便。
          3、XMLBeans綁定
          ??? 這種綁定支持任意復(fù)雜的schema,可以自動(dòng)生成javabean代碼。
          ??
          ?? 唉,沒時(shí)間了,有空再繼續(xù)吧。現(xiàn)在先做個(gè)開始。

          posted @ 2006-09-21 13:26 吃飯不洗手 閱讀(1691) | 評(píng)論 (1)編輯 收藏

          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)行測試了。

          ???? //測試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 簡單的測試就是通過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.這也說明配置正確。

          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結(jié)合來實(shí)現(xiàn)webservice的expose。還是覺得上面的兩種方法比較好。既然已經(jīng)與spring集成在一起了,何必再引入其他的呢?以后的維護(hù)是不是也要有問題呢?

          ?在隨后的文章里將會(huì)介紹xfire與Jibx結(jié)合的例子。

          posted @ 2006-09-21 09:42 吃飯不洗手 閱讀(1932) | 評(píng)論 (1)編輯 收藏
          僅列出標(biāo)題  
          主站蜘蛛池模板: 本溪市| 平舆县| 加查县| 油尖旺区| 临安市| 曲阳县| 衢州市| 韶关市| 会宁县| 新安县| 湘阴县| 鄄城县| 西贡区| 高阳县| 绥德县| 安顺市| 长寿区| 南昌市| 图们市| 朔州市| 神木县| 开封市| 隆子县| 和林格尔县| 广丰县| 台湾省| 绥化市| 天全县| 武邑县| 铅山县| 兴宁市| 尤溪县| 汶川县| 锦屏县| 通道| 广南县| 霸州市| 榆树市| 灌云县| 江阴市| 南陵县|