锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲激情在线观看,亚洲视频在线一区二区,亚洲av无码一区二区三区乱子伦http://www.tkk7.com/wuxufeng8080/category/12717.htmlzh-cnSat, 03 Mar 2007 05:00:07 GMTSat, 03 Mar 2007 05:00:07 GMT60Java6 WebServices 錛堜簩錛夊鎴風 (ZT)http://www.tkk7.com/wuxufeng8080/articles/89492.html椋庝漢鍥?/dc:creator>椋庝漢鍥?/author>Fri, 22 Dec 2006 04:54:00 GMThttp://www.tkk7.com/wuxufeng8080/articles/89492.html鍦?a _fcksavedurl="http://blog.csdn.net/vip01/archive/2006/12/20/1450269.aspx">Java6 WebServices 錛堜竴錛夋湇鍔$榪欑瘒鏂囩珷涓拰澶у鍒嗕韓浜咼ava6 WebServices 鏈嶅姟绔殑鍐欐硶錛屽厜鏈夋湇鍔$榪樹笉琛岋紝榪樿鏈夊鎴風鎵嶈鍟娿傜湅浜嗕竴浜涚綉鍙嬬殑鐩稿叧鏂囩珷錛岄兘鍙粰鍑轟簡鏈嶅姟绔殑鍐欐硶錛屾病鏈夎瀹㈡埛绔庝箞璇淬傜粡榪囦竴鐣爺絀訛紝緇堜簬鎼炲畾浜嗗鎴風錛屼粖澶╁伓灝卞拰澶у鍒嗕韓涓嬨?br />棣栧厛鍚姩Java6 WebServices 錛堜竴錛夋湇鍔$涓鏂囦腑鍐欏ソ鐨勬湇鍔$銆?br />鏂板緩涓」鐩傚懡浠よ鍒皊rc鐩綍鎵ц錛?br />wsimport -keep聽 http://localhost:8080/HelloService?wsdl
浼氳嚜鍔ㄧ敓鎴愪竴浜涗唬鐮併?br />

package聽org.hermit.study.jdk.client;

import聽javax.jws.WebMethod;
import聽javax.jws.WebParam;
import聽javax.jws.WebResult;
import聽javax.jws.WebService;
import聽javax.jws.soap.SOAPBinding;


/**
聽*聽This聽class聽was聽generated聽by聽the聽JAXWS聽SI.
聽*聽JAX-WS聽RI聽2.0_02-b08-fcs
聽*聽Generated聽source聽version:聽2.0
聽*聽
*/
@WebService(name聽
="Hello",聽targetNamespace聽="http://jdk.study.hermit.org/client")
@SOAPBinding(style聽
=聽SOAPBinding.Style.RPC)
publicinterface聽Hello聽{


聽聽聽聽
/**
聽聽聽聽聽*聽
聽聽聽聽聽*聽
@param聽arg0
聽聽聽聽聽*聽
@return
聽聽聽聽聽*聽聽聽聽聽returns聽java.lang.String
聽聽聽聽聽
*/
聽聽聽聽@WebMethod
聽聽聽聽@WebResult(partName聽
="return")
聽聽聽聽
public聽String聽sayHello(
聽聽聽聽聽聽聽聽@WebParam(name聽
="arg0",聽partName聽="arg0")
聽聽聽聽聽聽聽聽String聽arg0);

}

package聽org.hermit.study.jdk.client;

import聽java.net.MalformedURLException;
import聽java.net.URL;
import聽javax.xml.namespace.QName;
import聽javax.xml.ws.Service;
import聽javax.xml.ws.WebEndpoint;
import聽javax.xml.ws.WebServiceClient;


/**
聽*聽This聽class聽was聽generated聽by聽the聽JAXWS聽SI.
聽*聽JAX-WS聽RI聽2.0_02-b08-fcs
聽*聽Generated聽source聽version:聽2.0
聽*聽
*/
@WebServiceClient(name聽
="HelloService",聽targetNamespace聽="http://jdk.study.hermit.org/client",聽wsdlLocation聽="http://localhost:8080/HelloService?wsdl")
publicclass聽HelloService
聽聽聽聽
extends聽Service
{

聽聽聽聽
privatefinalstatic聽URL聽HELLOSERVICE_WSDL_LOCATION;

聽聽聽聽
static聽{
聽聽聽聽聽聽聽聽URL聽url聽
=null;
聽聽聽聽聽聽聽聽
try聽{
聽聽聽聽聽聽聽聽聽聽聽聽url聽
=new聽URL("http://localhost:8080/HelloService?wsdl");
聽聽聽聽聽聽聽聽}聽
catch聽(MalformedURLException聽e)聽{
聽聽聽聽聽聽聽聽聽聽聽聽e.printStackTrace();
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽HELLOSERVICE_WSDL_LOCATION聽
=聽url;
聽聽聽聽}

聽聽聽聽
public聽HelloService(URL聽wsdlLocation,聽QName聽serviceName)聽{
聽聽聽聽聽聽聽聽
super(wsdlLocation,聽serviceName);
聽聽聽聽}

聽聽聽聽
public聽HelloService()聽{
聽聽聽聽聽聽聽聽
super(HELLOSERVICE_WSDL_LOCATION,聽new聽QName("http://jdk.study.hermit.org/client",聽"HelloService"));
聽聽聽聽}

聽聽聽聽
/**
聽聽聽聽聽*聽
聽聽聽聽聽*聽
@return
聽聽聽聽聽*聽聽聽聽聽returns聽Hello
聽聽聽聽聽
*/
聽聽聽聽@WebEndpoint(name聽
="HelloPort")
聽聽聽聽
public聽Hello聽getHelloPort()聽{
聽聽聽聽聽聽聽聽
return聽(Hello)super.getPort(new聽QName("http://jdk.study.hermit.org/client",聽"HelloPort"),聽Hello.class);
聽聽聽聽}

}

涓嬮潰鎴戜滑鍐嶅啓涓祴璇曪紝鐪嬬湅鑳戒笉鑳界敤錛?br />
package聽org.hermit.study.jdk.client.test;

import聽org.hermit.study.jdk.client.Hello;
import聽org.hermit.study.jdk.client.HelloService;


publicclass聽TestClient聽{
聽聽聽聽
publicstaticvoid聽main(String[]聽args)聽{
聽聽聽聽聽聽聽聽HelloService聽service聽
=new聽HelloService();
聽聽聽聽聽聽聽聽Hello聽_hello聽
=聽service.getHelloPort();
聽聽聽聽聽聽聽聽System.out.println(_hello.sayHello(
"hermit"));
聽聽聽聽}
}
鎵ц銆?br />鎺у埗鍙拌緭鍑猴細
hello:hermit

ok錛佹悶瀹氥?br />java6鎼炲畾web service灝辮繖涔堢畝鍗曘傘傘傘傘傘傘傘傘傘傘傘傘傘傘傘傘傘傘傘傘傘傘傘傘傘?br />
xfire鍗遍櫓浜嗐傘傘傘傘傘傘傘傘傘傘傘傘傘傘傘傘傘傘傘傘傘傘傘?/div>

]]>
Java6 WebServices 錛堜竴錛夋湇鍔$ (ZT)http://www.tkk7.com/wuxufeng8080/articles/89491.html椋庝漢鍥?/dc:creator>椋庝漢鍥?/author>Fri, 22 Dec 2006 04:53:00 GMThttp://www.tkk7.com/wuxufeng8080/articles/89491.html涓嬮潰灝卞紑濮嬪啓涓渶綆鍗曠殑WebServices錛?br />
package聽org.hermit.study.jdk;

