Groovy - Ambiguous Method Overloading for Method

I have already checked the forums, I will find some tips for this problem, but none of them match mine.

I only got this exception after calling the WSDLParse.parse method. BTW I'm trying to upgrade my Groovy version 2.2.1 to 2.4.3, am I missing something?

Thank you for your advice

Ps: This is the exception message, below you can find all stacktrace.

groovy.lang.GroovyRuntimeException: Ambiguous method overloading for com.predic8.schema.Element # setType method. Unable to decide which method to call for [null] due to prototype overlap between: [class javax.xml.namespace.QName] [class groovy.xml.QName]

  groovy.lang.GroovyRuntimeException: Ambiguous method overloading for method com.predic8.schema.Element#setType.
Cannot resolve which method to invoke for [null] due to overlapping prototypes between:
        [class javax.xml.namespace.QName]
        [class groovy.xml.QName]
        at groovy.lang.MetaClassImpl.chooseMostSpecificParams(MetaClassImpl.java:3238)
        at groovy.lang.MetaClassImpl.chooseMethodInternal(MetaClassImpl.java:3191)
        at groovy.lang.MetaClassImpl.chooseMethod(MetaClassImpl.java:3134)
        at groovy.lang.MetaClassImpl.getNormalMethodWithCaching(MetaClassImpl.java:1369)
        at groovy.lang.MetaClassImpl.getMethodWithCaching(MetaClassImpl.java:1284)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1054)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1016)
        at org.codehaus.groovy.runtime.metaclass.MultipleSetterProperty.setProperty(MultipleSetterProperty.java:52)
        at groovy.lang.MetaClassImpl.setProperty(MetaClassImpl.java:2663)
        at groovy.lang.MetaClassImpl.setProperty(MetaClassImpl.java:3746)
        at com.predic8.soamodel.XMLElement.setProperty(XMLElement.groovy)
        at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.setGroovyObjectProperty(ScriptBytecodeAdapter.java:530)
        at com.predic8.schema.Element.parseAttributes(Element.groovy:46)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.ja
va:207)
        at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:56)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:171)
        at com.predic8.soamodel.XMLElement.parse(XMLElement.groovy:40)
        at com.predic8.soamodel.XMLElement$parse$0.call(Unknown Source)
        at com.predic8.schema.Schema.parseChildren(Schema.groovy:109)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.ja
va:207)
        at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:56)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:179)
        at com.predic8.soamodel.XMLElement.parse(XMLElement.groovy:45)
        at com.predic8.soamodel.XMLElement$parse$0.call(Unknown Source)
        at com.predic8.wsdl.Types.parseChildren(Types.groovy:41)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.ja
va:207)
        at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:56)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:179)
        at com.predic8.soamodel.XMLElement.parse(XMLElement.groovy:45)
        at com.predic8.soamodel.XMLElement$parse$0.call(Unknown Source)
        at com.predic8.wsdl.Definitions.parseChildren(Definitions.groovy:220)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.ja
va:207)
        at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:56)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:179)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:177)
        at com.predic8.soamodel.XMLElement.parse(XMLElement.groovy:45)
        at com.predic8.soamodel.XMLElement$parse$0.call(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:110)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:130)
        at com.predic8.wsdl.WSDLParser.parseLocal(WSDLParser.groovy:44)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.ja
va:207)
        at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:56)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:171)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:169)
        at com.predic8.soamodel.AbstractParser.parse(AbstractParser.groovy:34)
        at com.predic8.wsdl.WSDLParser.super$2$parse(WSDLParser.groovy)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:324)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1207)
        at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuperN(ScriptBytecodeAdapter.java:130)
        at com.predic8.wsdl.WSDLParser.parse(WSDLParser.groovy:24)
        at com.predic8.wsdl.WSDLParser$parse.call(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:110)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:122)
        at ESBWsdlRequest.<init>(ESBWsdlRequest.groovy:23)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
        at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:77)
        at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrapNoCoerce.callConstructor(ConstructorSite.java
:102)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:57)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:232)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:268)
        at YOKSIS_OGRENCI_SIL_in.run(YOKSIS_OGRENCI_SIL_in.groovy:2)
        at groovy.util.GroovyScriptEngine.run(GroovyScriptEngine.java:589)
        at com.fibabanka.esi.xslt.ESBGroovyEngine.execute(ESBGroovyEngine.java:21)
        at com.fibabanka.esi.xslt.Transformer.transformGroovy(Transformer.java:102)
        at com.fibabanka.esi.xslt.Transformer.transformIn(Transformer.java:63)
        at com.fibabanka.esi.xslt.XsltProcessor.processBag(XsltProcessor.java:92)
        at com.fibabanka.esi.common.GenericProcessor.processTypeBag(GenericProcessor.java:27)
        at com.fibabanka.esi.common.GenericProcessor.process(GenericProcessor.java:37)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:340)
        at org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:237)
        at org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:168)
        at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
        at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99)
        at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
        at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:71)
        at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
        at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99)
        at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
        at org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:91)
        at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
        at org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:322)
        at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:213)
        at org.apache.camel.processor.RouteContextProcessor.processNext(RouteContextProcessor.java:45)
        at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
        at org.apache.camel.processor.interceptor.DefaultChannel.process(DefaultChannel.java:303)
        at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
        at org.apache.camel.processor.Pipeline.process(Pipeline.java:117)
        at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)
        at org.apache.camel.processor.RouteContextProcessor.processNext(RouteContextProcessor.java:45)
        at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
        at org.apache.camel.processor.UnitOfWorkProcessor.processAsync(UnitOfWorkProcessor.java:150)
        at org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:117)
        at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
        at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99)
        at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
        at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:71)
        at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
        at org.apache.camel.component.seda.SedaConsumer.sendToConsumers(SedaConsumer.java:248)
        at org.apache.camel.component.seda.SedaConsumer.doRun(SedaConsumer.java:160)
        at org.apache.camel.component.seda.SedaConsumer.run(SedaConsumer.java:131)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)

      

