2010-11-22 39 views
1

我試圖設置元器件org.jboss.seam.mail.mailSession下列成員,其被定義爲:該方法創建該註釋與@Create被調用之前如何在@create之前在Seam組件中設置屬性?

boolean ssl; 
boolean tls = true; 

(兩者都具有獲取和設置方法) 。 我想阻止框架使用SSL,TLS。 mailSession組件檢查是否設置了這些mebers。如果是,它會創建強制javamail使用ssl的屬性。

我試過到目前爲止:

Object comp = Component.getInstance("org.jboss.seam.mail.mailSession"); 

問題:解開到javax.mail.Session,我不能訪問該組件。

Object comp = Component.getInstance("org.jboss.seam.mail.mailSession", ScopeType.APPLICATION,false,false); 

問題:因爲沒有創建實例返回null。

Component comp = Component.forName("org.jboss.seam.mail.mailSession"); 

問題:A組分和不是實例被返回。

我應該怎麼做才能切換2位,你會推薦修補框架,還是有一種我忽略的簡單方法?

回答

2

您是否嘗試覆蓋mailSession? 我不知道,如果它的工作原理,但...

沿

@Name("org.jboss.seam.mail.mailSession") 
@Install(precedence=Application) 
class MyMailSession extends MailSession { 

    //override the stuff you want here 
} 
+0

+1這應該是因爲`Application`的優先級高於`BUILT_IN`;這意味着`MyMailSession`將被安裝而不是`MailSession`。 – kraftan 2010-11-23 21:32:41

+0

感謝這種有見地的方法,它更通用,我想我會在某個時候需要它。 – stacker 2010-11-23 22:35:34

1

我解決了它使用這個序列:

@In(create = true) 
private Renderer renderer; 
... 
Component comp = Component.forName("org.jboss.seam.mail.mailSession"); 
MailSession ms = (MailSession) comp.newInstance(); 
ms.setDebug(true); 
ms.setTls(false); 
ms.setSsl(false); 
ms = ms.create(); 

renderer.render("/Mail.xhtml"); 

我不知道郵件會話實例是如何附着的組件,但現在它的工作原理。

3

東西線根據Seam reference manualSeam forum你應該能夠直接在您的components.xml配置禁用TLS和SSL:

<mail:mail-session debug="true" tls="false" ssl="false" ... /> 

你已經試過了嗎?

相關問題