import聽javax.jws.WebMethod;
import聽javax.jws.WebService;
import聽javax.jws.soap.SOAPBinding;

@WebService(targetNamespace聽
="http://jdk.study.hermit.org/client")
@SOAPBinding(style聽
=聽SOAPBinding.Style.RPC)
publicclass聽Hello聽{
聽聽聽聽@WebMethod
聽聽聽聽
public聽String聽sayHello(String聽name)聽{
聽聽聽聽聽聽聽聽
return"hello:"+聽name;
聽聽聽聽}
}
鎬庝箞鏍風畝媧佸惂錛屽緢澶氭湅鍙嬬殑鍐欐硶榪樿鍦ㄥ懡浠よ涓墽琛屸?span style="FONT-FAMILY: 'Courier New',Courier,monospace">wsgen聽鈥揷p聽. <path>鈥?br />鐢ㄥ伓榪欑鏂規(guī)硶鍐欑殑service鍙互鐪佸幓涓婇潰榪欐銆?br />
targetNamespace = "http://jdk.study.hermit.org/client"榪欏彞鏄寚瀹氬鎴風鑾峰彇鏈嶅姟绔湇鍔″悗瀛樻斁鐨勭被璺緞銆傛敞鎰忔槸鍙嶇潃鐨勶紝http: //jdk.study.hermit.org/client鍦ㄥ鎴風鐢熸垚鐨勭被浼氭斁鍦╫rg.hermit.study.jdk.client鍖呬笅銆?br />涓嬮潰鏄彂甯冩湇鍔★細
package聽org.hermit.study.jdk;

import聽javax.xml.ws.Endpoint;

publicclass聽StartService聽{
聽聽聽聽
publicstaticvoid聽main(String[]聽args)聽{
聽聽聽聽聽聽聽聽Endpoint.publish(
"http://localhost:8080/HelloService",聽new聽Hello());
聽聽聽聽}

}
鍛靛懙錛屾洿綆媧併備竴鍙ヨ瘽鑰屽凡銆?br />http://localhost:8080/HelloService鏄寚鍙戝竷鐨勫湴鍧

榪愯
StartService聽錛屽紑鍙戞祻瑙堝櫒杈撳叆錛歨ttp://localhost:8080/HelloService?wsdl



濡傛灉鑳界湅鍒頒互涓嬪唴瀹癸紝灝卞彲浠?br />
<?xml聽version="1.0"聽encoding="UTF-8"聽?>
-聽
<definitions聽xmlns="http://schemas.xmlsoap.org/wsdl/"聽xmlns:tns="http://jdk.study.hermit.org/client"聽xmlns:xsd="http://www.w3.org/2001/XMLSchema"聽xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"聽targetNamespace="http://jdk.study.hermit.org/client"聽name="HelloService">
聽聽
<types聽/>
-聽
<message聽name="sayHello">
聽聽
<part聽name="arg0"聽type="xsd:string"/>
聽聽
</message>
-聽
<message聽name="sayHelloResponse">
聽聽
<part聽name="return"聽type="xsd:string"/>
聽聽
</message>
-聽
<portType聽name="Hello">
-聽
<operation聽name="sayHello"聽parameterOrder="arg0">
聽聽
<input聽message="tns:sayHello"/>
聽聽
<output聽message="tns:sayHelloResponse"/>
聽聽
</operation>
聽聽
</portType>
-聽
<binding聽name="HelloPortBinding"聽type="tns:Hello">
聽聽
<soap:binding聽style="rpc"聽transport="http://schemas.xmlsoap.org/soap/http"/>
-聽
<operation聽name="sayHello">
聽聽
<soap:operation聽soapAction=""/>
-聽
<input>
聽聽
<soap:body聽use="literal"聽namespace="http://jdk.study.hermit.org/client"/>
聽聽
</input>
-聽
<output>
聽聽
<soap:body聽use="literal"聽namespace="http://jdk.study.hermit.org/client"/>
聽聽
</output>
聽聽
</operation>
聽聽
</binding>
-聽
<service聽name="HelloService">
-聽
<port聽name="HelloPort"聽binding="tns:HelloPortBinding">
聽聽
<soap:address聽location="http://localhost:8080/HelloService"/>
聽聽
</port>
聽聽
</service>
聽聽
</definitions>


]]>
閫氳繃 Axis2 寮鍙?Web 鏈嶅姟錛岀 1 閮ㄥ垎: 閫氳繃 Axis2 榪愯鏃墮儴緗插拰浣跨敤綆鍗?Web 鏈嶅姟http://www.tkk7.com/wuxufeng8080/articles/56378.html椋庝漢鍥?/dc:creator>椋庝漢鍥?/author>Mon, 03 Jul 2006 09:01:00 GMThttp://www.tkk7.com/wuxufeng8080/articles/56378.html 寮曡█

Axis2 鏄笅涓浠?Apache Axis銆侫xis2 铏界劧鐢?Axis 1.x 澶勭悊紼嬪簭妯″瀷鎻愪緵鏀寔錛屼絾瀹冨叿鏈夋洿寮虹殑鐏墊椿鎬у茍鍙墿灞曞埌鏂扮殑浣撶郴緇撴瀯銆侫xis2 鍩轟簬鏂扮殑浣撶郴緇撴瀯榪涜浜嗗叏鏂扮紪鍐欙紝鑰屼笖娌℃湁閲囩敤 Axis 1.x 鐨勫父鐢ㄤ唬鐮併傛敮鎸佸紑鍙?Axis2 鐨勫姩鍔涙槸鎺㈠妯″潡鍖栨洿寮恒佺伒媧繪ф洿楂樺拰鏇存湁鏁堢殑浣撶郴緇撴瀯錛岃繖縐嶄綋緋葷粨鏋勫彲浠ュ緢瀹規(guī)槗鍦版彃鍏ュ埌鍏朵粬鐩稿叧 Web 鏈嶅姟鏍囧噯鍜屽崗璁紙濡?WS-Security銆乄S-ReliableMessaging 絳夛級鐨勫疄鐜頒腑銆?/p>

