ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>蜜桃在线视频,国产成人精品亚洲日本在线观看,久久99精品久久久久久园产越南http://www.aygfsteel.com/andyhan/category/15648.htmlzh-cnThu, 01 Mar 2007 02:38:07 GMTThu, 01 Mar 2007 02:38:07 GMT60XFireåQšè½»æ„¡®€å•地开发Web Services[转]http://www.aygfsteel.com/andyhan/archive/2006/09/25/71733.html家有ž®çŒ«'s Java Blog家有ž®çŒ«'s Java BlogMon, 25 Sep 2006 06:22:00 GMThttp://www.aygfsteel.com/andyhan/archive/2006/09/25/71733.htmlhttp://www.aygfsteel.com/andyhan/comments/71733.htmlhttp://www.aygfsteel.com/andyhan/archive/2006/09/25/71733.html#Feedback0http://www.aygfsteel.com/andyhan/comments/commentRss/71733.htmlhttp://www.aygfsteel.com/andyhan/services/trackbacks/71733.html摘要:XFire是一个免费的开源SOAP框架åQŒå®ƒä¸ä»…可以极大方便地实现这样一个环境,òq¶ä¸”可以提供许多Web Services规范中高¾U§ç‰¹å¾ï¼Œ˜q™äº›ç‰¹å¾åœ¨å¤šæ•°çš„商业或者开源工具都没有提供。你要恰当的理解˜q™äº›å•词åQšgreat ease and simplicityåQˆéžå¸¸è½»æ‘Ö’Œ½Ž€å•)。你ž®†ä¼š(x¨¬)看到使用XFire创徏Web Services是多么的½Ž€å•ã€?br />
ž®†ä½ çš„POJOæ–ÒŽ(gu¨©)³•发布为Web Services

摘要

