【问题标题】:Coldfusion java.lang.NullPointerException: null consuming SOAP web servicesColdfusion java.lang.NullPointerException:使用 SOAP Web 服务的 null
【发布时间】:2012-09-04 19:59:39
【问题描述】:

什么可能导致 ColdFusion 在使用 Web 服务时抛出“java.lang.NullPointerException: null”错误?

对于任何其他计算机,Web 服务都存在并且可以完美运行。但是有一些关于 ColdFusion 的安装会导致错误。我尝试卸载并重新安装 IIS 和 ColdFusion,但均无济于事。

我什至在服务器上试过soapUI,效果很好。不确定这是否是 ColdFusion/IIS 问题。

使用或 CreateObject 发生

服务器操作系统:Windows Server 2008
CF 版本:9.0
IIS 版本:7.5

到目前为止,我已经用尽了所有的想法。任何帮助将不胜感激。

任何感兴趣的人的堆栈跟踪

在 cftest2ecfm526089628.runPage(C:\inetpub\wwwroot\....cfm:21) 在 cftest2ecfm526089628.runPage(C:\inetpub\wwwroot\.....cfm:21) java.lang.NullPointerException 在 org.apache.axis.client.Service.getEngineConfiguration(Service.java:801) 在 org.apache.axis.client.Service.getAxisClient(Service.java:143) 在 org.apache.axis.client.Service.(Service.java:152) 在 com.media.modules.ws.AcfwsServiceLocator.(AcfwsServiceLocator.java:12) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:513) 在 java.lang.Class.newInstance0(Class.java:355) 在 java.lang.Class.newInstance(Class.java:308) 在coldfusion.xml.rpc.XmlRpcServiceImpl$4.run(XmlRpcServiceImpl.java:372) 在 java.security.AccessController.doPrivileged(本机方法) 在coldfusion.xml.rpc.XmlRpcServiceImpl.registerWebService(XmlRpcServiceImpl.java:368) 在coldfusion.xml.rpc.XmlRpcServiceImpl.getWebService(XmlRpcServiceImpl.java:496) 在coldfusion.xml.rpc.XmlRpcServiceImpl.getWebServiceProxy(XmlRpcServiceImpl.java:450) 在coldfusion.xml.rpc.WebServiceProxyFactory.getProxy(WebServiceProxyFactory.java:22) 在coldfusion.runtime.ProxyFactory.getProxy(ProxyFactory.java:65) 在coldfusion.runtime.CFPage.createObjectProxy(CFPage.java:4949) 在coldfusion.runtime.CFPage.CreateObject(CFPage.java:4920) 在coldfusion.runtime.CFPage.CreateObject(CFPage.java:4861) 在coldfusion.runtime.CFPage.CreateObject(CFPage.java:4839) 在coldfusion.runtime.CFPage.CreateObject(CFPage.java:4796) 在 cftest2ecfm526089628.runPage(C:\inetpub\wwwroot\ACF\TestStreaming\test.cfm:21) 在coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:231) 在coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:416) 在coldfusion.filter.CfincludeFilter.invoke(CfincludeFilter.java:65) 在coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:363) 在coldfusion.filter.RequestMonitorFilter.invoke(RequestMonitorFilter.java:48) 在coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40) 在coldfusion.filter.PathFilter.invoke(PathFilter.java:87) 在coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:70) 在coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28) 在coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38) 在coldfusion.filter.NoCacheFilter.invoke(NoCacheFilter.java:46) 在coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38) 在coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22) 在coldfusion.filter.CachingFilter.invoke(CachingFilter.java:53) 在coldfusion.CfmServlet.service(CfmServlet.java:200) 在coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89) 在 jrun.servlet.FilterChain.doFilter(FilterChain.java:86) 在coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42) 在coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46) 在 jrun.servlet.FilterChain.doFilter(FilterChain.java:94) 在 jrun.servlet.FilterChain.service(FilterChain.java:101) 在 jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:106) 在 jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42) 在 jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:286) 在 jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:543) 在 jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:203) 在 jrunx.scheduler.ThreadPool$DownstreamMetrics.invokeRunnable(ThreadPool.java:320) 在 jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:428) 在 jrunx.scheduler.ThreadPool$UpstreamMetrics.invokeRunnable(ThreadPool.java:266) 在 jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)