Axis2 鐨勭壒鎬у寘鎷細

  • 閲囩敤鍚嶄負 AXIOM錛?b>AXIs Object Model錛孉xis 瀵硅薄妯″瀷錛夌殑鏂版牳蹇?XML 澶勭悊妯″瀷
  • 鏀寔 In-Only 鍜?In-Out 娑堟伅浜ゆ崲妯″紡 (MEP)
  • 闃誨鍜岄潪闃誨瀹㈡埛绔?API錛堝簲鐢ㄧ▼搴忕紪紼嬫帴鍙o級
  • 鏀寔鍐呯疆鐨?Web 鏈嶅姟瀵誨潃 (WS-Addressing)
  • 鏀寔 XMLBeans 鏁版嵁緇戝畾
  • 鏂伴儴緗叉ā鍨?
  • 鏀寔瓚呮枃鏈紶杈撳崗璁?(HTTP)銆佺畝鍗曢偖浠朵紶杈撳崗璁?(SMTP) 鍜屼紶杈撴帶鍒跺崗璁?(TCP) 絳変紶杈撳崗璁?

鏈郴鍒楁枃绔犱互 Axis2 0.92 鐗堟湰涓哄熀紜銆傛?zhèn)ㄥ彲浠ュ?Apache 緗戠珯鑾峰緱 Axis2 鐨勬渶鏂扮増鏈?/p>



鍥為〉棣?/font>


Axis 浣撶郴緇撴瀯姒傝堪


鍥?1. Axis2 浣撶郴緇撴瀯
Axis2 浣撶郴緇撴瀯

