2014-09-01 5 views
0

Мне нужно создать компонент, который принимает экземпляр класса как параметр конструктора. Полезные значения этого экземпляра класса создаются классом как статические поля.OSGi Aries Blueprint статическое поле

В частности, я пытаюсь создать компоненты WebClient из HtmlUnit. http://htmlunit.sourceforge.net/apidocs/com/gargoylesoftware/htmlunit/WebClient.html

Вы можете видеть, что WebClient принимает конструктор no-arg (не хочет), а также тот, который принимает экземпляр BrowserVersion. http://htmlunit.sourceforge.net/apidocs/com/gargoylesoftware/htmlunit/BrowserVersion.html

BrowserVersion определяет полезные экземпляры как статические поля, например: CHROME, FIREFOX_24, INTERNET_EXPLORER_11.

Мне нужно ссылаться на один из этих экземпляров BrowserVersion в компоненте Blue Ories.

Вот что установка план выглядит следующим образом:

<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 компонента в Blueprint конфигурации, и я не могу чтобы сделать эту работу.

<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> 

Это должно соответствовать a public constructor на BrowserVersion.

Любые идеи, что я делаю неправильно в обоих подсчетах?

ответ

0

Работала с использованием вспомогательного метода.

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

Вспомогательный метод прост:

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

Может быть, есть лучшее решение, но это работает!

Смежные вопросы