2014-09-01 59 views
0

我需要創建一個將類實例作爲構造函數參數的bean。該類實例的有用值由類創建爲靜態字段。OSGi白羊座藍圖靜態字段

具體而言,我試圖從HtmlUnit創建WebClient bean。 http://htmlunit.sourceforge.net/apidocs/com/gargoylesoftware/htmlunit/WebClient.html

您可以看到WebClient採用無參數構造函數(不需要)以及採用BrowserVersion實例的構造函數。 http://htmlunit.sourceforge.net/apidocs/com/gargoylesoftware/htmlunit/BrowserVersion.html

BrowserVersion將有用的實例定義爲靜態字段,例如:CHROME,FIREFOX_24,INTERNET_EXPLORER_11。

我需要在Aries Blueprint bean中引用這些BrowserVersion實例之一。

下面是藍圖設定是什麼樣子:

<bean id="webClient" class="com.gargoylesoftware.htmlunit.WebClient"> 
    <argument>??</argument> 
</bean> 

我曾嘗試:

<argument><bean class="com.gargoylesoftware.htmlunit.BrowserVersion.FIREFOX_24" /></argument> 
<argument value="com.gargoylesoftware.htmlunit.BrowserVersion.FIREFOX_24" /> 

我也試過剛剛創造的藍圖配置一個BrowserVersion豆,我似乎不能做這件事。

<bean id="webClient" class="com.gargoylesoftware.htmlunit.WebClient"> 
    <argument> 
     <bean class="com.gargoylesoftware.htmlunit.BrowserVersion"> 
      <argument index="0" type="java.lang.String" value="Netscape" /> 
      <argument index="1" type="java.lang.String" value="5.0 (Windows)" /> 
      <argument index="2" type="java.lang.String" value="Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101 Firefox/24.0" /> 
      <argument index="3" type="java.lang.Float" value="24.0" /> 
     </bean> 
    </argument> 
</bean> 

這應該與BrowserVersion上的a public constructor匹配。

任何想法我做錯了兩個計數?

回答

0

通過使用輔助方法解決它。

<bean id="webClient" class="com.stackoverflow.HtmlUnitHelper" factory-method="getChromeClient" /> 

輔助方法很簡單:

public static WebClient getChromeClient() { 
    return new WebClient(BrowserVersion.CHROME); 
} 

也許有一個更好的解決方案,但這個工作!