问一ä¸?Net的开发者,开发Web Services有多困难åQŸä»–们会(x¨¬)被你的问题逗乐åQŒä»–们会(x¨¬)告诉你所有步骤花费的旉™—´ä¸ä¼š(x¨¬)­‘…过一分钟。再问一下Java开发者,˜qæ°”好的话你ä¼?x¨¬)碰åˆîC¸Šé¢çš„回答åQŒä¸€èˆ¬æƒ…况下åQŒä½ ä¼?x¨¬)å¾—åˆîC¸€ä¸ªå®Œå…¨ä¸åŒçš„½{”案。从Web Services引入到Java中至今已¾l?òq´äº†åQŒç„¶è€Œå®ƒä»ç„¶è¢«è®¤ä¸ºæ˜¯ä¸€é—¨è¾ƒæ–°çš„æŠ€æœ¯ï¼Œä¸€ä¸ªä¸»è¦çš„原因ž®±æ˜¯ä½¿ç”¨Java实现Web Services太困难了。现在,随着æ–îC¸€ä»£Web Services引擎XFire的发布,˜q™ç§æƒ…况ž®†ä¼š(x¨¬)发生明显的变化。ä‹É用XFireåQŒä½ å¯ä»¥æŠŠJava¾cÀL–¹æ³•å‘å¸ƒäØ“(f¨´)Web Services而不需要编写额外的代码。在˜q™ç¯‡æ–‡ç« ä¸­ï¼Œä½ å°†ä¼?x¨¬)看到XFire使Web Services开发变得多么容易和½Ž€å•ã€?br />
Web Services使我们能够在¾|‘络上徏立分布式¾pȝ»ŸåQŒåº”用程序组件可以通过ä»ÖM½•òq›_°ã€ä“Q何语­a€å’Œä“Q何方式访问。无论应用程序如何开发,使用了什么语­a€åQŒä»¥å?qi¨¢ng)运行在什么操作系¾lŸåã^åîC¸ŠåQŒåªè¦å®ƒä½œäØ“(f¨´)Web ServiceåQŒåÆˆä¸”äØ“(f¨´)协同解决问题而设计,那么你的应用½E‹åºåQŒä»¥ä»ÖM½•语言开发或在ä“Q何åã^åîC¸ŠåQŒéƒ½å¯ä»¥åˆ©ç”¨å®ƒçš„æœåŠ¡ã€‚è¿™æ˜¯Web Service的主要概å¿üc(di¨£n)€?br />
ä¸ÞZº†å®žçްWeb Servicesçš„åã^台无å…Ïx€§å’Œå®žçŽ°è®‰K—®ç‹¬ç«‹æ€§ï¼Œè½¯äšg行业需要遵循一些作为标准的技术。其中一些包括:(x¨¬)
---XMLåQšåœ¨Web Services环境中各层之间进行传递的默认数据格式ã€?br />-- -SOAPåQšå°è£…和交换信息的默认协议。第一‹Æ¡è¢«æå‡ºæ—Óž¼Œå®ƒæ˜¯åªå–Simple Object Access ProtocolåQˆç®€å•对象访问协议)的首字母。但是现在SOAP更多被认为是一个特定的名词åQŒä»¥å®ƒè‡ªå·Þp€Œå‘½åï¼ŒåŒæ ·å¾ˆå¤šäºø™®¤ä¸ø™¿™æ˜¯ç”¨è¯ä¸å½“:(x¨¬)SOAP实际上不是用来访问对象的。另外,它也不再½Ž€å•ã€?br />---WSDLåQˆWeb Services Description LanguageåQŒW(xu¨¦)eb Services描述语言åQ‰ï¼š(x¨¬)描述Web Services的语­a€ã€‚å°½½Ž¡åŸºäºŽXMLòq¶ä¸”可以被äh理解åQŒW(xu¨¦)SDL主要是由机器处理åQŒç”±å®¢æˆ·ç«¯ç¨‹åºè¯»å–和理解ã€?br />
下面的高¾U§å±‚‹Æ¡å›¾è¡¨ï¼ŒåŸÞZºŽWWW协会(x¨¬)发布的“Web Services Architecture”(Web Servicesæž¶æž„åQ‰æ–‡æ¡£ï¼Œæ˜„¡¤ºäº†è¿™äº›æŠ€æœ¯åœ¨å®žé™…的工作环境中是如何发挥作用:(x¨¬)

image
˜q™ä¸ª‹¹ç¨‹å›¾æ˜¾½CÞZº†Web Services中的核心技术是如何工作的ã€?br />
˜q™é‡ŒåQŒProvider是提供服务的应用½E‹åº¾l„äšgåQŒRequester是ä‹É用服务的客户端程序。很多其他技术也ä¼?x¨¬)参与到交互中,但是˜q™ä¸ªå›‘֏ªæ˜„¡¤ºäº†åœ¨Web Services环境中必需的核心技术组件ã€?br />
XFire 是一个免费的开源SOAP框架åQŒå®ƒä¸ä»…可以极大方便地实现这样一个环境,òq¶ä¸”可以提供许多Web Services规范中高¾U§ç‰¹å¾ï¼Œ˜q™äº›ç‰¹å¾åœ¨å¤šæ•°çš„商业或者开源工具都没有提供。你要恰当的理解˜q™äº›å•词åQšgreat ease and simplicityåQˆéžå¸¸è½»æ‘Ö’Œ½Ž€å•)。你ž®†ä¼š(x¨¬)看到使用XFire创徏Web Services是多么的½Ž€å•ã€?br />
假如你的Web应用有一个Java¾c»ï¼Œòq¶ä¸”ä½ æƒ³æŠŠå®ƒçš„ä¸€ä¸ªæ–¹æ³•å‘å¸ƒäØ“(f¨´)Web ServicesåQŒå½“使用XFireæ—Óž¼Œä½ ä¸éœ€è¦ç¼–写一行额外的Java代码。只需要编辑发布描˜q°ç¬¦åQŒç„¶åŽä½ ž®×ƒ¼š(x¨¬)得到一个Web Services。是的,它相当地½Ž€å•。我们来看一个例子ã€?br />
一个简单的Java¾c?/span>

