国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

使用NetBeans 5.0和GlassFish建立JAX-WS 2.0服務(wù)

2019-11-18 16:12:33
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

這篇文章說(shuō)明使用NetBeans5.0和GlassFish應(yīng)用服務(wù)器如何創(chuàng)建JAX-WS2.0服務(wù)。使用NetBeans和GlassFish的內(nèi)置特征,你可以創(chuàng)建一個(gè)web services工程,它通過(guò)一個(gè)命令進(jìn)行編譯和測(cè)試。


第一部分描述如何設(shè)置NetBeans IDE和創(chuàng)建一個(gè)GlassFish庫(kù)。第二部分包含了關(guān)于創(chuàng)建一個(gè)web service工程以及用到的示例代碼的信息。最后一部分描述了利用這個(gè)工程創(chuàng)建你自己的web service的技巧,也作為從WSDL開(kāi)始創(chuàng)建一個(gè)服務(wù)的指導(dǎo)。注意,JAX-WS2.0應(yīng)用程序需要J2SE5.0。最新的JDK可以從http://java.sun.com下載。
注意:為了使用JAS-WS2.0工作空間創(chuàng)建web service,而不是使用GlassFish,要了解本文所代替的這個(gè)版本。
目錄
1、 設(shè)置NetBeans和GlassFish
2、 建立一個(gè)工程
 從Java創(chuàng)建一個(gè)服務(wù)
 創(chuàng)建一個(gè)客戶端
 使用NetBeans Web Services Registry
 調(diào)試應(yīng)用程序
3、 技巧
 編寫(xiě)你自己的服務(wù)
 從WSDL創(chuàng)建一個(gè)服務(wù)
