Дошли руки. Написал 2 давно задуманные статьи:
1. Об интеграции Mapviewer с MS Virtual Earth
2. О поддержке системы координат World mercator (54004) в Oracle Spatial
Читать далее...
Дошли руки. Написал 2 давно задуманные статьи:
1. Об интеграции Mapviewer с MS Virtual Earth
2. О поддержке системы координат World mercator (54004) в Oracle Spatial
Недавно компания Oracle опубликовала FAQ по Mapviewer. Его русская версия доступна здесь.
It is not possible to invoke a Web Service with the OdiInvokeWebService tool when using Designer with Java 1.6. Invoking an operation throws the following exception :
java.lang.AbstractMethodError:
org.apache.crimson.tree.XmlDocument.getXmlStandalone()Z
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.setDocumentInfo(DOM2TO.jav a:373)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:127)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:94)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity (TransformerImpl.java:663)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:709)
и т.д.
Проблема решается установкой более ранней версии JDK (1.5) или upgradом на более новую версию ODI. Эта новая версия ODI либо 10.1.3.5, либо 11g :) А ее еще нет. По крайней мере я не нашел :))
В Oracle Data integrator есть интересная возможность по расширую функциональности – OpenTool. Эта возможность позволяет на Java написать то, что еще не реализовано в ODI.
Достался этот функционал от старого доброго Sunopsis. Oracle потихоньку начал перекраивать функционал под свои нужды. Соответственно возникают коллизии. Вот на одну такую коллизию наткнулся.
Я пытался запустить пример, поставляемый в дистрибутиве – SimpleMessageBox. Класс написан на старой версии Sunopsis и там же скомпилирован. В настоящий момент ряд классов переименованы – в частности такого класса как com.sunopsis.sdk.opentools.SnpsOpenToolAbstract не стало, а появился класс oracle.odi.sdk.opentools.OpenToolAbstract. Как результат – при попытке загрузить OpenTool из класса SimpleMessageBox получаем ошибку:
java.lang.NoClassDefFoundError: com/sunopsis/sdk/opentools/SnpsOpenToolAbstract
Open Tool not acrivated. Your Open Tool references a class not found
Для того, чтобы решить проблему придется перекомпилировать класс SimpleMessageBox.
Для этого
1. Откроем файл $ODI_HOME/demo/plugins/src/com/myCompany/sunopsisOpenTools/SimpleMessageBox.java и делаем глобальную замену фразы "com.sunopsis.sdk.opentools" на фразу "oracle.odi.sdk.opentools". Кроме того, также глобальной заменой следует заменить "Snps" на "".
2. Компилируем класс SimpleMessageBox из каталога $ODI_HOME/demo/plugins/src/com/myCompany/sunopsisOpenTools/
/opt/jdk1.6.0_11/bin/javac –cp /u01/app/oracle/product/10.3.0.4/oracledi/lib/sunopsis.zip SimpleMessageBox.java
3. Копируем $ODI_HOME/demo/plugins/src/com/myCompany/sunopsisOpenTools/SimpleMessageBox.class в каталог $ODI_HOME/demo/plugins/bin/com/myCompany/sunopsisOpenTools/
Дальше можно делать по инструкции.
Борьба с детскими болезнями поддержки русского языка уже начинает надоедать. Связано это в первую очередь с исходной заточенностью многих технологий именно на ASCII символы, ну или, в крайнем случае, на западноевропейскую кодировку.
Очередная проблема с которой я столкнулся – это передача параметров на JSP страницу.
Начал я вот с такого куска кода JSP
<%@ page contentType="text/html;charset=UTF-8" %>
<% query2 = request.getParameter("query_1"); %>
<form action="jview1.jsp" name="jview" method="post">
query 2: <TEXTAREA style="font-size:28px; font-family: arial, helvetica, sans-serif;" cols=40 name=query_2 rows=6><%=(query2!=null)?query2:""%></TEXTAREA>
</form>
Собственно, что может быть проще. Запостили страничку в UTF-8 с текстовым полем query_2, вытащили его из запроса и обратно затянули в это поле.
А вот и не просто. Вводим в поле текст следующего содержания
“select * from moscow where name='Город'”.
А в ответ получаем
“select * from moscow where name='Город'”.
Для решения этоq проблемы, в конце концов, пришел к вот такому коду (может не оптимальный и не универсальный, но в моем случае работает):
String query1_temp = request.getParameter( "query_1" );
query1 =query1_temp==null?null:new String(query1_temp.getBytes("ISO-8859-1"),response.getCharacterEncoding());
Если кто-то сделал по-другому – делитесь. :)