I have not installed the item or installed against it. Also I have not used the QName class in my script. This is my Groovy script file ->

import groovy.time.BaseDuration.From;
import groovy.util.XmlParser;
import groovy.util.XmlSlurper;
import groovy.xml.MarkupBuilder;
import groovy.xml.XmlUtil;

import java.io.StringWriter;

import com.predic8.wsdl.Definitions;
import com.predic8.wsdl.WSDLParser;
import com.predic8.wstool.creator.RequestTemplateCreator;
import com.predic8.wstool.creator.SOARequestCreator;

class ESBWsdlParser {
    String formTemplate;
    String requestSoapXml;
    public ESBWsdlRequest(String wsdlFile,String operationName) {
        File file = new File(wsdlFile);
        println file.getAbsolutePath();

        WSDLParser parser = new WSDLParser();
        Definitions wsdl = parser.parse(wsdlFile);
        StringWriter writer = new StringWriter();
        SOARequestCreator creator = new SOARequestCreator(wsdl, new RequestTemplateCreator(), new MarkupBuilder(writer));
        //creator.createRequest(PortType name, Operation name, Binding name);
        creator.createRequest(null, operationName, null);
        formTemplate = writer.toString();

    }
    public String resolveName(c){
        String[] arParts = c.name().toString().split("}");
        if(arParts.length > 1){
            return  arParts[1];
        }
        return c.name;
    }

      

+3


source to share


3 answers


The problem is that there are two setType methods that are compatible with objects and with one argument, and you call it with null

. Or, more accurately, you are not calling a method, you are setting a property that causes the method to be called.

Now, before Groovy 2.4, we did not support the overloaded case. Which method was called was actually random. In other words, you're in luck if he always named the right method for your business. Since Groovy 2.4, Groovy supports an overloaded setter, but this can lead to cases in which the setter overload throws exceptions like those described above. Something I think is good because it shows something that may have led to mysterious errors in the past.



The fix is ​​not that good ... setType((QName) qname))

instead of assigning a property .... of course with a QName class of your choice. You can use, of course, Keegan's suggestion to support you in this.

EDIT: changed setElement to setType

+2


source


You should probably request SOA Membrane to edit Element 's

type = getTypeQName(token.getAttributeValue( null , 'type'))

      

to something like

type = (QName) getTypeQName(token.getAttributeValue( null , 'type'))

      



to eliminate ambiguity. At the same time, you can manually override yourself, for example

@Grab(group='ch.qos.logback', module='logback-classic', version='1.1.3')
@Grab(group='org.apache.httpcomponents', module='httpclient', version='4.5')

// for some reason, this isn't able to resolve in my GroovyConsole -- I had to download into my .groovy/lib
//@GrabResolver(name='membrane', root='http://repository.membrane-soa.org/content/repositories/releases')
//@Grab(group='com.predic8', module='soa-model-core', version='1.5.3')

// for some reason, I'm getting "java.lang.NoClassDefFoundError: Unable to load class com.predic8.schema.SchemaComponent due to missing dependency Lorg/slf4j/Logger;" in my GroovyConsole when I don't have this
@GrabConfig(systemClassLoader=true, initContextClassLoader=true)

import com.predic8.wsdl.Definitions
import com.predic8.wsdl.Operation
import com.predic8.wsdl.PortType
import com.predic8.wsdl.WSDLParser

import com.predic8.schema.Declaration
import javax.xml.namespace.QName as JQName
import groovy.xml.QName

// the fix
MetaMethod originalSetType = Declaration.metaClass.getMetaMethod("setType", [Object])
Declaration.metaClass.setType = { Object obj ->
   if (obj)
       originalSetType.invoke((QName) obj)
}

// an example usage, demonstrating fix works
Definitions defs = new WSDLParser().parse("http://www.w3schools.com/webservices/tempconvert.asmx?WSDL")
for (PortType pt : defs.portTypes) {
    println pt.name
    for (Operation op : pt.operations)
      println "  -${op.name}"
}

      

Since you are using classes (I assume in a compiled project) you could put the fix in a static block.

+1


source


Upgrade to 1.6.0. For example. for Gradle build script:

compile "com.predic8:soa-model-core:1.6.0"

      

0


source







All Articles