Frage

Ich hatte ein Problem beim Senden komplexer Anfragen mit GroovyWS.

Dies ist eine von SoapUI generierte Beispielanforderung:

<soapenv:Envelope 
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:dex="http://www.temp.com/com/dex" 
>
 <soapenv:Header/>
 <soapenv:Body>
  <dex:executeRequest>
     <!--Optional:-->
     <a>?</a>
     <!--Optional:-->
     <b>?</b>
     <!--Optional:-->
     <parameters>
        <!--Zero or more repetitions:-->
        <parameter>
           <!--Optional:-->
           <key>?</key>
           <!--Optional:-->
           <value>?</value>
        </parameter>
     </parameters>
     <!--Optional:-->
     <c>?</c>
     <!--Optional:-->
     <d>?</d>
  </dex:feedrequest>
 </soapenv:Body>
</soapenv:Envelope>

Der groovige Code:

def proxy = webService.getClient(grailsApplication.config.ws.endpoint);
proxy.processdRequest(?);

Also, was sollte ich stattdessen passieren? ?.

Danke für deine Hilfe.

-vova.

War es hilfreich?

Lösung 2

Vielen Dank, Bill.

Ich möchte nur einige Informationen für zukünftige Leser hinzufügen.

So aktivieren Sie die Protokollierung für GroovyWS in Grails:

log4j = {
   debug 'grails.app',
         'groovyx.net.ws',
         'org.apache.cxf'
}

Mit diesem wie erwähnten Bill können Sie die Namen der Klassen sehen.


Eine Sache noch: parameters kann einen anderen Typ haben.Nicht List<?>.Deshalb sollte es auch geschaffen werden.

def params = proxy.create('com.temp.feeds.FeedRequestType$Parameters');

Um verfügbare Methoden und Felder für neu erstellte Objekte abzurufen, können Sie Groovy Reflection verwenden:

params.class.methods.each{
        println it;
}
params.class.fields.each{
        println it;
}

Das ist alles!

-vova

Andere Tipps

groovyws erstellt dynamisch Klassen für jeden der Argumenttypen, den Sie benötigen, um Daten an den Web-Service-Anruf weiterzuleiten.Wenn der Webservice-Anruf zum Beispiel war:

generasacodicetagpre.

groovyws erstellen dynamisch eine arg1type-Klasse und eine arg2type-Klasse, auf die Sie über eine Methode zum Proxy zugreifen könnten.

generasacodicetagpre.

Sie können dann die ARG1 / ARG2-Instanz mit Daten füllen und Ihren Anruf tätigen:

generasacodicetagpre.

Hinweis, es gibt wahrscheinlich einige Namespaces, die an den erstellten Klassen beteiligt sind.Ich habe die CXF-Protokollierung verwendet, die als groovyws gedruckt wurde, um die WSDL zu verarbeiten, um zu sehen, was CXF dachte, dass die Klassennamen tatsächlich sein sollten.

danke!Ich habe Groovyws mit einem wirklich komplexen Webservice arbeitet!

Meine Schritte: Ich habe Debug eingeschaltet, um die Wurzelklasse zu erhalten, und tat dieser Reflexion Code, um innere Klassen zu erhalten, und unterwegs einstellte Eigenschaften und prüfen Sie, ob es eine Zeichenfolge oder Liste ist.

und voilá!

generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top