Axis2 浣撶郴緇撴瀯灝嗛昏緫涓庣姸鎬佸垎紱伙紱榪欏厑璁稿湪騫惰綰跨▼涓墽琛岄昏緫銆傛湇鍔″拰璋冪敤鐨勯潤鎬佺姸鎬佸拰鍔ㄦ佺姸鎬佸垎鍒瓨鍌ㄥ湪 Description 鍜?Context 綾諱腑銆侫xis2 浣撶郴緇撴瀯鏄嬌鐢?7 涓嫭绔嬫ā鍧楀疄鐜扮殑銆?/p>

  1. 淇℃伅妯″瀷錛?/b>姝ゆā鍧楃鐞?SOAP 寮曟搸鐨勭姸鎬併傝妯″瀷瀹氫箟涓緇勭敤浜庡瓨鏀劇姸鎬佺殑綾伙紝鑰屽紩鎿庣鐞嗚繖浜涗俊鎭璞$殑鐢熷懡鍛ㄦ湡銆備俊鎭ā鍨嬪寘鍚袱縐嶇敤浜庡瓨鏀劇姸鎬佺殑綾匯?code>Description 綾誨瓨鏀炬湰璐ㄤ笂鏄潤鎬佺殑涓斿瓨鍦ㄤ簬 Axis 寮曟搸瀹炰緥鐨勬暣涓敓鍛藉懆鏈熶腑鐨勬暟鎹紙濡備紶杈撱佹湇鍔″拰鎿嶄綔鐨勯厤緗級銆?code>Context 綾誨瓨鏀捐皟鐢ㄤ笂涓嬫枃涓湁鏁堢殑鏈嶅姟鍜屾搷浣滅殑鍔ㄦ佷俊鎭紝渚嬪褰撳墠璇鋒眰鍜屽搷搴?SOAP 娑堟伅銆丗rom 鍦板潃銆乀o 鍦板潃鍜屽叾浠栧厓绱犮?
  2. XML 澶勭悊妯″瀷錛?/b>Axis2 寮曞叆浜嗕竴涓悕涓?AXIOM 鐨勬柊妯″瀷錛岀敤浜庡鐞?SOAP 娑堟伅銆侫XIOM 浣跨敤 StAX (Streaming API for XML) 鏉ヨВ鏋?XML銆係tAX 鏄竴涓爣鍑嗙殑嫻佸紡 Pull 瑙f瀽鍣?Java鈩?API銆侫XIOM 闈炲父綺懼閥錛屼笉浼氬噺鎱?XML 淇℃伅闆嗙殑鏋勫緩閫熷害鈥斺旀崲鍙ヨ瘽璇達紝瀵硅薄鍙湁鍦ㄧ粷瀵瑰繀瑕佹椂鎵嶄細鍒涘緩銆傛諱綋鑰岃█錛孉XIOM 鍜?Axis2 鎵鍗犵敤鐨勫唴瀛樿灝忎簬 Axis 1 鎵鍗犵敤鐨勫唴瀛樸?
  3. SOAP 澶勭悊妯″瀷錛?/b>Axis2 浣撶郴緇撴瀯瀹氫箟浜嗕袱涓閬擄紙鎴栨祦錛夛紝鍒嗗埆縐頒負 InPipe (InFlow) 鍜?OutPipe (OutFlow)錛岀敤浜庡鐞嗘湇鍔″櫒绔殑璇鋒眰娑堟伅鍜屽搷搴旀秷鎭傚湪瀹㈡埛绔紝榪欎袱涓閬撴槸鍙嶅悜鐨勨斺旀崲鍙ヨ瘽璇達紝SOAP 璇鋒眰娑堟伅嫻佺粡 OutPipe錛岃屽搷搴旀秷鎭祦緇?InPipe銆傜閬撴垨嫻佸寘鍚竴緋誨垪鍒嗕負闃舵鐨勫鐞嗙▼搴忋傞樁孌墊寜鐓ч鍏堝畾涔夌殑欏哄簭鎵ц錛屽涓婇潰鐨?a >鍥?1 鎵紺恒傞櫎棰勫厛瀹氫箟鐨勯樁孌靛拰澶勭悊紼嬪簭闆嗗錛岀敤鎴瘋繕鍙互鍦ㄦ搷浣滅駭鍒佹湇鍔$駭鍒垨鍏ㄥ眬綰у埆閰嶇疆鐢ㄦ埛闃舵鍜岀浉鍏沖鐞嗙▼搴忋傚鐞嗙▼搴忓厖褰?SOAP 娑堟伅鐨勬嫤鎴櫒錛屽彲浠ュ鐞?SOAP 娑堟伅鐨?Header 鎴?Body銆侷nPipe 鏄氳繃浠ヤ笅闃舵榪涜閰嶇疆鐨勶細
    • TransportIn
    • PreDispatch
    • Dispatch
    • PostDispatch
    • PolicyDetermination
    • User phases
    • Message validation
    鎴戜滑灝嗗湪鏈郴鍒楁枃绔犵殑絎?2 閮ㄥ垎涓緇嗕粙緇嶄笂榪板悇闃舵銆傝姹傛秷鎭湪閫氳繃 Inpipe 涓厤緗殑鎵鏈夐樁孌靛悗錛屽埌杈?MessageReceiver錛岀劧鍚庣敱 MessageReceiver 璋冪敤瀹為檯鏈嶅姟瀹炵幇銆傛湇鍔″櫒鐨?OutPipe 鍖呭惈浠ヤ笅闃舵錛?
    • Message initialization
    • Policy determination
    • User phases
    • MessageOut
    鐢ㄦ埛閰嶇疆鐨勯樁孌典綅浜庤繖涓や釜綆¢亾鐨勭敤鎴烽樁孌?User phases) 閮ㄥ垎銆傚鏋滃湪鎵ц榪欎簺綆¢亾鐨勮繃紼嬩腑鍙戠敓閿欒錛屽垯榪欎簺閿欒灝嗛氳繃 InFaultPipe 鎴?OutFaultPipe 綆¢亾銆傛敹鍒?Fault 娑堟伅鍚庯紝鍦ㄥ鎴風璋冪敤 InFaultPipe錛涘鏋滄煇涓皟鐢ㄥ鑷村皢閿欒鍙戦佸埌瀹㈡埛绔紝鍒欏湪鏈嶅姟鍣ㄧ璋冪敤 OutFaultPipe銆傜敤鎴峰彲浠ュ皢澶勭悊紼嬪簭娣誨姞鍒伴鍏堝畾涔夌殑闃舵錛屽茍涓旀寜鐓ц繖浜涘鐞嗙▼搴忚繍琛岀殑欏哄簭榪涜閰嶇疆銆?
  4. 閮ㄧ講妯″潡錛?/b>姝ゆā鍧楅厤緗?Axis 寮曟搸騫墮儴緗叉湇鍔″拰妯″潡銆?i>axis2.xml錛堝湪 webapps/axis2/WEB-INF 涓級鍖呭惈 Axis2 寮曟搸鐨勫叏灞閰嶇疆錛屽寘鎷細
    • 鍏ㄥ眬妯″潡 (Global modules)
    • 鍏ㄥ眬鎺ユ敹鍣?(Global receivers)
    • 浼犺緭 (Transports)
    • 鐢ㄦ埛闃舵瀹氫箟 (User phase definitions)
    姣忎釜鏈嶅姟鐨勯厤緗兘鍖呭惈鍦ㄦ湇鍔″瓨妗g殑 services.xml 鏂囦歡涓傛湰鏂囩◢鍚庡皢璇︾粏璁ㄨ姝ゆ枃浠躲?
  5. WSDL 鍜屼唬鐮佺敓鎴愶細姝ゆā鍧椾粠 WSDL 鏂囦歡涓敓鎴愬鎴風瀛樻牴鍜屾湇鍔″櫒妗嗘灦浠g爜銆侫xis2 浠g爜鐢熸垚鍣ㄥ彂鍑洪噰鐢ㄦ紜?XML 鏍峰紡琛ㄧ殑 XML 鏂囦歡錛屼互鐢ㄦ墍闇璇█鐢熸垚浠g爜銆?
  6. 瀹㈡埛绔?API錛?/b>Axis2 瀹㈡埛绔?API 璋冪敤閬靛驚 WSDL 2.0 瀹氫箟鐨?In-Only 鍜?In-Out 娑堟伅妯″紡鐨勬搷浣溿傚鎴風 API 鏀寔 In-Out 鎿嶄綔鐨勯樆濉炲拰闈為樆濉炶皟鐢ㄣ?
  7. 浼犺緭錛?/b>姝ゆā鍧楀寘鍚笌浼犺緭灞備氦浜掔殑澶勭悊紼嬪簭銆備紶杈撳鐞嗙▼搴忔湁涓ょ綾誨瀷錛歍ransportListener 鍜?TransportSender銆俆ransportListener 浠庝紶杈撳眰鎺ユ敹 SOAP 娑堟伅錛岀劧鍚庡皢鍏朵紶閫佸埌 InPipe 榪涜澶勭悊銆俆ransportSender 鍙戦侀氳繃鎸囧畾浼犺緭浠?OutPipe 鎺ユ敹鍒扮殑 SOAP 娑堟伅銆侫xis2 鎻愪緵 HTTP銆丼MTP 鍜?TCP 鐨勫鐞嗙▼搴忋傚浜?HTTP 浼犺緭錛屾湇鍔″櫒绔笂鐨?AxisServlet 鍜屽鎴風涓婄殑涓涓畝鍗曠殑鐙珛 HTTP 鏈嶅姟鍣紙鐢?Axis2 鎻愪緵錛夊厖褰?TransportReceiver銆?




鍥為〉棣?/font>


閮ㄧ講 Axis2

閮ㄧ講 Axis2 涓庨儴緗?Axis 1 涓鏍風畝鍗曘傞鍏堝湪 Axis2 浜岃繘鍒朵唬鐮佸垎鍙戝寘鐨?webapps 鐩綍涓嬫煡鎵?Axis2 Web 搴旂敤紼嬪簭 axis2.war銆傚湪 servlet 瀹瑰櫒涓儴緗叉 war 鏂囦歡銆傚湪 Tomcat 涓紝濡傛灉宸插湪鏈嶅姟鍣ㄩ厤緗腑灝?unpackWARs 璁劇疆涓?True錛屽垯鍙渶灝?axis2.war 澶嶅埗鍒?$TOMCAT_HOME/webapps 鐩綍鍗沖彲閮ㄧ講 Axis2銆傝绔嬪嵆鍚姩 Tomcat 騫惰闂?http://localhost:<port>/axis2銆傚皢鏄劇ず Axis2 嬈㈣繋欏碉紝鍗曞嚮姝ら〉涓婄殑 Validate 閾炬帴銆傛?zhèn)ㄥ簲鍒拌?Axis2 Happiness page錛屼笉浼氬嚭鐜頒換浣曢敊璇?/p>