我们的例子是一个银行业应用½E‹åºåQŒæœåŠ¡å™¨æ˜¯è¿è¡Œåœ¨J2SE1.4.2_07下的Apache Tomcat5.5.7。假定你已经了解如何使用Java¾~–写Web应用½E‹åºåQŒåƈ知道应该如何把它部çÖv到Apache Tomcat服务器上。我们的Web应用½E‹åºéžå¸¸½Ž€å•;它只做一件事——将资金从一个è̎戯‚{到另外一个è̎户上。一个普通的Java¾c?BankingService包含了一个叫做transferFunds()的方法来为我们完成这™å¹å·¥ä½œã€‚它需要四个输入参敎ͼš(x¨¬)
1、        String fromAccount
2、        String toAccount
3、        double amount
4、        String currency

代码如下åQ?br />
package com.mybank.xfire.example;

import java.text.NumberFormat;
import java.text.DecimalFormat;

/** XFire WebServices sample implementation class. 
*/

public class BankingService implements IBankingService {
    
    
//Default constructor.
    public BankingService(){    
    }

    
    
/** Transfers fund from one account to another.
    
*/

    
public String transferFunds(
        String fromAccount, String toAccount, 
double amount, String currency){
        
        String statusMessage 
= "";
                      
        
//Call business objects and other components to get the job done.
        
//Then create a status message and return.
        try {
            NumberFormat formatter 
= new DecimalFormat("###,###,###,###.00");       
            statusMessage 
= "COMPLETED: " + currency + " " + formatter.format(amount)+ 
            
" was successfully transferred from A/C# " + fromAccount + " to A/C# " + toAccount;
        }
 catch (Exception e){
            statusMessage 
= "BankingService.transferFunds(): EXCEPTION: " + e.toString();
        }

        
return statusMessage;
    }

    
}


在这里你看到了什么异常的东西了吗åQŸæˆ–许没有,除了默认的构造函敎ͼŒ¾cÕdž‹æ˜¯public。这是必™åȝš„。否则,XFire不能够初始化˜q™ä¸ª¾c…R€?br />
因䨓(f¨´)使用接口的设计是一个好的实践,所以我们的Java¾cÖM¹Ÿå®žçŽ°äº†ä¸€ä¸ªç§°ä¸ºIBankingService的接口。代码十分简单:(x¨¬)

 

package com.mybank.xfire.example;

public interface IBankingService {  

    
public String transferFunds(
        String fromAccount, String toAccount, 
double amount, String currency);
        
}


在实际实çŽîC¸­åQŒè¿™æ ·ä¸€ä¸ªæ–¹æ³•可能包括各¿Uç±»åž‹çš„复杂调用、查询和处理操作。但是我们的½CÞZ¾‹ä»£ç å·²ç»æœ€ž®åŒ–了,以至于我们可以集中精力在主要目标上:(x¨¬)æŠŠè¿™ä¸ªæ–¹æ³•å‘å¸ƒäØ“(f¨´)Web Servicesã€?br />
你可以看到BankingService是一个普通的Java¾c»ï¼Œæ²¡æœ‰ä»ÖM½•代码告诉我们它将ä¼?x¨¬)在Web Services中ä‹É用。好的,˜q™é‡Œæˆ‘们不需要增加ä“Q何东è¥Ñ€‚我们所有的工作都在部çÖv描述½W¦é‡Œå®Œæˆã€?br />
Web应用的部¾|²æ˜q°ç¬¦

在Java 中,W(xu¨¦)eb应用½E‹åºé€šå¸¸éœ€è¦è‡³ž®‘一个部¾|²æ˜q°ç¬¦åQˆå«åšweb.xmlåQ‰å¯¹å…¶è¿›è¡Œé…¾|®ã€‚XFire本èín是一个基于servlet的应用程序。因此,我们需要增加必要的引用到描˜q°ç¬¦æ–‡äšg中。然后我们还必须配置ž®†è¦åˆ›å¾çš„Web Services。我们ä‹É用一个称为services.xml的新文äšg来完成这件事ã€?br />
web.xml
首先åQŒä¿®æ”¹web.xml。我们需要增加下面的XFire servlet相关的条目:(x¨¬)

   <servlet>
        
<servlet-name>XFireServlet</servlet-name>
        
<display-name>XFire Servlet</display-name>
        
<servlet-class>org.codehaus.xfire.transport.http.XfireConfigurableServlet
         
</servlet-class>
    
</servlet>

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


services.xml
现在我们不得不说一下我们的Web Services的由什么组成的了。这ç”׃¸€ä¸ªå«åšservices.xml的文件完成,它存攑֜¨META-INF/xfire目录下,而这整个目录攑֜¨ WEB-INF/classesæ–‡äšg夹中åQŒå®ƒåœ¨Web应用½E‹åºçš„æ ‡å‡†ç±»è·¯å¾„中。这里是services.xml中的基本配置条目åQ?br />

<beans xmlns="http://xfire.codehaus.org/config/1.0">
  
  
<service>
    
<name>Banking</name>
    
<namespace>mybank</namespace>
    
<serviceClass>com.mybank.xfire.example.IBankingService</serviceClass>
    
<implementationClass>com.mybank.xfire.example.BankingService</implementationClass>
  
</service>  
  
</beans>

