2010-11-22 3 views
1

Ich versuche, die folgenden Mitglieder der Komponente org.jboss.seam.mail.mailSession einzustellen, die definiert sind als:Wie werden Eigenschaften in einer Nahtkomponente vor @create festgelegt?

boolean ssl; 
boolean tls = true; 

(beide haben Getter und Setter-Methoden) bevor das Verfahren schaffen, die mit @Create genannt bezeichnet ist. Ich möchte verhindern, dass das Framework SSL, TLS verwendet. Die MailSession-Komponente prüft, ob diese Mitglieder gesetzt sind. Wenn ja, erstellt es Eigenschaften, die Javamail zur Verwendung von SSL zwingen.

Ich habe versucht, so weit:

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

Problem: bis javax.mail.Session auspackt, wo ich nicht die Komponente zugreifen kann.

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

Problem: null zurück, da keine Instanz erstellt wird.

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

Problem: A-Komponente und nicht wird die Instanz zurückgegeben.

Was soll ich tun, um 2 Bits umzuschalten, würden Sie empfehlen, das Framework zu patchen, oder gibt es einen einfacheren Weg, den ich übersehen habe?

Antwort

2

Haben Sie versucht, die MailSession zu überschreiben? Ich bin nicht sicher, ob es aber funktioniert ...

Etwas nach dem Vorbild von

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

    //override the stuff you want here 
} 
+0

+1 Das sollte funktionieren, weil der Vorrang von 'Application' höher ist als' BUILT_IN'; Das bedeutet, dass "MyMailSession" anstelle von "MailSession" installiert wird. – kraftan

+0

Danke für diesen aufschlussreichen Ansatz, es ist generischer und ich denke, ich werde es irgendwann brauchen. – stacker

1

Ich löste es diese Sequenz mit:

@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"); 

Ich frage mich, wie die MailSession Instanz an dem Bauteil angebracht ist, aber es funktioniert jetzt.

3

Nach Seam reference manual und Seam forum sollten Sie in der Lage sein, TLS und SSL in Ihrer components.xml Konfiguration direkt zu deaktivieren:

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

Haben Sie das schon versucht?

+0

Vielen Dank, es funktioniert wie ein Charme. Würden Sie bitte Ihre Antwort auf diese Frage kopieren, die ich fragte, die spezifischer ist http://stackoverflow.com/questions/4237970/how-to-disable-javamail-ssl-support (Ich werde es natürlich akzeptieren) – stacker

+0

@stacker Natürlich habe ich es kopiert. Ich bin froh, dass ich hätte helfen können. – kraftan

Verwandte Themen