从web服务

时间:2015-05-21 19:11:41

标签: coldfusion

我想从作为Web服务使用的cfc调用cfc。 Web服务只是将状态通知返回给调用者,但是我需要启动另一个cfc以启动一些打开ftp的进程获取文件并将其下载到我们的服务器。目前我收到此错误。 动作GetFile 原因550无法打开文件。 细节错误:550无法打开文件。 。 消息FTP GetFile操作期间发生错误。打开文件。

当我直接从url调用进程cfc或从另一个页面调用时,它工作正常。任何帮助将不胜感激。

网络服务代码:

    <cfargument name="FileName" required="yes" type="string">
    <cfargument name="BatchNumber" required="yes" type="numeric">
    <cfargument name="LOGIN_USERID" required="yes" type="string">
    <cfargument name="LOGIN_PASSWORD" required="yes" type="string">


    <cfset comparison = Compare(LOGIN_PASSWORD, "xxxxxxx")>

    <cfif (LOGIN_USERID EQ "myid") AND (comparison EQ 0)>

        <cfset xmlDoc = XmlNew()>
        <cfset xmlDoc.XMLRoot = XMLElemNew(xmlDoc,"batchfiles")>
        <cfset xmlDoc.batchfiles.XmlChildren[1] = XmlElemNew(xmlDoc,"batch")>
        <cfset arrayappend(xmlDoc.batchfiles.XmlChildren[1].xmlChildren, XmlElemNew(xmlDoc,"batchnumber"))>
        <cfset xmlDoc.batchfiles.XmlChildren[1].batchnumber.XMLText="#batchnumber#">
        <cfset arrayappend(xmlDoc.batchfiles.XmlChildren[1].xmlChildren, XmlElemNew(xmlDoc,"filename"))>
        <cfset xmlDoc.batchfiles.XmlChildren[1].filename.XMLText="#filename#">
        <cfset arrayappend(xmlDoc.batchfiles.XmlChildren[1].xmlChildren, XmlElemNew(xmlDoc,"status"))>
        <cfset xmlDoc.batchfiles.XmlChildren[1].status.XMLText="Notification Received OK">



        <cfinvoke component="ImportRCMOrders" method="GetRCMOrderFiles">
            <cfinvokeargument name="FileName" value="#filename#">
            <cfinvokeargument name="BatchNumber" value="#batchnumber#">
        </cfinvoke>


        <cfreturn xmlDoc>   


    <cfelse>

        <cfoutput>Unauthorized Access. Please check username / password and ty again.</cfoutput>
        <cfabort>

    </cfif>

完整错误: 动作GetFile 原因550无法打开文件。 细节错误:550无法打开文件。 。 消息FTP GetFile操作期间发生错误。 StackTrace coldfusion.tagext.net.FtpHandler $ FtpOperationException:FTP GetFile操作期间发生错误。 at coldfusion.tagext.net.FtpHandler.checkError(FtpHandler.java:189)at coldfusion.tagext.net.FtpHandler.getFile(FtpHandler.java:682)at coldfusion.tagext.net.FtpTag.doStartTag(FtpTag.java:763) )在coldfusion.runtime.UDFMethod.invoke的cfImportRCMOrders2ecfc184096832 $ funcGETRCMORDERFILES.runFunction(C:\ inetpub \ wwwroot \ imarkwebservice \ rcm \ dynamic \ ImportRCMOrders.cfc:56)的coldfusion.runtime.CfJspPage._emptyTcfTag(CfJspPage.java:2991) (UDFMethod.java:487)coldfusion.runtime.UDFMethod $ ReturnTypeFilter.invoke(UDFMethod.java:420)at coldfusion.runtime.UDFMethod $ ArgumentCollectionFilter.invoke(UDFMethod.java:383)at coldfusion.filter.FunctionAccessFilter.invoke( FunctionAccessFilter.java:95)在coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:334)在coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:533)在coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:648 )在coldfusion.runtime.CfJspPage._invoke(CfJs)的coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:457) pPage.java:2424)在coldfusion上的cfcfc_init2ecfm454010022.runPage(C:\ inetpub \ wwwroot \ imarkwebservice \ rcm \ dynamic \ cfc_init.cfm:14)的coldfusion.tagext.lang.InvokeTag.doEndTag(InvokeTag.java:399)。 runtime.CfJspPage.invoke(CfJspPage.java:246)在coldfusion.tagext.lang.IncludeTag.handlePageInvoke(IncludeTag.java:736)在coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:572)在coldfusion.filter .ffincludeFilter.invoke(CfincludeFilter.java:65)at coldfusion.filter.IpFilter.invoke(IpFilter.java:45)at coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:487)at coldfusion.filter.RequestMonitorFilter.invoke( RequestMonitorFilter.java:42)at coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40)at coldfusion.filter.PathFilter.invoke(PathFilter.java:142)coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:94) )coldfusion.filter.BrowserDebugFilter.invoke(BrowserDebugFilter.java:78)at coldfusion.filter.ClientScopePersistenceFilter.invoke(Client ScopePersistenceFilter.java:28)在coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38)在coldfusion.filter.NoCacheFilter.invoke(NoCacheFilter.java:58)在coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38 )在coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22)在coldfusion.filter.CachingFilter.invoke(CachingFilter.java:62)在coldfusion.CfmServlet.service(CfmServlet.java:219)在coldfusion.bootstrap.BootstrapServlet 。服务(BootstrapServlet.java:89)在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)处的ColdFusion org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)。 monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42)位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)的coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46) .apache.catalina.core.ApplicationFilter Chain.doFilter(ApplicationFilterChain.java:208)在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)在组织.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve) .java:102)org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:422)org.apache.coyote。 org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:607)中的ajp.AjpProcessor.process(AjpProcessor.java:199)位于org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint。 java:314)at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)at java.util.concurrent.ThreadPoolExecuto r $ Worker.run(未知来源)atg.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run(Unknown Source)

