OSB java callout функция - Прехвърляне на XmlAnyTypeImpl към String

Опитвам се да създам функция за извикване на Java в OSB (версия 11.1.3), за да декодирам URL адреса. Мога да използвам java.net.URLDecoder.decode(data, "UTF-8"); в програмата, но OSB функцията дава по-долу грешка (когато типът на въвеждане и връщане е String)

<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, което трябва да бъде преобразувано в нещо друго (низ, int, boolean и т.н.). Вероятно можете просто да промените това, което предавате на Java callout, като използвате някаква форма на XS конструкторите:

XS конструктори

Java Callout

person Nick Klauer    schedule 13.06.2014
comment
Можете ли просто да погледнете грешката? Това се случи, когато предадох String и върнах String. - person rinuthomaz; 16.06.2014
comment
Използвахме XS Constructors: в ​​OSB конзолата, но все още получаваме същата грешка. - person rinuthomaz; 16.06.2014
comment
Сега получавам ‹Предупреждение› ‹Сокет› ‹BEA-000449› ‹Затваряне на сокет, тъй като няма данни, прочетени от него на 10.232.24.59:61,669 по време на конфигурираното време за изчакване на неактивност от 5 секунди› ‹16 юни 2014 г. 11:49:34 ч. UTC› ‹Грешка› ‹ОСБ Трансформация› ‹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
Ако погледнете документите, Java методите могат да бъдат само малко подмножество от типове и XmlAnyTypeImpl не е един от тях. Връщайки се към първоначалния ми отговор, всъщност извличате ли text() от възел (напр. $body/node/node/text()), или просто сляпо предавате xs:string() на някакъв възел, надявайки се той да преобразува вашите неща в правилното нещо? - person Nick Klauer; 16.06.2014
comment
Уважаеми Ник, В OSB имаме случай, че трябва да предадем URL към изходящ, но URL адресът е кодиран с java.net.Encode, така че опитах Decodng с java.net.Decode с java callout. Така че създадох pgm и с двете input&return type r String след това получи грешката (спомената в queston-line 4). Като разгледах грешката, разбрах, че въвеждането трябва да бъде във формат XmlAnyTypeImpl. Така че програмата ми се промени (споменато във въпроса) с вход XmlAnyTypeImpl .Сега получавам стойност от тип com.bea.wli.sb.context.impl.EndpointTypeImpl' не може да преобразува към .XmlAnyTypeImpl'.Поставяне на URL, надявайки се, че преобразува с метод - person rinuthomaz; 17.06.2014
comment
Когато премина към OSB изходящ - ‹con:reason›Неуспешно задаване на стойността на контекстната променлива изходящ. Стойността трябва да бъде екземпляр на {bea.com/wli/sb/context}крайна точка .‹/con:reason› - person rinuthomaz; 17.06.2014