java - 访问 Java Web 服务时出现 Coldfusion 错误

标签 java coldfusion apache-axis

我创建了一个 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 理解的类型。

ColdFusion-compatible datatypes for use in Web Services .

关于java - 访问 Java Web 服务时出现 Coldfusion 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8260301/

相关文章:

java - 将 .tld 文件放在哪里,以便正确打包使用 maven2 生成的 JAR 文件?

java - 如何在 eclipselink 中禁用缓存

mysql - 数据截断: Incorrect datetime value - coldfusion

coldfusion - CF : Saving a Fusioncharts graph as an image to email it

web-services - SOAP 请求记录 Tomcat 7 Axis2

java - 部署网络服务

java - 更改来自 Websphere 的默认 axis2 Web 服务调用?

java - 清理 ThreadPoolExecutor 中的有界队列

使用 NLS_CHARACTERSET 为 WE8ISO8859P1 且 NLS_NCHAR_CHARACTERSET 为 AL16UTF16 且使用 ColdFusion 作为编程语言时出现 Oracle Unicode 问题

java - 在运行时在 java(android) 中存储敏感数据