Dan Short
Dan Short

Reputation: 9616

Method Not Found Calling .NET Method with List from ColdFusion

For some background, this is related to Passing IEnumerable Variables into .NET from ColdFusion. I've changed the code to use a list instead, and have made progress, but continue to hit roadblocks when using anything other than simple data types with .NET and ColdFusion. So here's the current issue.

First, I have a .dll with the following VideoWallEvent.cs file:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CoStar.Utilities.VideoWall
{
    public class VideoWallEventActivityCollection
    {
        public string CountryCode { get; set; }
        public DateTime ActivityDate { get; set; }
        public List<VideoWallEvent> Events { get; set; }

    }

    public class VideoWallEvent
    {

        public string ID { get; set; }
        public decimal Latitude { get; set; }
        public decimal Longitude { get; set; }

        public VideoWallEvent(string EventID, decimal EventLatitude, decimal EventLongitude)
        {
            ID = EventID;
            Latitude = EventLatitude;
            Longitude = EventLongitude;
        }
    }
}

I've also generated a proxy object object using JNBProxyGUI.exe following instructions from the prior question. Give that the above dll, and the proxy jar I've generated, I run the following ColdFusion code:

<cfset UtilitiesProxy = ExpandPath("UtilitiesProxy.jar") />
<cfset CoStarUtilities = ExpandPath("CoStar.Utilities.dll") />
<cfset Paths = ArrayToList([CoStarUtilities, UtilitiesProxy])>

<cfset theEvent = CreateObject(".net", "CoStar.Utilities.VideoWall.VideoWallEvent", Paths) />
<cfset eventList = CreateObject(".net","System.Collections.Generic.List`1", Paths).init(theEvent.getDotNetClass()) />

<cfset eventList.Add(theEvent.Init("1234", javacast("bigdecimal","30.2669444"), javacast("bigdecimal","-97.7427778"))) />
<cfset eventList.Add(theEvent.Init("1235", javacast("bigdecimal","30.2669444"), javacast("bigdecimal","-97.7427778"))) />

<cfset eventCollection = CreateObject(".net", "CoStar.Utilities.VideoWall.VideoWallEventActivityCollection", CoStarUtilities) />
<cfdump var="#eventList.ToArray()#" label="Items in eventList" />
<hr />
<cfdump var="#eventCollection#" label="eventCollection" />
<cfdump var="#eventList#" label="eventList" />

<cfset eventCollection.Set_Events(eventList) />

This gives me the following output:

enter image description here

As you can see from the screenshot, I can successfully add items to the list, I can get the ActivityCollection object that expects a List object, but calling the Set_Events method and passing the List throws the following error:

The Set_Events method was not found.

Either there are no methods with the specified method name and argument types 
or the Set_Events method is overloaded with argument types that ColdFusion cannot
decipher reliably. ColdFusion found 0 methods that match the provided arguments. 
If this is a Java object and you verified that the method exists, use the javacast 
function to reduce ambiguity.

The error occurred in C:/inetpub/scribble/VideoWall/index.cfm: line 17
15 :    <cfdump var="#eventList#" label="eventList" />
16 : 
17 :    <cfset eventCollection.Set_Events(eventList) />

So I now need help figuring out how to properly push this List into the Set_Events() method.

Upvotes: 2

Views: 423

Answers (1)

Leigh
Leigh

Reputation: 28873

(From the comments)

Believe it or not it is just an assembly path problem. You have to use both files in the assembly list, not just CoStarUtilities, ie:

 <cfset eventCollection = CreateObject(".net"
                 , "CoStar.Utilities.VideoWall.VideoWallEventActivityCollection"
                 , Paths ) />

Upvotes: 2

Related Questions