MyEclipse Blue Edition 6.1下安裝CXF的插件STP。
MyEclipse Blue Edition 6.1中使用的Eclipse Platform為3.3.2。因此本人下載了多個(gè)Eclipse 3.3.2版本的STP插件進(jìn)行測試。最后發(fā)現STP R200710161054版可以和MyEclipse Blue Edition 6.1版完美集成。
此處可以下載STP R200710161054 all in one版。
具體安裝其實(shí)超簡(jiǎn)單,將下載的ZIP包解壓到MyEclipse安裝目錄下的myeclipse目錄中。此處需要特別小心,注意:eclipse,feature和plugins目錄可以覆蓋;但是feature和plugins中的同名目錄不能覆蓋。
此外,由于STP插件中的文件的目錄和文件名比較長(cháng),解壓后可能會(huì )發(fā)生超過(guò)系統目錄文件長(cháng)度的錯誤。解決方法是將MyEclipse安裝到磁盤(pán)根目錄下的一個(gè)短名稱(chēng)的目錄中,比如C:\Blue等。
下面介紹如何利用STP快速開(kāi)發(fā)一個(gè)簡(jiǎn)單的WebService。
本文中使用的CXF為apache-cxf-2.0.5-incubator。
一、對STP插件進(jìn)行設置:
啟動(dòng)MyEclipse Blue Edition 6.1。選擇菜單Window->Preferences,在對話(huà)框左側的SOA Tools分支下,可以進(jìn)行STP插件的設置。
1. 添加CXF Runtime
選中分支中的Installed Runtimes,點(diǎn)擊Add;
選擇Apache CXF 2.0,然后Next;
瀏覽至apache-cxf-2.0.5-incubator的解壓目錄,點(diǎn)擊Finish。注意此處的JRE是插件運行的JRE,最好選擇Sun的JRE1.5(我選IBM JRE的時(shí)候插件出錯)。
2. 其他設置
選中JAX-WS,選擇使用向導;
設定生成WSDL文件的Soap協(xié)議版本;
點(diǎn)擊OK,完成插件的設置。
二、開(kāi)發(fā)WebService
使用CXF開(kāi)發(fā)WebService有兩種模式:從Java接口開(kāi)始;從WSDL文件開(kāi)始。
這里介紹從Java接口開(kāi)始開(kāi)發(fā)(從WSDL文件開(kāi)始開(kāi)發(fā)的方法,看完本文自然可以領(lǐng)悟了。)
1. 新建項目
選擇菜單File->New->Project...,選擇SOA Tools下的JAX-WS Java First Project;
輸入項目名稱(chēng),JavaFirst;
選擇Runtime;
點(diǎn)擊Finish即可建立項目。
新建的項目最好手動(dòng)建一個(gè)lib目錄,然后將所有的cxf庫文件都拷貝進(jìn)來(lái),然后刪除項目build path中由向導添加的庫,自己手動(dòng)將lib中的庫添加進(jìn)項目的build path中。此外,JRE最好也換一下。
2. 創(chuàng )建包
選擇菜單File->New->Package,創(chuàng )建一個(gè)叫com.javafirst.pk的包。
3. 創(chuàng )建接口
在剛剛創(chuàng )建的包下面,通過(guò)File->New->Interface,創(chuàng )建一個(gè)叫Hello的接口。
接口中代碼如下:
public interface Hello ...{
public String echo(String msg);
} 4. 添加WebService annotation
在Package Explorer中,選中剛剛定義的接口,通過(guò)菜單SOA->JAX-WS->Create Web Service來(lái)添加;
或者右鍵點(diǎn)擊接口,在右鍵菜單中的JAX-WS Tools->Create Web Service來(lái)添加。
保留向導的缺省參數,生成WebService Annotaion。
添加annotation后的代碼如下:
此時(shí),需要對wsdl文件進(jìn)行編輯。需要修改的地方有3處:
a. 為了便于發(fā)布以及便于編程人員理解,下面代碼中的arg0可以修改為接口中定義的msg;注意,一旦修改,則不能通過(guò)后面生成的Client來(lái)測試了 。
<xs:complexType name="echo">
<xs:sequence>
<xs:element minOccurs="0" name="arg0" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="echo">
<xs:sequence>
<xs:element minOccurs="0" name="msg" type="xs:string" />
</xs:sequence>
</xs:complexType>
b. 為了兼容.net需要將parameters等替換。
<wsdl:message name="echoResponse">
<wsdl:part name="parameters" element="tns:echoResponse">
</wsdl:part>
</wsdl:message>
<wsdl:message name="echo">
<wsdl:part name="parameters" element="tns:echo"></wsdl:part>
</wsdl:message>
<wsdl:message name="echoResponse">
<wsdl:part name="echoOutput" element="tns:echoResponse">
</wsdl:part>
</wsdl:message>
<wsdl:message name="echo">
<wsdl:part name="echoInput" element="tns:echo"></wsdl:part>
</wsdl:message>c. wsdl發(fā)布的端口
修改格式為 http://<服務(wù)器URL>:<服務(wù)器端口>/<項目名>
<wsdl:service name="HelloService">
<wsdl:port name="HelloPort" binding="tns:HelloServiceSoapBinding">
<soap12:address location="
http://localhost:9090/hello" />
</wsdl:port>
</wsdl:service>
<wsdl:service name="HelloService">
<wsdl:port name="HelloPort" binding="tns:HelloServiceSoapBinding">
<soap12:address location="
http://localhost:8088/JavaFirst" />
</wsdl:port>
</wsdl:service> 6. 刪除所有的垃圾src。
7. 右鍵點(diǎn)擊wsdl文件,通過(guò)JAX-WS Tools->Generate Code生成新的接口和實(shí)現代碼。
其中的Client和Server是用于脫離容器測試WebService的,一般都選上。
最后生成的文件列表如圖所示:
8. 編輯HelloImpl.java文件
簡(jiǎn)單的返回輸入值:
public class HelloImpl implements Hello ...{
private static final Logger LOG = Logger.getLogger(HelloImpl.class.getName());
/**//* (non-Javadoc)
* @see com.javafirst.pk.Hello#echo(java.lang.String msg )*
*/
public java.lang.String echo(java.lang.String msg) ...{
LOG.info("Executing operation echo");
System.out.println(msg);
try ...{
java.lang.String _return = msg;
return _return;
} catch (Exception ex) ...{
ex.printStackTrace();
throw new RuntimeException(ex);
}
}
} 9. 發(fā)布
右鍵點(diǎn)擊wsdl文件,選擇菜單Build Package...即可生成war包。
注意此war包中沒(méi)有包含任何的庫文件,因此需要手動(dòng)打包(比如用winrar之類(lèi)),將lib目錄添加到war包中的WEB-INF目錄下。
將此war包發(fā)布到應用服務(wù)器,即可。
這里所謂context root在WAS中就是發(fā)布WAR包時(shí)的上下文根,在tomcat中默認就是項目名。
因此,可以將wsdl文件中的地址和端口做相應的改動(dòng),注意修改了此處,如果用生成的Client來(lái)測試的話(huà),Client中的相應地址也要改為和此處一致。
<wsdl:service name="HelloService">
<wsdl:port name="HelloPort" binding="tns:HelloServiceSoapBinding">
<soap12:address location="
http://localhost:8088/Hello/services/Hello" />
</wsdl:port>
</wsdl:service>然后再重新打包,發(fā)布一次。
至此,一個(gè)簡(jiǎn)單的WebSerive已經(jīng)發(fā)布成功。
發(fā)表于 @ 2008年04月22日
(#)