ColdFusion、WSDL和扩展的复杂类

ColdFusion、WSDL和扩展的复杂类,coldfusion,web-services,wsdl,Coldfusion,Web Services,Wsdl,我正在使用一个提供基本CRUD功能的Web服务。检索很容易,但是我在使用Create时遇到了问题(我还没有处理过Update或Delete函数) update函数只接受一个参数。这是WSDL中的一个zObject。然而,这是一个由我实际需要传递的内容扩展的通用对象。例如,如果我想创建一个帐户,我会传递一个扩展zObject定义的account对象 我一辈子都不知道如何让CF允许我这么做 ColdFusion为其web服务功能实现Apache Axis引擎。 不幸的是,CF没有充分利用SOAP对象

我正在使用一个提供基本CRUD功能的Web服务。检索很容易,但是我在使用Create时遇到了问题(我还没有处理过Update或Delete函数)

update函数只接受一个参数。这是WSDL中的一个zObject。然而,这是一个由我实际需要传递的内容扩展的通用对象。例如,如果我想创建一个帐户,我会传递一个扩展zObject定义的account对象


我一辈子都不知道如何让CF允许我这么做

ColdFusion为其web服务功能实现Apache Axis引擎。 不幸的是,CF没有充分利用SOAP对象模型并允许 CF开发人员可以“新建”组成服务的不同对象(或将其子类化)

谢天谢地,我们可以为此做点什么。当您第一次访问WSDL时, Axis生成一组存根对象。这些是包含 对象基本属性的getter和setter。我们需要使用这些 存根来构建我们的对象

然而,为了使用这些存根,我们需要将它们添加到ColdFusion中 类路径:

Step 1) Access the WSDL in any way with coldfusion.
Step 2) Look in the CF app directory for the stubs. They are in a "subs"
        directory, organized by WSDL.like:
        c:\ColdFusion8\stubs\WS\WS-21028249\com\foo\bar\
Step 3) Copy everything from "com" on down into a new directory that exists in
        the CF class path. or we can make one like:
        c:\ColdFusion8\MyStubs\com\foo\bar\
Step 4) If you created a new directory add it to the class path.
        A, open CF administrator
        B. click on Server settings >> Java and JVM
        C. add the path to "ColdFusion Class Path". and click submit
        D. Restart CF services.
Step 5) Use them like any other java object with <CFObject /> or CreateObject()
        MyObj = CreateObject("java","com.foo.bar.MyObject");
        Remember that you can CFDump the object to see the available methods.
        <cfdump var="#MyObj#" />
步骤1)使用coldfusion以任何方式访问WSDL。
步骤2)在CF应用程序目录中查找存根。他们在“潜艇”里
目录,由WSDL.like组织:
c:\ColdFusion8\stubs\WS\WS-21028249\com\foo\bar\
步骤3)将“com”上的所有内容复制到中存在的新目录中
CF类路径。或者我们可以做一个这样的:
c:\ColdFusion8\MyStubs\com\foo\bar\
步骤4)如果创建了新目录,请将其添加到类路径。
A、 打开CF管理员
B.单击服务器设置>>Java和JVM
C.将路径添加到“ColdFusion类路径”。然后单击提交
D.重新启动CF服务。
步骤5)使用它们就像使用或CreateObject()的任何其他java对象一样
MyObj=CreateObject(“java”、“com.foo.bar.MyObject”);
请记住,您可以转储对象以查看可用的方法。
您的帐户对象应该在存根中。如果出于某种原因需要创建它,则需要在新的Java类文件中创建它

一般来说,在使用这么多Java时,cfscript是一个不错的选择

最后,代码如下所示:

<cfscript>
    // create the web service
    ArgStruct = StructNew();
    ArgStruct.refreshWSDL = True;
    ArgStruct.username = 'TestUserAccount';
    ArgStruct.password = 'MyP@ssw0r3';
    ws = createObject("webservice", "http://localhost/services.asmx?WSDL",ArgStruct);


        account = CreateObject("java","com.foo.bar.Account");
        account.SetBaz("hello world");
        ws.Update(account);
</cfscript>