让我们看看这里都包含了什么内宏V€‚Web Services的定义包含在<service>元素中,它还含有一些子元素。第一个子元素æ˜?lt;name>åQŒå®ƒå¯ä»¥æ˜¯ä½ æä¾›ä»ÖM½•的合法名字。这ž®†ä¼š(x¨¬)被客æˆïL(f¨¥ng)«¯½E‹åºå’Œå…¶å®ƒéœ€è¦å®šä½ä½ çš„æœåŠ¡çš„¾l„äšg用到。例如,在服务准备好以后åQŒä½ ž®†åœ¨‹¹è§ˆå™¨ä¸Šä½¿ç”¨˜q™ä¸ªåå­—来查看WSDLã€?br />
下一个子元素æ˜?lt;namespace>。ä“Q何合法的XML名字都是可以的ã€?lt;namespace>用来唯一标识你的服务的各个参数ã€?br />< serviceClass>元素包含了Java¾cȝš„名字åQŒå®ƒæŒ‡å®šäº†æ–¹æ³•签名。在我们的例子中åQŒå®ƒæ˜¯æŽ¥å£IBankingService。如æž?Java¾cÀL²¡æœ‰å®žçŽîC“Q何接口,你就需要把¾cȝš„名字攑֜¨˜q™é‡Œã€‚在你的Java¾cÀLˆ–者接口中可能有几个方法。只需要一个入口把它们全部发布为Web Servicesã€?br />
<implementationClass>保存了实现方法的Java¾cÕdã€‚这是一个可选元素。如果上一个元ç´?lt;serviceClass>包含了一个接口,那么相应的实现类必须在这里指定ã€?br />
ž®±æ˜¯˜q™æ ·ã€‚我们的Web Services配置完成了ã€?br />
XFire和其它类�/span>

现在是最后一步了åQŒéœ€è¦å¾—到所有必需的类库。我们怎样得到它们呢?去XFire¾|‘ç«™åQŒä¸‹è½½xfire-distribution-1.0.zipåQŒç„¶åŽè§£åŽ‹åˆ°ä¸€ä¸ªæœ¬åœ°æ–‡ä»¶å¤¹ã€‚å¤åˆ¶ä¸‹é¢çš„jaræ–‡äšg和它的库文äšg夹到WEB-INF/lib中:(x¨¬)
•        activation-1.0.2.jar
•        commons-codec-1.3.jar
•        commons-httpclient-3.0.jar
•        commons-logging-1.0.4.jar
•        jaxen-1.1-beta-8.jar
•        jdom-1.0.jar
•        log4j-1.2.x.jar
•        mail-1.3.3_01.jar
•        spring-1.2.x.jar
•        stax-api-1.0.jar
•        wsdl4j-1.5.2.jar
•        wstx-asl-2.9.jar
•        xbean-2.1.0.jar
•        xbean-spring-2.2.jar
•        xfire-all-1.0.jar
•        XmlSchema-1.0.jar

一切妥当。我们来部çÖvå’Œå¯åŠ¨åº”ç”¨ç¨‹åºã€‚äØ“(f¨´)了部¾|²ç¤ºä¾‹åº”用,只需要复制websvc.war到Apache Tomcatçš„webappsæ–‡äšg夹中åQŒå†½{‰å¾…几秒钟。它?y¨­u)®†ä¼?x¨¬)自动启动。这个应用的全部源代码也包含在这个waræ–‡äšg中。我们的½E‹åºå·²ç»å‡†å¤‡ä½œäØ“(f¨´)一ä¸?Web Service了ã€?br />
我们如何知道Web Service正在工作呢?

ä¸ÞZº†äº†è§£Web Service是否正在工作åQŒæˆ‘们需要测试。首先,我们‹¹‹è¯•来看WSDL是否可用。我们在‹¹è§ˆå™¨ä¸­è¾“å…¥URL。哪个URLåQŸå› ä¸ºæˆ‘们的应用½E‹åºçš„waræ–‡äšg是websvc.waråQŒåƈ且在services.xml中给出的服务名是BankingåQŒW(xu¨¦)SDLçš„URL应该是:(x¨¬)http: //localhost:8080/websvc/services/Banking?wsdlã€?br />
è¯äh³¨æ„ï¼š(x¨¬)URL的第一部分åQŒä¾‹å¦‚, http://localhost:8080åQŒå¯èƒ½ä¼š(x¨¬)æ ÒŽ(gu¨©)®ä½ çš„应用服务器不同而不同。无论怎样åQŒå½“你输入URL后,ž®†ä¼š(x¨¬)看到一个XML文档åQŒå®ƒçš„æ ¹å…ƒç´ æ˜?<wsdl:definitions>。这个文档叫做服务的WSDL。如果你看到了,˜q™å°±æ˜¯ä½ çš„应用作为Web Service已经可用的第一个证明ã€?br />
但是˜q™ä¸ª‹¹‹è¯•是不够的。可能会(x¨¬)发生˜q™ç§æƒ…况åQŒå¯ä»¥çœ‹åˆ°WSDLåQŒä½†æ˜¯ä»Žå®¢æˆ·ç«¯ç¨‹åºå¯èƒ½ä¼š(x¨¬)讉K—®ä¸åˆ°æœåŠ¡ã€‚å› æ­¤äØ“(f¨´)了核实服务是否可以访问了åQŒæˆ‘们必™åÖM‹É用一个客æˆïL(f¨¥ng)«¯˜q›è¡ŒæœåŠ¡çš„å®žé™…è°ƒç”¨æ¥˜q›è¡Œä¸€ä¸ªçœŸæ­£çš„‹¹‹è¯•ã€?br />
开发一个客æˆïL(f¨¥ng)«¯