【问题讨论】:

  • 您能否分享您的 ColdFusion 代码,该代码用于构建您的请求并调用 Web 服务?当您成功使用soapUI 时,是来自您的ColdFusion 服务器吗?
  • 我使用了<cfinvoke webservice="http://...?wsdl" refreshwsdl="true" method="demoMethod" returnvariable="aTemp"> <cfinvokeargument name="arg0" value="demoArg1"/> <cfinvokeargument name="arg1" value="demoArg2"/> <cfinvokeargument name="arg2" value="demoArg3"/> </cfinvoke><cfset ws = CreateObject("webservice","http://....:9091/wowzaserverws?wsdl")> 两种方法,结果相同。是的,soapUI 正在 ColdFusion 服务器上运行。
  • 听起来您的问题是可重现的,但我不得不警告您,我经历过intermittent errors 在 CF 上发布 SOAP Web 服务。在花了一年时间解决问题并通过 Adob​​e 支付支持票后,我们放弃并重写了 REST。如果你仍然可以切换到 REST,我推荐它。
  • 我们不会在 Coldfusion 中发布服务,只是尝试使用它。我们不能要求 Web 服务提供商更改为 REST。

标签: iis soap service coldfusion web


【解决方案1】:

放弃尝试在 ColdFusion 中正确调用 Web 服务。相反,我编写了一个小型soap 调用程序组件,它使用正确的soap 标头/调用向目标URL 发送请求。如果有人想要代码,它在下面。我仍然觉得它不起作用真的很奇怪,我什至在同一台服务器上检查了 ASP,它运行没有问题。

<cfcomponent namespace="soapLib">
    <cffunction name="soapRequest" returnType="string" returnFormat="plain" hint="Consume a SOAP webservice from the given URL with the given function and arguments.">
    <cfargument name="wsdlUrl" type="string" hint="URL of the web service to consume including ?wsdl at the end.">
    <cfargument name="serviceNs" type="string" hint="The namespace of the web service, needed to complete a webservice properly.">
    <cfargument name="funcName" type="string" hint="The function to call when consuming the web service.">
    <cfargument name="args" type="array" hint="The arguments to parse to the web service.">
    <cfset i=0>
    <cfset soapArgs = ''>
    <cfloop array="#args#" index="arg">
        <cfset soapArgs &= '<arg#i#>#arg#</arg#i#>'>
        <cfset i++>
    </cfloop>
    <cfset soap = '<?xml version="1.0" encoding="utf-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <SOAP-ENV:Body>
        <m:#funcName# xmlns:m="#serviceNs#">
            #soapArgs#
        </m:#funcName#>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>'>
        <cfhttp url="#wsdlUrl#" method="post">
            <cfhttpparam type="header" name="Content-Type" value="text/xml">
            <cfhttpparam type="header" name="SOAPAction" value="#funcName#">
            <cfhttpparam type="header" name="content-length" value="#len(soap)#">
            <cfhttpparam type="header" name="charset" value="utf-8">
            <cfhttpparam type="xml" name="message" value="#trim(soap)#">
        </cfhttp>
        <cfif not IsXML(cfhttp.fileContent)>
            <cfset return = false>
        <cfelse>
            <cfset xml = XmlParse(cfhttp.fileContent)>
            <cfset return = xml['S:Envelope']['S:Body']['ns2:#funcName#Response']['return']['XmlText']>
        </cfif>
        <cfreturn return>
    </cffunction>
</cfcomponent>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2011-05-16
    • 2016-11-01
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多