鍥為〉棣?/font>


寮鍙?StockQuoteService

涓嬮潰浠嬬粛濡備綍浣跨敤 In-Only subscribe() 鍜?In-Out getQuote() 榪欎袱涓搷浣滄潵寮鍙?StockQuoteService銆俿ubscribe() 鎿嶄綔灝嗛璁㈡寚瀹氫唬鍙風殑姣忓皬鏃舵姤浠鳳紝鑰?getQuote() 灝嗚幏寰楁寚瀹氫唬鍙風殑褰撳墠鎶ヤ環(huán)銆?/p>

涓嬮潰鐨?a >娓呭崟 1 鏄?StockQuoteService 鐨勫疄鐜扮ず渚嬶細


娓呭崟 1. StockQuoteService 瀹炵幇
				
package stock;
import org.apache.axis2.om.OMAbstractFactory;
import org.apache.axis2.om.OMElement;
import org.apache.axis2.om.OMFactory;
import org.apache.axis2.om.OMNamespace;
		
public class StockQuoteService {
		 
  public void subscribe(OMElement in){
    String symbol = in.getText();
    System.out.println("Subscription request for symbol ="+symbol);
    // put the actual subscribe code here...    
  }
		  
		  
  public OMElement getQuote(OMElement in){
		  
    // Get the symbol from request message
    String symbol = in.getText();
		    
    int quote = 0;
    if(symbol.equals("IBM")){
      quote = 100;
    }
    // Put more quotes here ...
		    
    // Create response
    OMFactory fac = OMAbstractFactory.getOMFactory();
    OMNamespace omNs = fac.createOMNamespace(
      "http://www.developerworks.com/example", "example");
    OMElement resp = fac.createOMElement("getQuoteResponse", omNs);
    resp.setText(String.valueOf(quote));
    return resp;      
  }
}

瀵規(guī)柟娉曠鍚嶆劅鍒板緢鐤戞儜錛熸垜浠皢璁ㄨ涓婅堪鏂規(guī)硶涓殑 OMElement銆?/p>



鍥為〉棣?/font>


閮ㄧ講鏈嶅姟

閮ㄧ講鎻忚堪絎?/b>

鍦?Axis2 涓紝鏈嶅姟閮ㄧ講淇℃伅鍖呭惈鍦?services.xml 鏂囦歡錛堝湪 0.92 浠ュ墠鐨勭増鏈腑錛屾鏂囦歡鍚嶄負 service.xml錛変腑銆傚浜庝笂榪?StockQuoteService錛屾湇鍔¢儴緗叉弿榪扮涓庝笅闈㈢殑娓呭崟 2 綾諱技銆?/p>
娓呭崟 2. Services.xml
				
<service name="StockQuoteService">
  <parameter name="ServiceClass" locked="xsd:false">
    stock.StockQuoteService
  </parameter>
		
  <operation name="getQuote">
    <messageReceiver 
      class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
  </operation>
		
  <operation name="subscribe">
    <messageReceiver 
      class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
  </operation>
</service>

鏈嶅姟鐨?name 灞炴у畾涔夋湇鍔$殑鍚嶇О銆侫xis2 浣跨敤鏈嶅姟鐨勫悕縐板垱寤烘湇鍔$殑绔偣鍦板潃錛屼緥濡?http://localhost:<port>/axis2/services/<nameofservice>銆傚洜姝わ紝瀵逛簬 StockQuoteService錛屾湇鍔$鐐逛負 http://localhost:<port>/axis2/services/StockQuoteService銆?code>ServiceClass 鍙傛暟鎸囧畾鏈嶅姟瀹炵幇綾匯?/p>

姣忎釜 <operation> 鍏冪礌瀹氫箟鏈嶅姟涓竴涓搷浣滅殑閰嶇疆銆?lt;operation> 鐨?name 灞炴у簲璁劇疆涓烘湇鍔″疄鐜扮被涓柟娉曠殑鍚嶇О銆?code>messageReceiver 鍏冪礌瀹氫箟鐢ㄤ簬澶勭悊姝ゆ搷浣滅殑娑堟伅鎺ユ敹鍣ㄣ侫xis2 閽堝 In-Only 鍜?In-Out 鎿嶄綔鎻愪緵浜嗕袱涓棤鏁版嵁緇戝畾鐨勫唴緗?MessageReceivers錛?code>org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver 鐢ㄤ簬 In-Only 鎿嶄綔錛岃?org.apache.axis2.receivers.RawXMLINOutMessageReceiver 鐢ㄤ簬 In-Out 鎿嶄綔銆傚鏋滄病鏈夋寚瀹?messageReceiver錛屽垯 Axis2 灝嗗皾璇曚嬌鐢?org.apache.axis2.receivers.RawXMLINOutMessageReceiver 浣滀負緙虹渷鐨?messageReceiver銆備笂榪?RAWXML 娑堟伅鎺ユ敹鍣ㄥ皢浼犲叆 SOAP 娑堟伅鐨?<Body> 鐨勫唴瀹逛綔涓?OMElement錛圤MElement 鏄?XML 鍏冪礌鐨?AXIOM 緙╁啓錛変紶閫掔粰鏈嶅姟瀹炵幇銆傛鎿嶄綔搴斾綔涓?OMElement 榪斿洖 SOAP 鍝嶅簲鐨?<Body> 鍏冪礌鍖呭惈鐨?XML 鍐呭銆傝繖渚胯В閲婁簡涓轟綍 subscribe() 鍜?getQuote() 鎿嶄綔閲囩敤鍜岃繑鍥?OMElement銆?/p>

services.xml 榪樺彲浠ュ寘鍚垎涓?servicegroup 鐨勫涓湇鍔°?/p>

鎵撳寘

Axis 2 鏈嶅姟鏄綔涓?Axis Archive (.aar) 鎵撳寘鐨勩傝繖鏄竴涓?JAR 鏂囦歡錛堜嬌鐢?jar 鎴?zip 瀹炵敤紼嬪簭鍒涘緩錛夛紝鍦ㄥ瓨妗g殑 META-INF 鐩綍涓墦鍖呬簡 services.xml 鏂囦歡銆係tockQuoteService 鍦ㄦ墦鍖呮垚 StockQuoteService.aar 鏃跺皢鍏鋒湁浠ヤ笅緇撴瀯錛?

./stock/StockQuoteService.class
./META-INF/services.xml

