Функция выноски OSB java — преобразование XmlAnyTypeImpl в строку

Я пытаюсь создать функцию вызова java в OSB (версия 11.1.3) для декодирования URL-адреса. Я могу использовать java.net.URLDecoder.decode(data, "UTF-8"); в программе, но функция OSB выдает ошибку ниже (когда тип ввода и возврата - строка)

<Jun 11, 2014 7:43:30 AM UTC> <Error> <OSB Transform> <BEA-382516> <Failed to evaluate expression for callout to java method "public static java.lang.String com.help.sachinProject.ttttt.test(java.lang.String)". Argument index: 1, exception: Value of type 'org.apache.xmlbeans.impl.values.XmlAnyTypeImpl' cannot be type-cast to 'java.lang.String'>
<Jun 11, 2014 7:43:35 AM UTC> <Warning> <Socket> <BEA-000449> <Closing socket as no data read from it on 10.232.24.59:49,359 during the configured idle timeout of 5 secs>

Поэтому я должен как вводить, так и возвращать тип как XmlAnyTypeImpl . Как преобразовать String в XmlAnyTypeImpl (XmlAnyTypeImpl доступен в xmlbeans.jar)?

Вот моя новая программа

import org.apache.xmlbeans.impl.values.XmlAnyTypeImpl;
public class XMLFormatDecode {

XMLFormatDecode(){
super();
}

   public static String getValue(XmlAnyTypeImpl data)    
       {
       String decoded = java.net.URLDecoder.decode(data.toString(), "UTF-8");
       return decoded;                                         
       }


public static void main(String[] args) throws UnsupportedEncodingException {
new XMLFormatDecode();
System.out.println("Result main - "+XMLFormatDecode.getValue(null));
       }
}

будет ли XmlAnyTypeImpl.toString() работать?

Может ли кто-нибудь помочь мне преобразовать String в XmlAnyTypeImpl?


person rinuthomaz    schedule 13.06.2014    source источник


Ответы (1)


Ошибка возникает из-за того, что она не может передать XmlAnyType В ваш статический метод Java. Вы не указываете, что вы передаете методу Java, поэтому я могу только предположить, что вы неправильно приводите его к нужному типу. Он получает XmlAnyTypeImpl, который необходимо преобразовать во что-то другое (String, int, boolean и т. д.). Вероятно, вы можете просто настроить то, что вы передаете вызову Java, используя некоторую форму конструкторов XS:

Конструкторы XS

Выноска Java

person Nick Klauer    schedule 13.06.2014
comment
Может просто посмотреть на ошибку? Это произошло, когда я передал String и вернул String. - person rinuthomaz; 16.06.2014
comment
Мы использовали конструкторы XS: в консоли OSB, но по-прежнему получаем ту же ошибку. - person rinuthomaz; 16.06.2014
comment
Теперь получаю ‹Предупреждение› ‹Socket› ‹BEA-000449› ‹Закрытие сокета, так как из него не читаются данные на 10.232.24.59:61,669 в течение настроенного времени простоя в 5 секунд› ‹16 июня 2014 г., 11:49:34 UTC› ‹Ошибка› ‹OSB Transform› ‹BEA-382516› ‹Не удалось оценить выражение для вызова метода Java public static java.lang.String com.osb.java.callout.XMLFormatDecode.getValue(org.apache.xmlbeans.impl.values .XmlAnyTypeImpl). Индекс аргумента: 1, исключение: значение типа 'com.bea.wli.sb.context.impl.EndpointTypeImpl' не может быть приведено к 'org.apache.xmlbeans.impl.values.XmlAnyTypeImpl'› - person rinuthomaz; 16.06.2014
comment
Если вы посмотрите на документы, методы могут быть только небольшим подмножеством типов, и XmlAnyTypeImpl не является одним из них. Возвращаясь к моему первоначальному ответу, вы на самом деле получаете text() из узла (например, $body/node/node/text()) или просто вслепую передаете xs:string() какому-то узлу, надеясь, что он преобразует ваши вещи в правильные вещи? - person Nick Klauer; 16.06.2014
comment
Уважаемый Ник, В OSB у нас есть случай, когда мы должны передать URL-адрес для исходящего трафика, но URL-адрес закодирован с помощью java.net.Encode, поэтому я попытался расшифровать с помощью java.net.Decode с помощью java callout. Поэтому я создал pgm с обоими input&return type r String затем получил ошибку (упомянутую в строке 4 вопроса). Посмотрев на ошибку, я узнал, что ввод должен быть в формате XmlAnyTypeImpl. Итак, моя программа изменилась (упомянута в вопросе) с вводом XmlAnyTypeImpl .Теперь я получаю значение типа com.bea.wli.sb.context.impl.EndpointTypeImpl 'не может привести к типу .XmlAnyTypeImpl'. Pasing URL, надеясь, что он преобразуется с помощью метода - person rinuthomaz; 17.06.2014
comment
Когда я перехожу к исходящему OSB - ‹против:причина›Не удалось установить значение исходящей переменной контекста. Значение должно быть экземпляром {bea.com/wli/sb/context}конечной точки. .‹/con:причина› - person rinuthomaz; 17.06.2014