2010-05-27 43 views
2

我的web應用程序是由組織提供的一些內部Web服務的消費者。我見過一對夫婦的例子,其中一個Web服務引用是使用類似注射:如何通過Glassfish JNDI注入@WebServiceRef資源?

@WebServiceRef(name="services/MyService") 
MyService myService; 

但我不知道如何來定義服務/爲MyService JNDI對象Glassfish的第三版,使得它被注入。我希望通過Glassfish管理定義web服務客戶端類,並通過管理控制檯指定端點URL。這種方式URL不是硬編碼的,並且易於管理。

最後,我還需要指定用戶名和密碼進行HTTP身份驗證,除了URL之外,也是一樣的。我該如何解決它?

回答

2

我不知道的方式來定義一個「全局」 JNDI名稱,但你可以寫在web.xml服務-ref元素,將工作:

<service-ref> 
    <service-ref-name>services/MyService</service-ref-name> 
    <service-interface>service.MyEndpointService</service-interface> 
    <wsdl-file>http://example.com/MyWsdl</wsdl-file> 
</service-ref> 

然後,您可以使用你提到的帶註釋的字段。

用戶名和密碼,一旦你從服務中獲得的代理,你可以將它轉換爲BindingProvider,然後設置屬性:

MySEI proxy = myService.getMyEndpointPort(); 
BindingProvider bp = (BindingProvider)proxy; 
Map<String, Object> rc = bp.getRequestContext(); 
rc.put(BindingProvider.USERNAME_PROPERTY, "myuser"); 
rc.put(BindingProvider.PASSWORD_PROPERTY, "mypass"); 
+0

感謝您回答這個長期存在的問題。我想用你的方法工作。用戶名和密碼也可以是web.xml應用程序上下文參數的一部分,以便它們可以從同一個地方進行檢索。既然我們把它放在web.xml中,它也可以在Tomcat中工作嗎? – jbx 2011-01-14 23:43:16

+0

因爲Tomcat沒有實現JSR-109,所以我對Tomcat中的工作產生懷疑。雖然沒有嘗試過。 – 2011-01-15 03:41:56

+0

怎樣指定Endpoint的實際URL?理想情況下,這也是通過這裏配置的。 WSDL綁定中的URL有時不是您要連接的Web服務端點的實際URL。 – jbx 2011-01-15 11:06:08