棰勫厛鎵撳寘鐨?StockQuoteService 瀛樻。鍙互鍦ㄦ湰鏂囩殑涓嬭澆閮ㄥ垎涓壘鍒般?/p>

閮ㄧ講

鍦?Axis2 涓儴緗叉湇鍔$浉褰撶畝鍗曪紝鍙渶灝?.aar 鏂囦歡澶嶅埗鍒?servlet 瀹瑰櫒鐨?axis2 Web 搴旂敤紼嬪簭涓殑 axis2/WEB-INF/services 鐩綍涓嬪嵆鍙傚浜?Tomcat錛屾浣嶇疆涓?$TOMCAT_HOME/webapps/axis2/WEB-INF/services銆?

鍙︿竴縐嶉儴緗叉湇鍔$殑濂芥柟娉曟槸浣跨敤 Axis2 綆$悊鎺у埗鍙頒腑鐨?Upload Service 宸ュ叿銆傝杞埌 http://localhost:<port>/axis2錛岀劧鍚庨夋嫨 Administration 閾炬帴銆傝緭鍏ョ敤鎴峰悕鍜屽瘑鐮?admin/axis2錛岀劧鍚庣櫥褰曘傦紙鎮(zhèn)ㄥ彲浠ュ湪 axis2.xml 涓厤緗敤鎴峰悕/瀵嗙爜銆?鍦ㄥ伐鍏烽儴鍒嗛夋嫨 Upload Service 閾炬帴錛屽啀閫夋嫨 .aar 鏂囦歡錛岀劧鍚庡崟鍑?Upload銆傚氨鏄繖鏍風畝鍗曪紒濡傛灉涓婁紶鎴愬姛錛岀郴緇熷皢鏄劇ず涓鏉$豢鑹叉垚鍔熸秷鎭傛湇鍔″嵆琚儴緗詫紝鑰屼笖鍙殢鏃惰皟鐢ㄣ傚鏋滆鍦ㄨ繙紼?Axis2 鏈嶅姟鍣ㄤ笂閮ㄧ講鏈嶅姟錛屽垯姝ゅ姛鑳介潪甯告柟渚褲?/p>



鍥為〉棣?/font>


閫氳繃 Axis2 浣跨敤 Web 鏈嶅姟

Web 鏈嶅姟璋冪敤鐨勭壒鎬х敱 MEP銆佷紶杈撳崗璁互鍙婂鎴風 API 鐨勫悓姝ュ拰/鎴栧紓姝ヨ涓哄喅瀹氥侫xis2 褰撳墠鏀寔 WSDL 2.0 瀹氫箟鐨?In-Only 鍜?In-Out MEP銆侫xis2 瀹㈡埛绔?API 鏀寔鏈嶅姟鐨勫悓姝ュ拰寮傛璋冪敤銆傚湪璋冪敤 In-Out 鎿嶄綔鏃訛紝鍦?API 綰у埆鍜屼紶杈撶駭鍒彁渚涘紓姝ヨ涓恒侫PI 綰у埆寮傛鏄氳繃鍥炴粴鑾峰緱鐨勶紝瀹冧嬌鐢ㄤ竴涓紶杈撹繛鎺ユ潵鍚屾椂浼犺緭璇鋒眰鍜屽搷搴旓紙渚嬪錛岄氳繃涓涓?HTTP 榪炴帴浼犺緭璇鋒眰鍜屽搷搴旓級銆傚湪浼犺緭綰у埆寮傛涓紝浣跨敤涓嶅悓鐨勪紶杈撹繛鎺ュ垎鍒彂閫佽姹傚拰鎺ユ敹鍝嶅簲錛屼緥濡備嬌鐢?SMTP 榪涜浼犺緭鏃跺嵆濡傛銆?/p>

涓嬮潰鏄嬌鐢?Axis2 瀹㈡埛绔?API 璋冪敤 In-Only 鍜?In-Out 鎿嶄綔鐨勮緇嗕俊鎭?/p>

璋冪敤 In-Only 鎿嶄綔

org.apache.axis2.clientapi.MessageSender 綾葷敤浜庤皟鐢?In-Only 鎿嶄綔錛堝涓嬮潰鐨?a >娓呭崟 3 鎵紺猴級錛岃?In-Only 鎿嶄綔璋冪敤 StockQuoteService 鐨?subscribe() 鎿嶄綔銆?/p>
娓呭崟 3. 璋冪敤 In-Only 鎿嶄綔
				
try{
  EndpointReference targetEPR = new EndpointReference(
      "http://localhost:8080/axis2/services/StockQuoteService");
          
  // Make the request message
  OMFactory fac = OMAbstractFactory.getOMFactory();
  OMNamespace omNs = fac.createOMNamespace(
      "http://www.developerworks.com/example", "example");
  OMElement payload = fac.createOMElement("subscribe", omNs);
  payload.setText("IBM"); 
          
  // Send the request
  MessageSender msgSender = new MessageSender();
  msgSender.setTo(targetEPR);
  msgSender.setSenderTransport(Constants.TRANSPORT_HTTP);
  msgSender.send("subscribe", payload);         
  }catch (AxisFault axisFault) {
      axisFault.printStackTrace();
  }

MessageSender.send() 鍙戦佽姹傛秷鎭茍灝嗗叾绔嬪嵆榪斿洖銆傝浣跨敤鐨勪紶杈撶敱 MessageSender.setSenderTransport() 鎸囧畾銆傛紺轟緥閫氳繃 HTTP 鍙戦佹秷鎭?/p>

璋冪敤 In-Out 鎿嶄綔

