سؤال

لقد واجهت مشكلة إرسال طلبات معقدة باستخدام GroovyWS.

هذا هو نموذج الطلب الذي تم إنشاؤه بواسطة SoapUI:

<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>

قطعة الكود الرائعة:

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

إذن ما الذي يجب علي تمريره بدلاً من ذلك ?.

شكرا لمساعدتك.

-فوفا.

هل كانت مفيدة؟

المحلول 2

شكرا جزيلا بيل.

أريد فقط إضافة بعض المعلومات للقراء المستقبليين.

لتشغيل التسجيل لـ GroovyWS في Grails:

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

مع هذا كما ذكر بيل يمكنك رؤية أسماء الفئات.


شيء اخر: parameters قد يكون لها نوع مختلف.لا List<?>.ولهذا السبب ينبغي إنشاؤه أيضًا.

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

لاسترداد الأساليب والحقول المتاحة للكائنات التي تم إنشاؤها حديثًا، يمكنك استخدام انعكاس Groovy:

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

هذا كل شئ!

-فوفا

نصائح أخرى

يقوم GroovyWS ديناميكيًا بإنشاء فئات لكل نوع من أنواع الوسائط التي تحتاجها لتمرير البيانات إلى استدعاء خدمة الويب.على سبيل المثال، إذا كان استدعاء خدمة الويب:

public int passSomeArgs( Arg1Type a, Arg2Type b );

سيقوم GroovyWS بإنشاء فئة Arg1Type وفئة Arg2Type ديناميكيًا، والتي يمكنك الوصول إليها عبر إحدى الطرق الموجودة على الوكيل.

// this will instantiate an Arg1Type for you
def arg1 = proxy.create( "ns1.ns2.Arg1Type" );  
// this will instantiate an Arg2Type for you
def arg2 = proxy.create( "ns1.ns2.Arg2Type" );  

يمكنك بعد ذلك ملء مثيل arg1/arg2 بالبيانات وإجراء مكالمتك:

int ret = proxy.passSomeArgs( arg1, arg2 );

لاحظ أنه من المحتمل أن تكون هناك بعض مساحات الأسماء المتضمنة في الفئات التي يتم إنشاؤها.لقد استخدمت تسجيل CXF الذي تمت طباعته أثناء قيام GroovyWS بمعالجة WSDL لمعرفة ما يعتقد CXF أنه يجب أن تكون عليه أسماء الفئات بالفعل.

شكرًا!لقد جعلت GroovyWS يعمل مع خدمة ويب معقدة حقًا!

خطواتي:لقد قمت بتشغيل تصحيح الأخطاء للحصول على الفئة الجذرية، ثم فعلت رمز الانعكاس للحصول على الفئات الداخلية، واستمر في تعيين الخصائص والتحقق مما إذا كانت سلسلة أم قائمة.

وفويلا!

def proxy = new WSClient(wsdl,this.class.classLoader)
proxy.initialize()

def f2bCobranca = proxy.create("br.com.f2b.soap.wsbilling.F2BCobranca") //got with debug on

//Show me inner classes of root class
f2bCobranca.class.fields.each { log.debug it }
f2bCobranca.class.methods.each { log.debug it }

f2bCobranca.cobranca = proxy.create('br.com.f2b.soap.wsbilling.F2BCobranca$Cobranca')
f2bCobranca.cobranca.demonstrativo << 'teste' //it's a list!
f2bCobranca.cobranca.sacadorAvalista = 'teste jose'
f2bCobranca.cobranca.desconto = proxy.create('br.com.f2b.soap.wsbilling.F2BCobranca$Cobranca$Desconto')
f2bCobranca.cobranca.multa = proxy.create('br.com.f2b.soap.wsbilling.F2BCobranca$Cobranca$Multa')

def sacado1 = proxy.create('br.com.f2b.soap.wsbilling.F2BCobranca$Sacado')
sacado1.nome = "teste ${new Date()}"
sacado1.email << 'teste@wanswins.com.br'
sacado1.endereco = proxy.create('br.com.f2b.soap.wsbilling.F2BCobranca$Sacado$Endereco')
sacado1.telefone = proxy.create('br.com.f2b.soap.wsbilling.F2BCobranca$Sacado$Telefone')
sacado1.telefoneCom = proxy.create('br.com.f2b.soap.wsbilling.F2BCobranca$Sacado$TelefoneCom')
sacado1.telefoneCel = proxy.create('br.com.f2b.soap.wsbilling.F2BCobranca$Sacado$TelefoneCel')
sacado1.cpf = ''
sacado1.cnpj = ''
sacado1.observacao = ''
f2bCobranca.sacado << sacado1  

def retorno = proxy.RegisterWSBilling(f2bCobranca)
log.debug retorno
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top