設(shè)置NetBeans和GlassFish
這篇文章使用NetBeans5.0 Beta2編寫(xiě),更多關(guān)于NetBeans,包括這個(gè)應(yīng)用程序的信息可以從NetBeans.org網(wǎng)站獲得。如果你對(duì)這個(gè)集成開(kāi)發(fā)環(huán)境還很陌生,站點(diǎn)上的向?qū)Ш椭改夏軒湍憬h(huán)境并運(yùn)行起來(lái)。
為了獲得GlassFish應(yīng)用服務(wù)器,訪問(wèn)GlassFish網(wǎng)站并點(diǎn)擊Download Now按鈕。按照說(shuō)明書(shū)安裝一個(gè)GlassFish二進(jìn)制包,使用build b28或者更新的版本。這篇文章在提及安裝文件夾時(shí)將簡(jiǎn)化為“glassfish”文件夾。注意:由于在JAX-WS 中ant target的變化,文章中的例子只能在GlassFish build b28日期為11月23日或者更新的版本上運(yùn)行。為了使用早期的版本,你必須改變wsimport及(或)wsgen target的屬性。更多細(xì)節(jié)請(qǐng)參照J(rèn)AX-WS或者GlassFish文檔。
在NetBeans和GlassFish安裝后,使用這些步驟將服務(wù)器增加到NetBeans中,然后創(chuàng)建要被工程用到的GlassFish庫(kù)。在NetBeans中,點(diǎn)擊菜單欄中的Tools,選擇Server Manager。點(diǎn)擊Add Server,從Server菜單中選擇Sun Java System application Server,然后為這個(gè)服務(wù)器輸入一個(gè)名字,例如“GlassFish”,點(diǎn)擊Next。在下一個(gè)屏幕上輸入你的“glassfish”文件夾的路徑,然后點(diǎn)擊Next,接受注冊(cè)器的默認(rèn)域,點(diǎn)擊“Next”。在最后一屏上,輸入管理密碼,點(diǎn)擊“Finish”。隨包的默認(rèn)密碼在GlassFish快速入門(mén)頁(yè)面上給了出來(lái)。點(diǎn)擊Close退出Server Manager。注意:當(dāng)前在Runtime選項(xiàng)卡中Server節(jié)點(diǎn)下有兩個(gè)可用的服務(wù)器。
為了創(chuàng)建工程中將要用到的庫(kù),點(diǎn)擊菜單欄中的Tools,然后選擇Library Manager。點(diǎn)擊New Library,輸入一個(gè)庫(kù)名字,例如“GlassFish”。按OK,由于“ClassPath”選項(xiàng)卡仍舊打開(kāi)著,點(diǎn)擊Add JAR/Folder,瀏覽你的glassfish/lib文件夾,選擇所有的jar文件(按下shift鍵同時(shí),點(diǎn)擊所選文件)。點(diǎn)擊Add JAR/Folder,然后點(diǎn)擊OK。這個(gè)庫(kù)在創(chuàng)建服務(wù)時(shí)并不是必須的,因?yàn)樵谶\(yùn)行時(shí)GlassFish的一些jar文件已經(jīng)包含在NetBeans的ClassPath中了。這個(gè)庫(kù)在稍后運(yùn)行測(cè)試客戶端時(shí)將要用到。
建立一個(gè)應(yīng)用程序
從Java創(chuàng)建一個(gè)服務(wù)
使用GlassFish創(chuàng)建一個(gè)web service的步驟比只使用JAX-WS代碼和包含在NetBeans之中的Tomcat服務(wù)器要簡(jiǎn)單得多。不像那些這篇文章的這個(gè)版本中略述的步驟,在創(chuàng)建war文件前,你不需要使用wsgen創(chuàng)建服務(wù)器文件。你只需要?jiǎng)?chuàng)建服務(wù)端類(lèi),修改默認(rèn)的web.xml文件,然后就可以進(jìn)行發(fā)布了。
下面由創(chuàng)建一個(gè)新的web應(yīng)用工程開(kāi)始。在NetBeans中,選擇菜單欄中的File,接著選擇 New PRoject,在“Categories”下選擇Web,在“Project”下選擇Web Application,點(diǎn)擊Next。在“Project Name”一欄中輸入“SampleApp”,并且選擇保存工程的位置。確保“Server”設(shè)置成了你的GlassFish應(yīng)用服務(wù)器,并且去掉對(duì)“Set Source Level to 1.4”的選擇(JAX-WS2.0需要JDK5),點(diǎn)擊Finish。現(xiàn)在這個(gè)工程已經(jīng)創(chuàng)建了,如果愿意,你也許要?jiǎng)h除“index.jsp”。這個(gè)工程將會(huì)用到你服務(wù)端類(lèi)作為Servlet類(lèi),并且GlassFish在發(fā)布時(shí)會(huì)將這個(gè)類(lèi)轉(zhuǎn)化為一個(gè)web service。
添加GlassFish庫(kù)到新的工程中。在Project選項(xiàng)卡中,右鍵點(diǎn)擊“Libraries”,選擇Add Library。選擇“GlassFish”庫(kù),然后點(diǎn)擊Add Library。現(xiàn)在你應(yīng)該告訴NetBeans,在產(chǎn)生的war文件中不包括GlassFish的jar文件(因?yàn)樗鼈円呀?jīng)包含在了服務(wù)器中)。右鍵點(diǎn)擊SampleApp工程,選擇Properties。點(diǎn)擊左面的Library節(jié)點(diǎn),去掉“Compile-time Libraries”表格中緊挨著GlassFish選項(xiàng)的選擇。作為一個(gè)可選(不過(guò)是有幫助的)步驟,點(diǎn)擊Run節(jié)點(diǎn),在“Relative URL”中輸入“/hello?wsdl”。當(dāng)程序運(yùn)行時(shí),它將會(huì)為這個(gè)web service的wsdl文件打開(kāi)一個(gè)瀏覽器。點(diǎn)擊OK。
增加服務(wù)類(lèi)。右鍵點(diǎn)擊“Source Packages”,選擇New和Java Packages,輸入“my.sample.server”,點(diǎn)擊Finish。為了向這個(gè)包中增加一個(gè)類(lèi),在這個(gè)包節(jié)點(diǎn)上右鍵點(diǎn)擊,選擇New和Java Class。因?yàn)槭纠?lèi)已經(jīng)寫(xiě)好,你可以將ServiceImpl.java保存到SampleApp/src/java/sample/server/文件夾下,NetBeans會(huì)找到它。如果你想要查看文件的內(nèi)容,只需雙擊包節(jié)點(diǎn)下的這個(gè)文件的名字。你可以看到它是一個(gè)包含一個(gè)方法的簡(jiǎn)單Java類(lèi),還有一些在JAX-WS2.0運(yùn)行時(shí)要用到的注釋。
保存配置文件web.xml文件到SampleApp/web/WEB-INF/文件夾下。它將覆蓋默認(rèn)的那個(gè),它指定ServiceImpl類(lèi)作為servlet,以及servlet的名字,這個(gè)servlet的名字基于JAX-WS服務(wù)名+端口號(hào)。應(yīng)用服務(wù)器將用到這個(gè)信息運(yùn)行wsgen作為創(chuàng)建web service的必要條件。
為了創(chuàng)建和啟動(dòng)服務(wù),從菜單欄中選擇Run和Run Main Project,或者使用快捷鍵F6。NetBeans將會(huì)編譯服務(wù)類(lèi)、創(chuàng)建war文件、啟動(dòng)應(yīng)用服務(wù)器和發(fā)布應(yīng)用程序。如果NetBeans安裝時(shí)都進(jìn)行了適當(dāng)?shù)脑O(shè)置,一個(gè)瀏覽器將會(huì)被打開(kāi),顯示web service的wsdl文件。如果你愿意你可以改變服務(wù)類(lèi),可以看到反射的wsdl發(fā)生的變化,只需要按下F6重新編譯和發(fā)布服務(wù)。
創(chuàng)建一個(gè)客戶端
對(duì)于一個(gè)包含web應(yīng)用的完整應(yīng)用程序,你將要為這個(gè)應(yīng)用程序正常地創(chuàng)建一個(gè)新的工程。為了簡(jiǎn)單地創(chuàng)建一個(gè)客戶端來(lái)測(cè)試我們新的web service,你可以使用NetBeans的單元測(cè)試功能。
由創(chuàng)建一個(gè)新的測(cè)試包入手。右鍵點(diǎn)擊Projects選項(xiàng)卡中“Test Packages”,選擇New和Java Packages。輸入“my.sample.test”,點(diǎn)擊Finish。一般來(lái)說(shuō),你可以通過(guò)右鍵點(diǎn)擊這個(gè)測(cè)試包和選擇New和Empty Test增加測(cè)試。對(duì)于本例,你可以保存ServiceTest.java到SampleApp/test/my/sample/test/文件夾下。打開(kāi)這個(gè)文件查看測(cè)試時(shí)如何創(chuàng)建一個(gè)服務(wù),然后是服務(wù)的代理器,對(duì)它調(diào)用hello(String)。注意:當(dāng)你增加自己的客戶端代碼作為一個(gè)JUnit測(cè)試時(shí),NetBeans希望名字的形式為“*Test.java”。
運(yùn)行之前,增加這段xml到工程的build.xml文件中。為了編輯這個(gè)文件,你可以使用菜單欄中的File-〉Open File,或者打開(kāi)Files選項(xiàng)卡而不是Projects,展開(kāi)“SampleApp”節(jié)點(diǎn),接著雙擊build.xml。NetBeans在編譯和運(yùn)行測(cè)試客戶端之前就會(huì)調(diào)用這個(gè)target。當(dāng)這個(gè)target運(yùn)行時(shí),它確保這個(gè)服務(wù)已經(jīng)建立并且發(fā)布(如果需要重新編譯)。關(guān)于wsimport工具的更多信息參見(jiàn)JAX-WS文檔。
<!-- Overrides build-impl.xml target to start server and
generate client artifacts before building test. -->
<target name="-pre-compile-test">
<taskdef name="wsimport" classname="com.sun.tools.ws.ant.WsImport">
<classpath path="${javac.classpath}"/>
</taskdef>