GetRCMOrderFiles:

                 

    <!--- Open FTP connection --->
    <cfftp connection ="FTPRequest"
        action ="OPEN"
        username ="xxxxxx"
        password ="xxxx"
        server ="ftp.server.com"
        stopOnError ="Yes" 
        timeout="36000">


    <!--- List directories --->
    <cfftp connection = "FTPRequest"
        action = "LISTDIR"
        stopOnError = "Yes"
        name = "ftpQuery"            
        directory = "#arguments.ftpOrdersDir#"> 


    <!--- Download ftp files --->
    <cfif ftpQuery.recordcount GT 0>
        <cfif ftpQuery.Name EQ  arguments.filename>
            <cfset extension = LCase(listLast(arguments.filename,".")) >
            <cfif extension EQ 'csv'>

                <cftry>
                    <!--- Download ftp files --->
                    <cfftp connection = "FTPRequest"
                        action = "GetFile"
                        name = "dlFiles" 
                        remotefile="#ftpOrdersDir##arguments.filename#" 
                        localfile="#ExpandPath('/mydir/dynamic/orders/'& arguments.filename)#" 
                        failifexists="no" 
                        stoponerror="yes"> 

                    <!--- Rename files in ftp processed dir --->
                    <cfftp connection = "FTPRequest"
                        action = "RENAME"
                        existing="#arguments.ftpOrdersDir##arguments.filename#"
                        new="#arguments.ftpOrdersDir##arguments.filename#.#DateFormat(Now(), 'mmddyyyy')##Hour(Now())##Minute(Now())##Second(Now())#"
                        stopOnError = "Yes">

                <cfcatch type="any">
                    <cfmail type="html" 
                        to="email@myemailacct.com" 
                        from="FTPProcess@myemailacct.com" 
                        subject="FTP Error"> 
                        <p> An error occurred on #DateFormat( Now(), "mmm d, yyyy" )# at #TimeFormat( Now(), "hh:mm TT" )# </p> 
                        Error Message: #cfcatch.message#<br> 
                        Error Detail: #cfcatch.detail#<br> 
                        Error Location: #GetBaseTemplatePath()#<br>
                        <cfdump var="#cfcatch#">
                        </cfmail>
                    <cfabort>
                </cfcatch>
                </cftry>
            </cfif>

这是来自第一个被称为Web服务的函数。   结构:   BATCHNUMBER 35506   FILENAME batchfile_35506.csv   LOGIN_PASSWORD密码   LOGIN_USERID用户标识

结构   BATCHNUMBER 35506   FILENAME batchfile_35506.csv  FTPORDERSDIR / Dir / 35506 /

1 个答案:

答案 0 :(得分:1)

来自FTP客户端的550意味着该文件或目录不存在。检查您的路径是否正确以及该路径中是否存在该文件,以及您在(在FTP调用中)登录的用户是否具有此文件的权限。

我假设GetRCMOrderFiles()函数正在尝试从FTP检索文件?

您应该将这些作为例外捕获,并且可能在执行get之前检查该文件是否存在。