你可以ä‹É用ä“Q何的SOAP工具创徏客户端,例如åQ?Net或者Apache AxisåQŒæœ‰å¾ˆå¤š¿Uæ–¹æ³•:(x¨¬)使用从WSDL产生的stubsåQŒä‹É用动态代理,½{‰ç­‰ã€‚在例子中,我们使用一个动态代理,以一个简单的Servlet形式åQŒå«å?WsClient.javaã€‚äØ“(f¨´)了保持代码两最ž®ï¼Œæ‰€æœ‰åœ¨å±å¹•昄¡¤ºçš„元素都攑֜¨äº†doGet()æ–ÒŽ(gu¨©)³•中。对Web Service的实际调用由callWebService()æ–ÒŽ(gu¨©)³•完成åQŒå®ƒç›¸å½“地简单。和下面的类ä¼û|¼š(x¨¬)

 

   /* Call the Web service
    *
    
*/

    
public String callWebService(
        String fromAccount, String toAccount, 
double amount, String currency) 
        
throws MalformedURLException, Exception {
        
        
//Create a metadata of the service      
        Service serviceModel = new ObjectServiceFactory().create(IBankingService.class);        
        log.debug(
"callSoapServiceLocal(): got service model." );
   
        
//Create a proxy for the deployed service
        XFire xfire = XFireFactory.newInstance().getXFire();
        XFireProxyFactory factory 
= new XFireProxyFactory(xfire);      
    
        String serviceUrl 
= "http://localhost:8080/websvc/services/Banking";
        
        IBankingService client 
= null;
        
try {
            client 
= (IBankingService) factory.create(serviceModel, serviceUrl);
        }
 catch (MalformedURLException e) {
            log.error(
"WsClient.callWebService(): EXCEPTION: " + e.toString());
        }
    
               
        
//Invoke the service
        String serviceResponse = "";
        
try { 
            serviceResponse 
= client.transferFunds(fromAccount, toAccount, amount, currency);
       }
 catch (Exception e){
            log.error(
"WsClient.callWebService(): EXCEPTION: " + e.toString());                 
            serviceResponse 
= e.toString();
        }
        
        log.debug(
"WsClient.callWebService(): status=" + serviceResponse);              

        
//Return the response
        return serviceResponse;
    }
  


˜q™ä¸ªä»£ç æ˜¯å¦‚何工作的呢?我来解释一下:(x¨¬)首先åQŒæˆ‘们创å»ÞZ¸€ä¸ªæœåŠ¡æ¨¡åž‹ï¼Œå®ƒåŒ…å«æœåŠ¡çš„è¯´æ˜Žâ€”â€”æ¢å¥è¯è¯ß_(d¨¢)¼Œž®±æ˜¯æœåŠ¡çš„å…ƒæ•°æ®ã€‚æˆ‘ä»¬ä‹É用XFireçš„ObjectServiceFactory从IBankingService.class接口创徏˜q™ä¸ªæ¨¡åž‹ã€?br />
接着åQŒäØ“(f¨´)XFire获得一个代理工厂对象,它包含了常规的代码,也相当地½Ž€å•和易懂。这一步中没有ä»ÖM½•特定应用的东è¥Ñ€‚从˜q™ä¸ªproxyFactoryåQŒä‹É用服务模型和服务端点URLåQˆç”¨æ¥èŽ·å¾—WSDLåQ‰ï¼Œæˆ‘们可以得到一个服务的本地代理ã€?br />
ž®±æ˜¯å®ƒäº†ã€‚这个代理就是实际的客户端。现在,我们可以调用它的transferFunds()æ–ÒŽ(gu¨©)³•来得到我们需要的Web Serviceã€?br />ä¸€æ—¦ç¤ºä¾‹åº”ç”¨å‘å¸ƒåÆˆå¯åŠ¨åQŒå°±å¯ä»¥ž®è¯•servlet URLåQ?br />http://localhost:8080/websvc/wsã€?br />
˜q™ä¸ªServlet使用默认参数来调用Web Service和显½CºæŽ¥æ”¶åˆ°çš„响应。页面的最后两行应该读取:(x¨¬)
Response Received
COMPLETED: CDN$ 500.00 was successfully transferred from A/C# 11111-01234 to A/C# 99999-05678

现在你可以确定Web Service已经发布òq¶ä¸”在运行中了ã€?br />
ä¸ÞZº†ž®è¯•不同的输入å€û|¼Œä½ å¯ä»¥ä‹É用完整的URLåQŒä¾‹å¦‚:(x¨¬)
http://localhost:8080/websvc/ws?from=11-2345&to=77-9876&amt=250.00&cur=EUR�br />
基本的Web Services开发步骤清�/span>

˜q™ä¸ªæ¸…单æ€È»“了将一个Javaæ–ÒŽ(gu¨©)³•发布为Web Service所必须的步骤:(x¨¬)
1、        检查Java¾cÈš„æ–ÒŽ(gu¨©)³•å’Œé»˜è®¤æž„é€ å‡½æ•°ç¡®ä¿äØ“(f¨´)public
2、        增加XFire servlet相关条目到web.xmlä¸?br />3、        创建services.xmlåQŒæŠŠå®ƒæ”¾åˆ°WEB-INF/classes/META-INF/xfire目录ä¸?br />4、        增加XFire和第三方包到你的Web应用的WEB-INF/libæ–‡äšg夹中

˜q™å°±æ˜¯æ‰€æœ‰éœ€è¦çš„æ­¥éª¤åQŒæ˜¯çš„,相当½Ž€å•ã€?br />
XFire的其他高¾U§ç‰¹æ€?/span>

XFireçš„ä‹É用可能比较简单,但是在特性和功能性上åQŒå®ƒå´å æ®ç€é¢†å¯¼è€…的位置。下面是它的高çñ”ç‰ÒŽ(gu¨©)€§ï¼š(x¨¬)
-- -本地数据¾l‘定支持POJOsåQˆplain-old Java objectsåQ‰ã€XMLBeans、JAXBåQˆJava Architecture for XML BindingåQ‰ã€Castor½{‰ç­‰ã€‚数据绑定说明了Web Servicesçš„XMLè¯äh±‚和映ž®„到Java对象的XML响应ã€?br />---使用StAXåQˆStreaming API for XMLåQ‰å¤„理XML文档。同DOM的基于树(w¨¨i)å’ŒSAX的事仉™©±åŠ¨çš„å¤„ç†æ–¹å¼ç›¸æ¯”åQŒStAX使用了拉åQˆpullåQ‰æœºåˆÓž¼Œå®ƒä‹É处理更快速,内存效率更高ã€?br />---支持多种传输协议åQŒå¦‚HTTP、JMSåQˆJava Message ServiceåQ‰å’ŒJVM内部传输ã€?br />---嵌入式,˜q™æ˜¯XFire的核心功能之一。你可以把这个SOAP引擎嵌入åˆîC½ çš„应用中åQŒå®Œå…¨éšè—æ‰€æœ‰XFire特定引用åQŒåŒæ äh‰€æœ‰é…¾|®éƒ½æ˜¯ç¨‹åºé©±åЍã€?br />---丰富的APIåQŒå®ƒä½¿XFire可高度自定义åQŒå…è®¸å¼€å‘者在不同的阶ŒD‰|ˆªèޝ‚¯·æ±‚,òq¶ä¸”对他们进行处理ã€?br />-- -兼容最新的标准例如SOAP1.1åQˆæ²¡æœ‰åŠ å¯†è¿œ½E‹å·¥½E‹è°ƒç”¨ï¼Œæˆ–者RPCåQ‰å’Œ1.2、WSDL1.1、the Web Services Interoperability Organization’s Basic Profile 1.0、Web Services Addressingå’ŒW(xu¨¦)S-Securityã€?br />
最重要的是åQŒXFire属于æ–îC¸€ä»£Web Services引擎。不仅仅是营销用语åQŒâ€œæ–°ä¸€ä»£â€æœ‰ä¸€äº›é‡è¦çš„æ„ä¹‰ã€‚Apache Axis是第一代Java语言的Web Services引擎åQŒå·²¾læˆä¸ÞZº†æ‰€æœ‰åŽæ¥å·¥å…ïL(f¨¥ng)š„参考标准。在˜q‡åŽ»çš„å‡ òq´é‡ŒåQŒAxis以及(qi¨¢ng)˜q™äº›å…¶å®ƒçš„工具已¾låœ¨å¾ˆå¤šç”Ÿäñ”环境中进行了实地‹¹‹è¯•。从中得出的一个关键的问题ž®±æ˜¯Web Servicesòq¶ä¸æœ€é€‚合RPC¾cÕdž‹çš„通信。对于性能和效率,面向文档的消息åŞ式是最好的方式。但是Apache Axis和很多其他的Web Services引擎都被设计成了面向RPC的(ž®½ç®¡å®ƒä»¬æ”¯æŒæ–‡æ¡£å½¢å¼åQ‰ã€‚现在,整个行业正在开发新一代的SOAP引擎åQŒè®¾è®¡äØ“(f¨´)面向文档的。Apache 已经宣布¾l“束旧版本的Axis引擎开发,现在专注于Axis2åQŒçŽ°åœ¨å®ƒçš„é¢„å‘å¸ƒç‰ˆæœ¬æ˜?.95。XFire在今òq´çš„2月䆾发布了它的第一个äñ”品版本(1.0åQ‰ã€‚它的下一个版本(1.1åQ‰ä»…仅在几个星期之后ž®Þp¿›è¡Œäº†å‘布ã€?br />
性能

Web Services需要消耗很多资源,但是性能斚w¢å®ƒä»¬ä¸æ˜¯é‚£ä¹ˆå¼•äh注目。XFire打破了这¿Uè¶‹åŠÑ€‚它消耗更ž®‘的内存åQˆéƒ¨åˆ†å› ä¸?StAXçš„ä‹É用)åQŒä½†æ˜¯è¡¨çŽ°å´æ¯”å¤šæ•°å¯æ¯”è¾ƒçš„SOAPå¼•æ“Žå‡ø™‰²ã€‚你可以在资源中提供的链接中看到比较的结果ã€?br />此外åQŒXFire˜q˜æä¾›äº†å„种æ–ÒŽ(gu¨©)³•来进一步优化性能。一个方法是使用JVM内置传输åQˆin-JVM transportåQ‰ã€‚如果你知道Web Services和客æˆïL(f¨¥ng)«¯˜qè¡Œåœ¨åŒä¸€ä¸ªJVM上,你可以选择使用本地传输åQŒå®ƒå¯ä»¥å¤§å¹…提升性能。在½CÞZ¾‹ä¸­çš„客户端代码,看以下指定服务端点URL的这行:(x¨¬)
String serviceUrl = "http://localhost:8080/websvc/services/Banking";
替换�br />String serviceUrl = "xfire.local://Banking";

你会(x¨¬)看到性能上的明显提高åQŒå› ä¸ºå®ƒ¾l•过了整个网¾lœå±‚ã€?br />
局限�/span>

XFire有些重要的局限性你应该清楚åQ?br />-- -开发Web Services的好的实跉|˜¯ä»ŽWSDL开始。大部分的SOAP引擎提供了从WSDL生成服务stub的工兗÷€‚XFire也提供了˜q™æ ·ä¸€ä¸ªå·¥å…—÷€‚但是它是基于注释(annotations-basedåQ‰çš„åQŒå› æ­¤éœ€è¦J2SE5.0。对于仍坚持使用J2SE1.4.xçš„äh来说åQŒå®ƒä¸æ˜¯ä¸€ä¸ªä×o(h¨´)人拍手叫好的工具åQŒå› ä¸ºæˆ‘们有很多其他方式来编写客æˆïL(f¨¥ng)«¯åQŒä¸€ä¸ªå°±æ˜¯æ–‡ç« ä¸­æ¼”示的方式ã€?br />---附äšg支持åQŒå®ƒ?y¨­u)®†ä¼?x¨¬)包含在未来发行的版本中ã€?br />---易于学习(f¨¤n)的用户向对{€‚XFire团队在这个方面还有很多工作需要做ã€?br />
¾l“论

Java 当前的趋势是½Ž€åŒ–技术的使用。因此,我们正看åˆîC¸€æ³¢åŸºäºŽPOJO的开发成ž®±ã€‚同æ—Óž¼Œé¢å‘服务架构åQˆSOAåQŒServices-oriented architectureåQ‰å’ŒW(xu¨¦)eb Services已经变成了当前行业的热点话题。XFire正是在这¿Uæƒ…况下产生的。它能够使POJO发布为最ž®‘çš„Web ServicesåQŒè€Œåªéœ€è¦ä»˜å‡ºæœ€ž®åŒ–的努力。从而,它ä‹É希望使用˜q™é¡¹æŠ€æœ¯çš„初çñ”开发者的学习(f¨¤n)曲线变得òq³ç¼“。同æ—Óž¼Œç”׃ºŽå®ƒå…¼å®ÒŽ(gu¨©)œ€æ–°æ ‡å‡†å’Œæä¾›äº†ä¸°å¯Œçš„ APIåQŒXFire为高¾U§ç”¨æˆähä¾›äº†æ›´å¤šçš„大好机ä¼?x¨¬)ã€?br />
关于作�/b>
Shahid Ahmed是一个èÊY件架构师åQŒå¦‚今在¾ŸŽå›½ä¸€å®¶ä¸»è¦çš„æ— çº¿˜qè¡Œå•†ä½œå’¨è¯¢å·¥ä½œã€‚ä»–åœ?2òq´å‰å¼€å§‹å¼€å‘èÊYä»Óž¼Œå½“æ—¶Kaypro、Osborne、Apple IIå’ŒTRS-80s¾lŸæ²»ç€æ•´ä¸ªåœ°çƒã€‚在˜q‡åŽ»çš?òq´é‡ŒåQŒä»–更多的精力集中于Java。他现在的工作包括SOA、Web Services、消息、POJO、Spring、Ajax½{‰ç­‰ã€‚Shahid是一个èÊY件热衯‚€…,每天都在奋斗以求在技术的˜qäh‹å’Œç¤¾ä¼?x¨¬)生‹zȝš„热爱之间å¯ÀL‰¾òqŒ™¡¡ç‚V€?br />
资源åQ?/b>
Matrix Java½C‘ÖŒº:http://www.matrix.org.cn
下蝲本文中的½CÞZ¾‹åº”用åQ?a target="_new">http://www.javaworld.com/javaworld/jw-05-2006/xfire/jw-0501-xfire.zip
Web Servicesæž¶æž„:http://www.w3.org/TR/ws-arch/
WSDL2.0åQˆåŽŸæ¥æè®®äØ“(f¨´)WSDL1.2åQŒçŽ°åœ¨é‡æ–°å‘½åäº†åQ‰ï¼š(x¨¬)½W¬ä¸€éƒ¨åˆ†åQšæ ¸å¿ƒè¯­­a€åQˆW3C Candidate Recommendation 27 March 2006åQ?br />
引自:http://www.matrix.org.cn/resource/article/2006-09-24/XFire_6bd1061c-4bc6-11db-978f-43b3336b7e51.html



]]>
Axis WSDD Referencehttp://www.aygfsteel.com/andyhan/archive/2005/06/17/6264.html家有ž®çŒ«'s Java Blog家有ž®çŒ«'s Java BlogFri, 17 Jun 2005 03:02:00 GMThttp://www.aygfsteel.com/andyhan/archive/2005/06/17/6264.htmlhttp://www.aygfsteel.com/andyhan/comments/6264.htmlhttp://www.aygfsteel.com/andyhan/archive/2005/06/17/6264.html#Feedback0http://www.aygfsteel.com/andyhan/comments/commentRss/6264.htmlhttp://www.aygfsteel.com/andyhan/services/trackbacks/6264.htmlAxis WSDD Reference

The SOAP tool Apache Axis offers a lot of features which require the use of a deployment descriptor. This reference describes all the elements and attributes which can be used in a WSDD deployment descriptor.

Elements

All Elements belong to the http://xml.apache.org/axis/wsdd/ namespace.


http://www.osmoticweb.com/axis-wsdd/

]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º ÁÙÏÄÊÐ| ÐÏÌ¨ÏØ| ¿ÑÀûÏØ| Öн­ÏØ| üɽÊÐ| ÇàÆÖÇø| ´ó¹ØÏØ| ¿ª·âÏØ| ¹ÌÑôÏØ| ÐÂÒ°ÏØ| ¸Ê¹ÈÏØ| ͨÐíÏØ| Àè´¨ÏØ| ¶þÁ¬ºÆÌØÊÐ| ¸ÇÖÝÊÐ| ÎÚÀ­ÌغóÆì| Á«»¨ÏØ| Õű±ÏØ| ¶¨Î÷ÊÐ| ÜþÑôÊÐ| ȪÖÝÊÐ| ׿×ÊÏØ| ¸®¹ÈÏØ| ÉîÛÚÊÐ| Óí³ÇÊÐ| ³çÀñÏØ| ÐÃÖÝÊÐ| ¿µÂíÏØ| ³¤×ÓÏØ| ƽ½­ÏØ| ÊÖ»ú| ºþÄÏÊ¡| ×ó¹±ÏØ| ËàÄþÏØ| ÑôÎ÷ÏØ| ÏĺÓÏØ| Ëç·ÒºÓÊÐ| Ì©ÖÝÊÐ| Òø´¨ÊÐ| ÉîË®ˆ¶Çø| Ìì½òÊÐ|