Für jede ausgehende Nachricht bietet Salesforce eine vollständige, eigenständige WSDL.Wie können mehrere Empfänger von SFDC Outbound Message im selben Spring-Service implementiert werden?
Die Implementierung eines Spring-Service für einen einzelnen ist einfach, mit jaxws-maven-plugin
zum Generieren der Klassen und @Endpoint
, @PayloadRoot
usw., um den Endpunkt zu binden.
Mehrere Outbound-Nachrichten verwenden jedoch alle dieselben QNs (z. B. http://soap.sforce.com/2005/09/outbound:notifications
oder urn:sobject.enterprise.soap.sforce.com:sObject
) für unterschiedliche Strukturen und Typhierarchien.
Ich weiß how to map the same XML names to different handlers based on URL path.
Ich weiß, wie ein separates Paket für die generierten Klassen mit einer Bindungsdatei verwenden:
<?xml version="1.0" encoding="UTF-8"?>
<jaxws:bindings
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
wsdlLocation="../wsdl/SFDC_Contact_Outbound_Msg.wsdl"
version="2.0">
<jaxb:bindings node="//xs:schema[@targetNamespace='http://soap.sforce.com/2005/09/outbound']">
<jaxb:schemaBindings>
<jaxb:package name="com.sforce.soap.outbound.contact"/>
</jaxb:schemaBindings>
</jaxb:bindings>
<jaxb:bindings node="//xs:schema[@targetNamespace='urn:sobject.enterprise.soap.sforce.com']">
<jaxb:schemaBindings>
<jaxb:package name="com.sforce.soap.enterprise.sobject.contact"/>
</jaxb:schemaBindings>
</jaxb:bindings>
</jaxws:bindings>
Wenn jedoch die Jaxb2Marshaller
aus dem generierten Code zu initialisieren versucht, es kann immer noch nicht die XML-Konflikte behandeln:
Ich möchte keine weiteren manuellen Schritte hinzufügen, wenn die SDFC-generierte WSDL ändert, außer die neuen Dateien ablegen.
Gibt es eine Möglichkeit, die Namespaces in package-info.java
zu ändern, ohne die Quell-WSDL zu ändern?
Gibt es einen Weg zu leicht (d. H. Nicht mit einer separaten @Bean
Methode für jeden) einen separaten Marshaller für jedes Paket erstellen, die alle dann hinzugefügt werden könnten, um die DefaultMethodEndpointAdapter
?
Gibt es eine andere Möglichkeit, all diese Empfänger für ausgehende Nachrichten zu implementieren?