ColdFusion、WSDL和扩展的复杂类
我正在使用一个提供基本CRUD功能的Web服务。检索很容易,但是我在使用Create时遇到了问题(我还没有处理过Update或Delete函数) update函数只接受一个参数。这是WSDL中的一个zObject。然而,这是一个由我实际需要传递的内容扩展的通用对象。例如,如果我想创建一个帐户,我会传递一个扩展zObject定义的account对象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对象
我一辈子都不知道如何让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()