<!-- Use "debug" or "run" here. -->
<antcall target="run"/>

<echo>running wsimport</echo>
<wsimport
debug="true"
keep="true"
destdir="test"
package="my.sample.test.generated"
wsdl="http://localhost:8080/SampleApp/hello?wsdl"/>
</target>
為了運(yùn)行測(cè)試,從菜單欄中選擇Run和Test Project,或者使用快捷鍵ALT-F6。在輸出信息中,你應(yīng)該可以看到從這個(gè)服務(wù)返回的“hello world”。
使用NetBeans Web Services Registry
作為測(cè)試服務(wù)的一個(gè)預(yù)備的方法,你可以使用NetBeans的Web Services Registry。在Runtime選項(xiàng)卡中,右鍵點(diǎn)擊Web Services,然后選擇Add Web Service。在“URL”中輸入web service的地址,在這里是“http://localhost:8080/SampleApp/hello?wsdl”,點(diǎn)擊Get Web Service Description。這將會(huì)產(chǎn)生有關(guān)這個(gè)web service的描述。為了測(cè)試“hello”操作,點(diǎn)擊緊挨著操作名稱的TestOperation。然后輸入一個(gè)要發(fā)送的值,觀察返回值(在這個(gè)要點(diǎn)上,為返回字符串增加一些文本來(lái)改變服務(wù)的接口類(lèi)也許是非常有用的)。點(diǎn)擊Close退出測(cè)試,如果你想添加這個(gè)服務(wù)到注冊(cè)器中點(diǎn)擊Add。
調(diào)試應(yīng)用程序
單步遍歷應(yīng)用程序中的代碼(和JAX-WS代碼)非常簡(jiǎn)單。由在ServiceImpl.java(15行)中的System.out.println("Service received: " + s);行上放置斷點(diǎn)開(kāi)始。最快捷的方式就是打開(kāi)文件,在要放置斷點(diǎn)的行上點(diǎn)擊編輯器的左邊框。或者將鼠標(biāo)放在該行上,然后使用Ctrl-F8(關(guān)于使用調(diào)試器的全部信息參見(jiàn)NetBeans的用戶指南)。
在這一點(diǎn)上你可以在調(diào)試模式下使用Run—〉Debug Main Project啟動(dòng)服務(wù)器,除此之外你也可以一步運(yùn)行客戶端代碼。為了實(shí)現(xiàn)這個(gè)功能,改變工程中的build.xml文件中 “-pre-compile-test”target的“antcall”行,由<antcall target="run"/> 改為 <antcall target="debug"/>。
<!-- Use "debug" or "run" here. -->
<antcall target="debug"/>
現(xiàn)在再次運(yùn)行客戶端測(cè)試(例如按下Alt-F6)。在建立測(cè)試之前,NetBeans將會(huì)在調(diào)試模式下重啟GlassFish服務(wù)器。在客戶端啟動(dòng)后,調(diào)試器將會(huì)停止在ServiceImpl中適當(dāng)?shù)男猩希憧梢詥尾綀?zhí)行服務(wù)器代碼。注意:如果你在JAX-WS工作空間中的某一行上增加了斷點(diǎn),Alt-F6將不會(huì)運(yùn)行,直到你將焦點(diǎn)移回到SampleApp工程中的一個(gè)文件上,通過(guò)在編輯器中的產(chǎn)生一個(gè)文件,點(diǎn)擊Projects選項(xiàng)卡中工程等等完成。如果你對(duì)應(yīng)用程序做了修改,當(dāng)再一次運(yùn)行測(cè)試時(shí),所有東西都必須重新編譯。記住,為了停止測(cè)試會(huì)話,你可以通過(guò)選擇菜單欄中的Run和Finish Debugger session,或者通過(guò)點(diǎn)擊工具欄中的停止按鈕。
為了測(cè)試客戶端代碼,由在ServiceTest.java中test1()方法上放置斷點(diǎn)開(kāi)始。在Project視圖中的這個(gè)文件上右擊,選擇Debug File(或者將其作為編輯器中的活動(dòng)文件,對(duì)ServiceTest使用Ctrl-Alt-F5)。它會(huì)在調(diào)試器中啟動(dòng)客戶端以及服務(wù)。
技巧
編寫(xiě)你自己的服務(wù)
為了編寫(xiě)你自己的服務(wù),你可以從工程中移除“my.sample.server”包,然后增加一個(gè)新的,或者按照上面的步驟創(chuàng)建一個(gè)新的web工程。你仍舊需要配置文件web.xml到WEB-INF文件夾下,根據(jù)需要進(jìn)行修改。在web.xml中,你應(yīng)該只需要修改<servlet-name>和<servlet-class>元素(也可以修改<url-pattern>)。你可以使用這個(gè)build.xml文件,它有target來(lái)保存一個(gè)步驟。
為了幫助你正確得到兩個(gè)配置文件和build.xml的值,最簡(jiǎn)單的途徑是開(kāi)始嘗試編譯,讓編譯器或者運(yùn)行時(shí)錯(cuò)誤來(lái)告訴你應(yīng)該做什么(別忘了查看GlassFish的輸出)。對(duì)于新的工程和新的服務(wù)文件(例如NewService.java),通過(guò)Build—〉Clean和Build Main Project或者Shift-F11進(jìn)行完全地編譯,然后運(yùn)行這個(gè)工程。從這一點(diǎn)看需要修改的地方有:
1、 修改web.xml文件,使用新的servlet名字(如GlassFish日志所示)。
2、 修改web.xml中的<servlet-name>以匹配新的服務(wù)名加上“Port”。(對(duì)NewService.java而言,servlet名字就是FooPort)
其它步驟就是指明在客戶端代碼中要使用的服務(wù)名稱、端口名稱和端口方法。這個(gè)可以通過(guò)運(yùn)行測(cè)試完成(先將測(cè)試方法留空)。看看在build/test/classes下產(chǎn)生了哪些文件。為了指出wsimport工具的正確位置,改變build.xml文件中“-pre-compile”target的wsimport元素的wsdl屬性值。如果NetBeans在瀏覽器中產(chǎn)生了發(fā)布后的服務(wù),你可以剪切/復(fù)制這些信息。如果需要修改wsimport的“package”屬性。
從WSDL創(chuàng)建一個(gè)服務(wù)
為了從一個(gè)wsdl創(chuàng)建一個(gè)服務(wù),主要的步驟有:增加wsdl文件,增加一個(gè)基礎(chǔ)的服務(wù)接口類(lèi),在build.xml文件中增加一個(gè)“-pre-compile”target而不是“-pre-dist”。如果你不知道要為服務(wù)接口類(lèi)增加什么方法或者它應(yīng)該實(shí)現(xiàn)什么接口,可以開(kāi)始編譯工程,然后就可以從產(chǎn)生的代碼和編譯錯(cuò)誤中快速得到所需信息。這些步驟和上面產(chǎn)生客戶端代碼類(lèi)似。下面要用到的例子要勾畫(huà)出這些步驟的輪廓,而不是重復(fù)如由Java開(kāi)始的例子的所有細(xì)節(jié)。
1、 如前創(chuàng)建的一個(gè)新的web工程,如果你需要就移除index.jsp。增加GlassFish庫(kù)。
2、 在WEB-INF目錄下,添加一個(gè)叫做“wsdl”的新文件夾,添加hello.wsdl到這個(gè)目錄下。
3、 添加兩個(gè)文件web.xml和sun-jaxws.xml到WEB-INF文件夾下。注意:web.xml和從Java開(kāi)始創(chuàng)建工程一樣。sun-jaxws.xml文件中有一些新信息:定義了終端的wsdl文件服務(wù)和端口名稱,和wsdl文件在war文件中的位置。
4、 創(chuàng)建一個(gè)源文件包“formwsdl.sample.wsdl”,然后復(fù)制HelloImpl.java到這個(gè)包中。注意類(lèi)名要匹配sun-jaxws.xml文件中指定的名字。當(dāng)創(chuàng)建了你自己的服務(wù),你也許從一個(gè)空的類(lèi)開(kāi)始,然后增加基于工程編譯時(shí)產(chǎn)生的代碼的接口和方法。
5、 覆蓋build.xml文件的“-pre-compile”target。對(duì)于這個(gè)例子,你可以使用這個(gè)build.xml。注意服務(wù)包和wsdl信息已經(jīng)在這個(gè)簡(jiǎn)單的build.xml文件中指定了,但是客戶端測(cè)試信息并沒(méi)有。
6、 一旦編譯完成,如上運(yùn)行應(yīng)用程序。別忘了編輯工程屬性,增加url-pattern以至于可以在瀏覽器中查看服務(wù)。
-pre-compile的一般形式如下所示:
<target name="-pre-compile">
<taskdef name="wsimport" classname="com.sun.tools.ws.ant.WsImport">
<classpath path="${javac.classpath}"/>
</taskdef><echo>running wsimport</echo>


