Ошибка Coldfusion при доступе к веб-сервису Java - PullRequest
0 голосов
/ 24 ноября 2011

Я создал один веб-сервис Java-AXIs2, который возвращает объект Java (определенный пользователем класс). Я пытаюсь получить доступ к нему на Coldfusion с помощью этого

<cfset wsObj=createobject("webservice","http://localhost:8080/FFMpegHelperServices/services/TranscodeVideoFileFactoryWS?wsdl")>

Когда я пытаюсь получить доступ к этому wsObj и выполнить некоторые операции, я получаю следующую ошибку

<code>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... ''

Ошибка произошла в строке 34.

У любого есть идея, как с этим справиться.

Класс веб-сервиса выглядит следующим образом

public class TranscodeVideoFileFactoryWS {

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

    public String getTranscodeVideoFile() {
        return "nasir";
    }

}

Я хочу получить доступ к тому классу, который возвращается.

1 Ответ

2 голосов
/ 24 ноября 2011

Ключ к вашей проблеме скрыт в этой части ошибки:

No deserializer for

Веб-сервис, который вы пытаетесь использовать, работает с пользовательскими типами данных; очень вероятно, что веб-сервис либо потребует аргумент ... либо вернет значение ... это тип переменной, которую CF не понимает (скажем, пользовательский класс).

К сожалению, чтобы решить эту проблему, вам придется глубже вникнуть в суть веб-сервиса и выяснить, сможете ли вы реализовать эти пользовательские типы на своем конце.

- редактировать -

На основании описания вашего Java-класса в комментарии, когда он инициализируется, устанавливается частная переменная:

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

, хотя он и не имеет прямого отношения к вашему вызову метода, он создается как часть вашего начального CreateObject (), и, следовательно, пытается поддерживать меня в некоторой степени в последующих вызовах объектов. К сожалению, этот класс является нестандартным и неизвестным для CF, и он будет генерировать ошибку десериализатора, если вы продолжите идти по этому пути разработки.

Есть решение ... но в этом случае есть "правильная вещь".

Решение

Добавьте скомпилированные классы в каталог заглушек веб-службы вручную , что позволяет ColdFusion знать о них, так что при вызове методов веб-службы ColdFusion знает, как обрабатывать классы, и сериализовать / десериализовать их соответственно.

Я использовал этот процесс несколько месяцев, работая с Netsuite API, кредит: Джереми Гиббенс. Вы также захотите провести исследование инструмента ColdFusion, который позволяет создавать заглушки ad-hoc - это инструмент wsdl2java.

Дата статьи на Wsdl2Java , но, тем не менее, актуальна.

"Правильное"

Если вы можете, не работайте с пользовательскими типами через SOAP. Если у вас есть контроль над кодом, который обертывает объекты FFMpeg Helper и вносит свой вклад в сам сервис - не пишите код, который имеет дело с пользовательскими классами. Работайте с типами, понятными ColdFusion.

ColdFusion-совместимые типы данных для использования в веб-службах .

...