日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
如何使用Netbeans生成的Webservice

用Netbeans生成webservice非常方便,當(dāng)然,有jdk6環(huán)境是***,但有個(gè)問題經(jīng)常困惑我們,就是在測(cè)試環(huán)境或開發(fā)環(huán)境中完成的代碼要實(shí)施部署到其他機(jī)器上 時(shí),我們會(huì)束手無(wú)策,只好一個(gè)個(gè)去改代碼中的目標(biāo)endpoint地址;有人說(shuō)用配置文件啊,呵呵,在純粹手動(dòng)寫的axis或xfire中也許很方便,但在Netbeans中這些自動(dòng)生成的片段,改起來(lái)比較麻煩,雖然開發(fā)的時(shí)候托托拽拽很方便。以前,我一直就是這么安慰自己,事物都有兩面性嘛!最近看到Sun Webservice老大arun gupta的文章,發(fā)現(xiàn)其實(shí)要改變這個(gè)很容易,非常容易,不過還是有問題,下面會(huì)詳細(xì)講述。

舉個(gè)例子:

按Arun的說(shuō)法,我們經(jīng)常使用的wsdl已生成代碼來(lái)調(diào)用webservice,其中,jax-ws的版本是2.1

 
 
 
  1. Hello port = new HelloService().getHelloPort();   
  2.  
  3. String result = port.sayHello("Duke!");  

當(dāng)然,上面的描述都是對(duì)應(yīng)特定ip地址發(fā)布的webservice,如果將此相同的服務(wù)最終部署到其他機(jī)器,就不能使用了。所以,我們可以在上面兩行之間增加另外一行代碼:

 
 
 
  1. ((javax.xml.ws.BindingProvider)port).getRequestContext().put(javax.xml.ws.BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "NEW_ADDRESS_HERE");  

實(shí)際使用中直接將NEW_ADDRESS_HERE替換成相應(yīng)的endpoint地址就行了。

我覺得Arun在測(cè)試的時(shí)候和我之前是犯了同樣的錯(cuò)誤,在換了endpoint之后,如果按上面的方法,在原始的app server不關(guān)閉的時(shí)候是可行的,但這種情況很少發(fā)生。在執(zhí)行“Hello port = new HelloService().getHelloPort();”這句代碼時(shí),會(huì)先去取原始的wsdl文件,如果原始的app server已關(guān)閉,則會(huì)報(bào)異常,((javax.xml.ws.BindingProvider)port).getRequestContext().put(javax.xml.ws.BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "NEW_ADDRESS_HERE");這句代碼就不能再執(zhí)行了。

經(jīng)過摸索,我找到了一個(gè)好的方法,具體如下:

首先,要定義新的endpoint的URL:URL endpoint_new = new URL("NEW_ADDRESS_HERE");

再定義一個(gè)QName: QName qname = new QName("http://"+"ORIGINAL_PACKAGE","SERVICE_NAME");

其中NEW_ADDRESS_HERE就是新的endpoint地址,ORIGINAL_PACKAGE就是產(chǎn)生的webservice的包,SERVICE_NAME是發(fā)布的service名稱,試一下就知道,如果填錯(cuò)了,會(huì)提示你哪些是有效的寫法。

***,Hello port = new HelloService().getHelloPort();這句要替換掉,改成Hello port = new HelloService(endpoint_new,qname).getHelloPort();

我在jax-ws官網(wǎng)又找到一篇文章:https://jax-ws.dev.java.net/guide/How_to_invoke_and_endpoint_by_overriding_endpoint_address_in_the_WSDL.html。它把上面兩種情況都包括進(jìn)去了,只是沒怎么具體說(shuō)明,讓人有點(diǎn)摸不著頭腦。


新聞標(biāo)題:如何使用Netbeans生成的Webservice
文章地址:http://www.dlmjj.cn/article/djosihg.html