<-- The wsdl attribute is absolute path, so ${basedir} is included.
The package name below will be used for the generated
interface class that your impl class must implement. -->
<wsimport
debug="true"
keep="true"
destdir="src/java"
package="YOUR_PACKAGE"
wsdl="${basedir}/web/WEB-INF/wsdl/YOUR_FILE_NAME.wsdl"/>
</target>
增加一個(gè)客戶端利用服務(wù)進(jìn)行測(cè)試的步驟和上面一樣。無(wú)論是由wsdl產(chǎn)生的服務(wù)還是從Java類(lèi)中產(chǎn)生的服務(wù),客戶端都要從服務(wù)器上的wsdl文件產(chǎn)生。

(出處:http://www.survivalescaperooms.com)



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 茂名市| 佛学| 巫溪县| 泰州市| 和政县| 双流县| 潜山县| 海伦市| 昌平区| 历史| 郓城县| 唐海县| 禄丰县| 佳木斯市| 关岭| 安福县| 渝北区| 玛多县| 桦甸市| 清丰县| 宣汉县| 曲水县| 墨竹工卡县| 尼勒克县| 永城市| 荥阳市| 红安县| 巍山| 安仁县| 清流县| 台州市| 肃南| 房产| 成安县| 吉水县| 泰兴市| 教育| 仁化县| 浏阳市| 稷山县| 英超|