Dynamic/Loose Binding von Jars

sebastianb

Erfahrenes Mitglied
Hallo zusammen,

ich habe mal eine grundsätzliche Frage, wie man am besten folgendes Szenario bewerkstelligt.

Ich entwickle gerade ein JIRA-Plugin, welches der Integration zu SalesForce (Chatter) dient. Die Schnittstelle zu SalesForce ist ein gewöhnlicher SOAP-Webservice. Wer bereits schonmal mit der SalesForce-API gearbeitet hat, weiß, dass die WSDL aber immer automatisch/dynamisch erzeugt wird. Diese wiederrum wird durch ein kleines SalesForce-Progrämmchen gesparst und hinten raus kommt dann die fertige API als JAR.

Wenn ich nun mein JIRA-Plugin verteiben will, brauche ich also eine Möglichkeit die API-Jar dynamisch zu linken, bzw., dass der Kunde die Möglichkeit hat seine eigene einzubinden.

Da es sich hier also um ein fertig geschnürtes Paket von Salesforce handelt, kann ich nicht wie sonst einfach eine Abstrakte Oberklasse definieren und diese dann als Schnittstelle im Plugin verwenden. Als Alternative sehe ich also nur, dass ich im Plugin die Jar (zB aus einer Datenbank) lade und dann die jeweiligen Klassen manuell in den Classpath nachlade und dann weiter mit Reflection arbeite.

z.B.
Java:
// Jar laden...
Class cl = Class.forName("Foo");
Object o = cl.getConstructor(Integer.TYPE, Integer.TYPE).newInstance(1,2);
 Method m = cl.getMethod("add", Integer.TYPE, Integer.TYPE);
 System.out.println(m.invoke(o, 5,10));


Irgendwie scheint mir das aber recht böse :mad:. Falls jemand also einen guten Tipp hat, wäre ich sehr dankbar! :D

Sebastian
 
Hallo

"Die Schnittstelle zu SalesForce ist ein gewöhnlicher SOAP-Webservice. Wer bereits schonmal mit der SalesForce-API gearbeitet hat, weiß, dass die WSDL aber immer automatisch/dynamisch erzeugt wird. Diese wiederrum wird durch ein kleines SalesForce-Progrämmchen gesparst und hinten raus kommt dann die fertige API als JAR."

"Immer"? oO
Heisst das, dass bei jedem get-Request aufs WSDL das WSDL anders ausschaut?

Grüsse,
slowy
 
Nene, das machst du nur einmalig. Da aber ein Salesforce-Kunde das Datenmodell (nahezu) beliebig anpassen kann, wird in Abhängigkeit davon auch die WSDL erzeugt.
Ich habe nun gesehen, dass man sich bei SalesForce 2 WSDLs erzeugen kann.

=> Enterprise.wsdl
"Force.com Enterprise WSDL—This API is for most enterprise users who are developing client applications for their organization [...]"

=> Partner.wsdl
"Force.com Partner WSDL—This API is for salesforce.com partners who are developing client applications for multiple organizations. As a loosely-typed representation of the Salesforce object model, the partner WSDL can be used to access data within any organization."

Ich generiere mir die API jetzt einfach aus der Partner.wsdl und binde die in mein Plugin ein.

Gruß Sebastian
 
Zurück