浣跨敤 org.apache.axis2.clientapi.Call 綾誨彲浠ユ柟渚垮湴璋冪敤 In-Out 鎿嶄綔銆傝皟鐢?In-Out 鎿嶄綔鏃訛紝姝?Call 綾繪敮鎸佷笅鍒?4 縐嶆ā寮忥細

  1. 闃誨鍗曚紶杈撴ā寮?/b>錛氳繖鏄皟鐢?In-Out Web 鏈嶅姟鎿嶄綔鏈綆鍗曠殑鏂瑰紡銆傚湪鎿嶄綔瀹屾垚鍜屾帴鏀跺埌鍝嶅簲鎴栭敊璇箣鍓嶏紝鏈嶅姟璋冪敤琚樆濉炪傚畠浣跨敤涓涓紶杈撹繛鎺ュ悓鏃跺彂閫佸拰鎺ユ敹鍝嶅簲錛屽涓嬮潰鐨?a >娓呭崟 4 鎵紺恒?/p>

    娓呭崟 4. 闃誨鍗曚紶杈撴ā寮?/b>
    						
    try {
                     
      EndpointReference targetEPR = new EndpointReference(
          "http://localhost:8080/axis2/services/StockQuoteService");
                   
      // Create request message
      OMFactory fac = OMAbstractFactory.getOMFactory();
      OMNamespace omNs = fac.createOMNamespace(
          "http://www.developerworks.com/example", "example");
        OMElement payload = fac.createOMElement("getQuote",omNs);
      payload.setText("IBM");
    
      // Create the call
      Call call = new Call();
      call.setTo(targetEPR);
    			
      call.setTransportInfo(Constants.TRANSPORT_HTTP,
        Constants.TRANSPORT_HTTP, false);
      // Invoke blocking
      OMElement result = call.invokeBlocking("getQuote", payload);
                   
      System.out.println("Quote ="+result.getText());
    }catch (AxisFault axisFault) {
        axisFault.printStackTrace();
    }
    

    浠g爜鐨勭涓閮ㄥ垎浣跨敤 AXIOM 鍒涘緩璇鋒眰娑堟伅銆?code>Call.setTransportInfo() 璁劇疆鐢ㄤ簬鍙戦佽姹傚拰鑾峰緱鍝嶅簲鐨勪紶杈撱?code>Call.setTransportInfo() 鎿嶄綔鐨?Boolean 鍙傛暟鎸囧嚭鏄惁瑕佷嬌鐢ㄤ笉鍚岀殑浼犺緭榪炴帴鏉ュ垎鍒彂閫佽姹傚拰鎺ユ敹鍝嶅簲銆傚湪鏈緥涓紝瑕佹眰鐢ㄤ竴涓?HTTP 榪炴帴鍙戦佽姹傚拰鎺ユ敹鍝嶅簲銆?/p>

  2. 闈為樆濉炲崟浼犺緭妯″紡錛氬湪姝よ皟鐢ㄦā寮忎腑錛屽彧浣跨敤涓嬮潰鐨勪竴涓紶杈撹繛鎺ヨ幏寰楅潪闃誨璋冪敤銆傚鏋滃湪涓涓鎴風搴旂敤紼嬪簭涓瀹屾垚澶氫釜 Web 鏈嶅姟璋冪敤錛岃屼笖涓嶅笇鏈涙瘡嬈¤皟鐢ㄩ兘闃誨瀹㈡埛绔紝鍒欓渶瑕佹綾昏涓恒傛鏃訛紝濡傛灉鍝嶅簲鍙敤錛屽垯璋冪敤绔嬪嵆榪斿洖涓斿鎴風寰椾互鍥炴粴錛屽涓嬮潰鐨?a >娓呭崟 5 鎵紺恒?/p>

    娓呭崟 5. 闈為樆濉炲崟浼犺緭妯″紡
    						
    try {
      EndpointReference targetEPR = new EndpointReference(
          "http://localhost:8080/axis2/services/StockQuoteService");
                
      //Create the request
      OMFactory fac = OMAbstractFactory.getOMFactory();
      OMNamespace omNs = fac.createOMNamespace(
          "http://www.developerworks.com/example", "example");
      OMElement payload = fac.createOMElement("getQuote", omNs);
      payload.setText("IBM");
          
                
        // Create the call
        Call call = new Call();
        call.setTo(targetEPR);
                
        // Set the transport info.
        call.setTransportInfo(org.apache.axis2.Constants.TRANSPORT_HTTP,
          org.apache.axis2.Constants.TRANSPORT_HTTP, false);
                
      // Callback to handle the response
                
        Callback callback = new Callback() {
          
          public void onComplete(AsyncResult result) {
            System.out.println("Quote = "
              + result.getResponseEnvelope().getBody().getFirstElement()
                .getText());
          }
          
          public void reportError(Exception e) {
            e.printStackTrace();
          }
        };
                
                
      // Invoke non blocking
                
        call.invokeNonBlocking("getQuote", payload, callback);            
                
      //Wait till the callback receives the response.
                
        while (!callback.isComplete()) {
          Thread.sleep(1000);
        }
                
                
      call.close();
    } catch (AxisFault axisFault) {
      axisFault.printStackTrace();
    } catch (Exception ex) {
      ex.printStackTrace();
    }
    

    Call.invokeNonBlocking() 鏂規(guī)硶绔嬪嵆榪斿洖鑰屼笉闃誨銆?code>Call.invokeNonBlocking() 閲囩敤 org.apache.axis2.clientapi.CallBack 鐨勫璞★紝濡傛灉鍝嶅簲鏉ヨ嚜鏈嶅姟錛屽垯灝嗚Е鍙戞瀵硅薄銆?code>CallBack 鏈変袱涓娊璞℃柟娉?onComplete(AsynchResult) 鍜?reportError(Exception)錛岄渶瑕佺敱鍏蜂綋鐨?CallBack 綾誨疄鐜拌繖浜涙柟娉曘傚湪鏈嶅姟璋冪敤姝e父瀹屾垚鍚庯紝Axis2 寮曟搸璋冪敤 onComplete() 鏂規(guī)硶銆傚湪浠庢湇鍔″櫒鑾峰緱閿欒娑堟伅鍚庯紝璋冪敤 Callback 鐨?reportError() 鏂規(guī)硶銆?code>Callback.isComplete() 灝嗘寚鍑烘搷浣滆皟鐢ㄦ槸鍚﹀畬鎴愩?/p>

    鍥犱負涓婇潰涓や釜鏂規(guī)硶浣跨敤涓涓紶杈撹繛鎺ユ潵鍙戦佸拰鎺ユ敹娑堟伅錛屾墍浠ヨ繖浜涙柟娉曚笉閫傚悎闀挎椂闂磋繍琛岀殑浜嬪姟銆傚師鍥犳槸鍦ㄥ搷搴斿彲鐢ㄤ箣鍓嶏紝浼犺緭榪炴帴鍙兘浼氳秴鏃躲傝瑙e喅姝ら棶棰橈紝鍙嬌鐢ㄤ袱涓笉鍚岀殑榪炴帴鏉ュ垎鍒彂閫佽姹傚拰鎺ユ敹鍝嶅簲銆備絾鍥犱負浣跨敤浜嗗叾浠栦紶杈撹繛鎺ユ潵鑾峰緱鍝嶅簲錛屽洜姝ら渶瑕佸皢璇鋒眰鍜屽搷搴斿叧鑱旇搗鏉ャ侫xis2 鏀寔 WS-Addressing錛屽悗鑰呴氳繃浣跨敤 <wsa:MessageID> 鍜?<wsa:RelatesTo> Header 鍙В鍐蟲闂銆傚洜姝わ紝濡傛灉浣跨敤涓や釜浼犺緭錛屽垯鏀寔瀵規(guī)ā鍧楀鍧錛屽涓嬮潰涓や釜妯″紡鎵紺恒?/p>

  3. 闃誨鍙屼紶杈撴ā寮?/b>錛氭妯″紡鍦ㄤ互涓嬫儏鍐典笅闈炲父鏈夌敤錛氭湇鍔℃搷浣滃湪鏈川涓婃槸 In-Out錛屼絾浣跨敤鐨勪紶杈撴槸鍗曞悜鐨勶紙濡?SMTP錛夋垨鏈嶅姟鎵ц闇瑕佸緢闀挎椂闂翠笖 HTTP 榪炴帴瓚呮椂銆傝鍙傝涓嬮潰鐨?a >娓呭崟 6銆?/p>

    娓呭崟 6. 闃誨鍙屼紶杈撴ā寮?/b>
    						
    try{
      EndpointReference targetEPR = new EndpointReference(
          "http://localhost:8080/axis2/services/StockQuoteService");
                    
      OMFactory fac = OMAbstractFactory.getOMFactory();
      OMNamespace omNs = fac.createOMNamespace(
          "http://www.developerworks.com/example", "example");
      OMElement payload = fac.createOMElement("getQuote",omNs);
      payload.setText("IBM");
            
      Call call = new Call();
        call.setTo(targetEPR);
    
        call.setTransportInfo(
          Constants.TRANSPORT_HTTP, Constants.TRANSPORT_HTTP, true);
    
        //Blocking Invocation
        OMElement result = call.invokeBlocking("getQuote", payload);
      System.out.println("Quote = "+result.getText());
    	
    }catch (AxisFault axisFault) {
        axisFault.printStackTrace();
    }catch (Exception ex) {
        ex.printStackTrace();
    }
    

  4. 闈為樆濉炲弻浼犺緭妯″紡錛氬氨 API 綰у埆鍜屼紶杈撶駭鍒殑闈為樆濉炶岃█錛屾妯″紡鎻愪緵浜嗘渶澶х殑鐏墊椿鎬э紝濡備笅闈㈢殑娓呭崟 7 鎵紺恒?/p>

    娓呭崟 7. 闈為樆濉炲弻浼犺緭妯″紡
    						
    try {
           
      EndpointReference targetEPR = new EndpointReference(
          "http://localhost:8080/axis2/services/StockQuoteService");
      OMFactory fac = OMAbstractFactory.getOMFactory();
      OMNamespace omNs = fac.createOMNamespace(
          "http://www.developerworks.com/example", "example");
      OMElement payload = fac.createOMElement("getQuote",omNs);
      payload.setText("IBM");
            
               
        Call call = new Call();
        call.setTo(targetEPR);
    
        call.setTransportInfo(
          Constants.TRANSPORT_HTTP, Constants.TRANSPORT_HTTP, true);
      // Callback to handle the response
               
        Callback callback = new Callback() {
        public void onComplete(AsyncResult result) {
          System.out.println("Quote = "
              + result.getResponseEnvelope().getBody().getFirstElement()
            .getText());
          }
    
        public void reportError(Exception e) {
            e.printStackTrace();
          }
        };
                
    
      // Non-Blocking Invocation
              
        call.invokeNonBlocking("getQuote", payload, callback);
      // Wait till the callback receives the response.
              
        while (!callback.isComplete()) {
          Thread.sleep(1000);
        }
        call.close();          
    }catch (AxisFault axisFault) {
          axisFault.printStackTrace();
    }catch (Exception ex) {
          ex.printStackTrace();
    }
    





