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

时间:2011-11-24 16:49:31

标签: java coldfusion axis2

我创建了一个Java-AXIs2 webservice,它返回一个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";
    }

}

我想访问正在返回的类。

1 个答案:

答案 0 :(得分:2)

您的问题的关键隐藏在错误的这一部分中:

No deserializer for

您尝试使用的Web服务正在使用自定义数据类型; web服务很可能需要参数...或者返回一个值...这是CF不理解的一种变量(比如自定义类)。

不幸的是,要解决此问题,您必须深入了解Web服务的内容,并了解您是否可以在您的最终实现这些自定义类型。

- 编辑 -

根据注释中Java类的描述,初始化时,私有var被实例​​化:

private TranscodeVideoFile[] temp = new TranscodeVideoFile[1];

虽然与方法调用没有直接关系,但 是作为初始CreateObject()的一部分创建的,因此,我试图在后面的对象调用中以某种身份维护它。不幸的是,该类是自定义的并且对于CF是未知的,并且如果继续沿着这个开发路径继续,则会产生反序列化器错误。

有一个解决方案......但在这种情况下还有一个“正确的事”。

<强>解决方案

将编译后的类添加到webservice存根目录手动,这使得ColdFusion可以识别它们,这样当您在Web服务上调用方法时,ColdFusion知道如何处理类,并序列化/适当地反序列化它们。

我在使用Netsuite API时使用this process几个月,信用:Jeremy Gibbens。您还需要对允许临时生成存根的ColdFusion工具进行一些研究 - 该工具是wsdl2java。

Dated article on Wsdl2Java,但仍然相关。

“正确的事”

如果可以,请不要使用SOAP上的自定义类型。如果您可以控制包装FFMpeg Helper对象的代码,并且正在为服务本身做出贡献 - 请不要编写任何处理自定义类的代码。使用ColdFusion理解的类型。

ColdFusion-compatible datatypes for use in Web Services