Привет. Пытаюсь сгенерировать java-классы по wsdl. Wsdl сохранен локально, причем абсолютный путь файла содержит символы кириллицы (например, c:\ц\wsdl.wsdl), возникает следующая проблема:
c:\ц>wsdl2java wsdl.wsdl
10.10.2011 17:37:54 org.apache.cxf.binding.corba.CorbaConduit prepare
SEVERE: Could not resolve target object
10.10.2011 17:37:54 org.apache.cxf.binding.corba.CorbaConduit prepare
SEVERE: Could not resolve target object
WSDLToJava Error: org.apache.cxf.wsdl11.WSDLRuntimeException: Fail to create wsd
l definition from : file:/c:/%d861/wsdl.wsdl
Caused by : null
Может, кто-нибудь знает, почему так происходит? И существует ли способ загрузить wsdl в такой ситуации (не гарантируя отсутствие неугодных символов в пути файла)?
apache cxf 2.4.2
win 7
Здравствуйте, Аноним, Вы писали:
А>Привет. Пытаюсь сгенерировать java-классы по wsdl. Wsdl сохранен локально, причем абсолютный путь файла содержит символы кириллицы (например, c:\ц\wsdl.wsdl), возникает следующая проблема:
А>А>c:\ц>wsdl2java wsdl.wsdl
А>10.10.2011 17:37:54 org.apache.cxf.binding.corba.CorbaConduit prepare
А>SEVERE: Could not resolve target object
А>10.10.2011 17:37:54 org.apache.cxf.binding.corba.CorbaConduit prepare
А>SEVERE: Could not resolve target object
А>WSDLToJava Error: org.apache.cxf.wsdl11.WSDLRuntimeException: Fail to create wsd
А>l definition from : file:/c:/%d861/wsdl.wsdl
А>Caused by : null
А>
А>Может, кто-нибудь знает, почему так происходит? И существует ли способ загрузить wsdl в такой ситуации (не гарантируя отсутствие неугодных символов в пути файла)?
А>apache cxf 2.4.2
А>win 7
Может стоит генерацию производить посредством *.cmd файлов. Сам *.cmd предварительно надо преобразовать в кодировку 866 (пусть эта кодировка сеанса ms-dos).
Здравствуйте, Blazkowicz, Вы писали:
B>Здравствуйте, Аноним, Вы писали:
А>>Может, кто-нибудь знает, почему так происходит? И существует ли способ загрузить wsdl в такой ситуации (не гарантируя отсутствие неугодных символов в пути файла)?
B>Скачать исходники и подебажить. Во-первых он зачем-то прогнал его через URLEncode. Во-вторых получится очень странный код %d861. Это никак не ц даже в Unicode.
B>Ну и в третих он почему-то упал с NPE вместо внятного исключения. Велкам, как говорится, в опенсорс.
Символы кодируются следующим образом:
char ch = b.charAt(x);
if (isExcluded(ch)) {
try {
byte[] bytes = Character.toString(ch).getBytes("UTF-8");
b.setCharAt(x++, '%');
for (int y = 0; y < bytes.length; y++) {
b.insert(x++, HEX_DIGITS.charAt((bytes[y] & 0xFF) >> 4));
b.insert(x, HEX_DIGITS.charAt(bytes[y] & 0x0F));
}
} catch (UnsupportedEncodingException e) {
//should not happen
}
Резолверы ресурсов в CXF вроде бы расширяемы, так что проблема устраняется написанием своего собственного резолвера, выполняющего обратное преобразование. Но непонятно, в чем смысл такого кодирования?