鍥為〉棣?/font>


鎬葷粨

鍦ㄨ繖涓鐢變袱閮ㄥ垎緇勬垚鐨勭郴鍒楃殑絎?1 閮ㄥ垎涓紝鎮(zhèn)ㄤ簡瑙d簡 Axis2 浣撶郴緇撴瀯浠ュ強濡備綍浣跨敤涓嶅悓鐨勮皟鐢ㄦā寮忔潵閮ㄧ講鍜屼嬌鐢ㄤ竴涓畝鍗曠殑 Web 鏈嶅姟銆傚湪鏈郴鍒楃殑絎?2 閮ㄥ垎涓紝鎮(zhèn)ㄥ皢璇︾粏浜嗚В璇ヤ綋緋葷粨鏋勶紝浠ュ強濡備綍閫氳繃娣誨姞澶勭悊紼嬪簭鍜?Axis2 娑堟伅鎺ユ敹鍣ㄦ潵鑷畾涔?Axis2銆傛?zhèn)q樺皢浜嗚В濡備綍浣跨敤 Axis2 鎻愪緵鐨?XMLBeans 鏁版嵁緇戝畾鏀寔銆?/p>


]]>
主站蜘蛛池模板: 亚洲一区二区三区乱码在线欧洲| 成人久久久观看免费毛片| 国产又黄又爽又猛的免费视频播放| 牛牛在线精品免费视频观看| 亚洲精品狼友在线播放| 99精品国产免费久久久久久下载| 国产亚洲精品精品精品| 久久精品亚洲综合| 热久久精品免费视频| 国产成人无码区免费内射一片色欲| 中中文字幕亚洲无线码| 亚洲色成人中文字幕网站| 毛片a级三毛片免费播放| 西西人体免费视频| 亚洲αⅴ无码乱码在线观看性色| 亚洲午夜福利717| 日韩在线免费看网站| 一级成人a毛片免费播放| 无套内射无矿码免费看黄| 亚洲制服丝袜在线播放| 国产亚洲精久久久久久无码77777| 美女视频黄a视频全免费| 最近更新免费中文字幕大全 | 亚洲欧美日韩国产成人| 亚洲不卡av不卡一区二区| 永久久久免费浮力影院| 亚洲一区免费在线观看| 国产一二三四区乱码免费| 无码一区二区三区亚洲人妻| 亚洲欧洲日产国码www| 亚洲精品蜜桃久久久久久| 婷婷亚洲天堂影院| 午夜dj在线观看免费视频| 中文字幕在线免费| 免费日本一区二区| 精品一区二区三区免费视频| 国产91成人精品亚洲精品| 亚洲欧洲免费无码| 亚洲国产精品综合久久20| 亚洲精品动漫在线| 亚洲欧洲在线观看|