我创建了一个 Java-AXIs2 Web 服务,它返回一个 java 对象(用户定义的类)。我尝试使用它在 Coldfusion 上访问它
<cfset wsObj=createobject("webservice","http://localhost:8080/FFMpegHelperServices/services/TranscodeVideoFileFactoryWS?wsdl")>
当我尝试访问此 wsObj 并执行一些操作时,出现以下错误
Cannot perform web service invocation getTranscodeVideoFile. The fault returned when invoking the web service operation is:<br> <pre>AxisFault faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException faultSubcode: faultString: org.xml.sax.SAXException: No deserializer for {http://www.w3.org/2001/XMLSchema}anyType faultActor: faultNode: faultDetail: {http://xml.apache.org/axis/}stackTrace:org.xml.sax.SAXException: No deserializer for {http://www.w3.org/2001/XMLSchema}anyType at org.apache.axis.encoding.ser.BeanDeserializer.onStartChild(BeanDeserializer.java:314) at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035) at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165) at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141) at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:236) at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384) at org.apache.axis.client.Call.invoke(Call.java:2448) at org.apache.axis.client.Call.invoke(Call.java:2347) at org.apache.axis.clien... ''</pre> <br>The error occurred on line 34.
任何人都有办法处理这个问题。
Webservice 类如下所示
public class TranscodeVideoFileFactoryWS {
private TranscodeVideoFile[] temp = new TranscodeVideoFile[1];
public String getTranscodeVideoFile() {
return "nasir";
}
}
我想访问正在返回的类。
最佳答案
问题的关键隐藏在错误的这一部分中:
No deserializer for
您尝试使用的网络服务正在使用自定义数据类型; Web 服务很有可能需要一个参数...或者返回一个值...这是 CF 不理解的变量类型(例如自定义类)。
不幸的是,要解决此问题,您必须更深入地了解 Web 服务的内部,并了解是否可以在您的端实现这些自定义类型。
--编辑--
根据注释中对 Java 类的描述,初始化时会创建一个私有(private)变量:
private TranscodeVideoFile[] temp = new TranscodeVideoFile[1];
虽然与您的方法调用没有直接关系,但它正在作为初始 CreateObject() 的一部分创建,因此尝试在后续的对象调用中以某种身份进行维护。不幸的是,该类是自定义的,CF 不知道,如果您继续沿着此开发路径,将生成反序列化器错误。
有一个解决方案......但在这种情况下还需要做“正确的事情”。
解决方案
手动将编译好的类添加到Web服务 stub 目录中,这使得ColdFusion能够识别它们,这样当您调用Web服务上的方法时,ColdFusion就知道如何处理这些类,并序列化/适本地反序列化它们。
我用了this process使用 Netsuite API 几个月,图片来源:Jeremy Gibbens。您还需要对允许临时生成 stub 的 ColdFusion 工具进行一些研究——该工具是 wsdl2java。
Dated article on Wsdl2Java ,但仍然相关。
“正确的事情”
如果可以的话,不要通过 SOAP 使用自定义类型。如果您可以控制包装 FFMpeg Helper 对象的代码,并且正在为服务本身做出贡献,则不要编写任何处理自定义类的代码。使用 ColdFusion 理解的类型。
关于java - 访问 Java Web 服务时出现 Coldfusion 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8260301/