//创建web服务
ArgStruct=StructNew();
ArgStruct.refreshWSDL=True;
ArgStruct.username='TestUserAccount';
ArgStruct.password=MyP@ssw0r3';
ws=createObject(“webservice”http://localhost/services.asmx?WSDL“,ArgStruct);
account=CreateObject(“java”、“com.foo.bar.account”);
account.SetBaz(“你好世界”);
ws.Update(帐户);

ColdFusion为其web服务功能实现Apache Axis引擎。 不幸的是,CF没有充分利用SOAP对象模型并允许 CF开发人员可以“新建”组成服务的不同对象(或将其子类化)

谢天谢地,我们可以为此做点什么。当您第一次访问WSDL时, Axis生成一组存根对象。这些是包含 对象基本属性的getter和setter。我们需要使用这些 存根来构建我们的对象

然而,为了使用这些存根,我们需要将它们添加到ColdFusion中 类路径:

Step 1) Access the WSDL in any way with coldfusion.
Step 2) Look in the CF app directory for the stubs. They are in a "subs"
        directory, organized by WSDL.like:
        c:\ColdFusion8\stubs\WS\WS-21028249\com\foo\bar\
Step 3) Copy everything from "com" on down into a new directory that exists in
        the CF class path. or we can make one like:
        c:\ColdFusion8\MyStubs\com\foo\bar\
Step 4) If you created a new directory add it to the class path.
        A, open CF administrator
        B. click on Server settings >> Java and JVM
        C. add the path to "ColdFusion Class Path". and click submit
        D. Restart CF services.
Step 5) Use them like any other java object with <CFObject /> or CreateObject()
        MyObj = CreateObject("java","com.foo.bar.MyObject");
        Remember that you can CFDump the object to see the available methods.
        <cfdump var="#MyObj#" />
步骤1)使用coldfusion以任何方式访问WSDL。
步骤2)在CF应用程序目录中查找存根。他们在“潜艇”里
目录,由WSDL.like组织:
c:\ColdFusion8\stubs\WS\WS-21028249\com\foo\bar\
步骤3)将“com”上的所有内容复制到中存在的新目录中
CF类路径。或者我们可以做一个这样的:
c:\ColdFusion8\MyStubs\com\foo\bar\
步骤4)如果创建了新目录,请将其添加到类路径。
A、 打开CF管理员
B.单击服务器设置>>Java和JVM
C.将路径添加到“ColdFusion类路径”。然后单击提交
D.重新启动CF服务。
步骤5)使用它们就像使用或CreateObject()的任何其他java对象一样
MyObj=CreateObject(“java”、“com.foo.bar.MyObject”);
请记住,您可以转储对象以查看可用的方法。
您的帐户对象应该在存根中。如果出于某种原因需要创建它,则需要在新的Java类文件中创建它

一般来说,在使用这么多Java时,cfscript是一个不错的选择

最后,代码如下所示:

<cfscript>
    // create the web service
    ArgStruct = StructNew();
    ArgStruct.refreshWSDL = True;
    ArgStruct.username = 'TestUserAccount';
    ArgStruct.password = 'MyP@ssw0r3';
    ws = createObject("webservice", "http://localhost/services.asmx?WSDL",ArgStruct);


        account = CreateObject("java","com.foo.bar.Account");
        account.SetBaz("hello world");
        ws.Update(account);
</cfscript>

//创建web服务
ArgStruct=StructNew();
ArgStruct.refreshWSDL=True;
ArgStruct.username='TestUserAccount';
ArgStruct.password=MyP@ssw0r3';
ws=createObject(“webservice”http://localhost/services.asmx?WSDL“,ArgStruct);
account=CreateObject(“java”、“com.foo.bar.account”);
account.SetBaz(“你好世界”);
ws.Update(帐户);

我同意对ColdFusion的批评,但是,发布的解决方案也不能很好地响应wsdl更改

谢天谢地,CF完全可以访问对象上的所有底层Java方法。这包括“反射”。虽然CreateObject不知道存根对象,但创建Web服务的类加载器知道


ws=createObject(“webservice”http://localhost/services.asmx?WSDL“,ArgStruct);
account=ws.getClass().getClassLoader().loadClass('com.foo.bar.account').newInstance();

我同意对ColdFusion的批评,但是,发布的解决方案也不能很好地响应wsdl更改

谢天谢地,CF完全可以访问对象上的所有底层Java方法。这包括“反射”。虽然CreateObject不知道存根对象,但创建Web服务的类加载器知道


ws=createObject(“webservice”http://localhost/services.asmx?WSDL“,ArgStruct);
account=ws.getClass()