Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Апплеты > Не работает Axis в апплете


Автор: access 22.1.2007, 17:05
Всем здравствуйте.
Проблема такая: Есть апплет, в нём - запрос к БД чере Tomcat+Axis. Когда запускаюсь под IDE(JIDEA), всё прекрасно работает. Пакую исходники в джар, рядом кладу все необходимые либы,
манифест файл такой:
Manifest-Version: 1.0
Class-Path: axis.jar models.jar swingx-2006_10_27.jar
рисую html:
Код

<html>
  <head>
    <title>Demo</title>
  </head>
  <body>
      <applet code=gui archive="demo.jar"
          width=1000 height=600>
      </applet>
  </body>
</html>
 
запускаю апплет. Он запускается без проблем, но при попытке получить данные от БД сыплет:

Exception in thread "AWT-EventQueue-2" java.lang.ExceptionInInitializerError
at org.apache.commons.discovery.log.DiscoveryLogFactory._newLog(DiscoveryLogFactory.java:94)
at org.apache.commons.discovery.log.DiscoveryLogFactory.<clinit>(DiscoveryLogFactory.java:57)
at org.apache.commons.discovery.jdk.JDK12Hooks.<clinit>(JDK12Hooks.java:35)
at org.apache.commons.discovery.jdk.JDKHooks.<clinit>(JDKHooks.java:29)
at org.apache.commons.discovery.tools.DiscoverSingleton.find(DiscoverSingleton.java:366)
at org.apache.commons.discovery.tools.DiscoverSingleton.find(DiscoverSingleton.java:332)
at org.apache.axis.components.logger.LogFactory$1.run(LogFactory.java:45)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.axis.components.logger.LogFactory.getLogFactory(LogFactory.java:41)
at org.apache.axis.components.logger.LogFactory.<clinit>(LogFactory.java:33)
at org.apache.axis.handlers.BasicHandler.<clinit>(BasicHandler.java:43)
at org.apache.axis.client.Service.getAxisClient(Service.java:104)
at org.apache.axis.client.Service.<init>(Service.java:113)
at common.interfaces.WebComm.runQuery(WebComm.java:98)
at gui.getTreeOrders(gui.java:612)
at gui$5.actionPerformed(gui.java:1639)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.security.AccessControlException: access denied (java.util.PropertyPermission org.apache.commons.discovery.log.level read)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPropertyAccess(Unknown Source)
at java.lang.System.getProperty(Unknown Source)
at org.apache.commons.discovery.log.SimpleLog.<clinit>(SimpleLog.java:108)
... 39 more

В чём тут дело - подскажите. Если б либы были не видны - апплет вообще не загрузился бы (хотя бы из-за того же swingx-2006_10_27.jar, который появляется на форме сразу при старте). На одном из форумов многозначительно подсказали "Подпиши джарники", и убежали ). Теперь сижу, думаю, что имелось в виду.

Автор: cromm3 22.1.2007, 17:35
Необходимо указать, откуда брать LogFactory укажи в  archive axis.jar models.jar swingx-2006_10_27.jar может поможет...))
Как подписать апплет можно посмотреть здесь http://forum.vingrad.ru/index.php?act=module&module=vingradfaq&target=main_panel&article=116

Автор: access 22.1.2007, 23:53
Подправил html:
Код

<html>
  <head>
    <title>demo</title>
  </head>
  <body>
      <applet code=gui              
              archive="demo.jar, axis.jar, models.jar, swingx-2006_10_27.jar" width=1000 height=600>
      </applet>
  </body>
</html>

правильно?
Далее, по указанной ссылке, подписал demo.jar и axis.jar, дошёл до правки java.policy.
В примере, который должен читать файл C:/AUTOEXEC.BAT, указано добавить в java.policy
Код

keystore "file:E:/TEMP/TEST/JAR/.keystore";
grant {
permission java.io.FilePermission "C:/AUTOEXEC.BAT", "read", signedBy "Vingrad";
};

А в моём случае-то что будет? Кто куда пишет/читает? Поясните, пожалуйста, не догоняю...

Автор: access 24.1.2007, 11:14
Всё верно, дело оказалось в подписи джаров.
Просмотрел ссылку http://forum.vingrad.ru/index.php?act=modu...amp;article=116. Порылся в гугле, нашёл, народ с таким уже сталкивался:
Цитата

Here are the steps needed to sign a JAR file with a test certificate:
   1. Make sure that you have a JDK 1.2 or JDK 1.3
keytool and jarsigner in your path (located in the
J2SE SDK bin directory).
   2. Create a new key in a new keystore as follows:
          keytool -genkey -keystore myKeystore -alias myself 
      You will get prompted for a information about
the new key, such as password, name, etc. This will
create the myKeystore file on disk. A self-signed test
certificate also will be created.
   3. Check to make sure that everything is ok. To
list the contents of the keystore, use the command:
          keytool -list -keystore myKeystore 
      It should list something like:
          Keystore type: jks
          Keystore provider: SUN
          Your keystore contains 1 entry:
          myself, Tue Jan 23 19:29:32 PST 2001, keyEntry,
          Certificate fingerprint (MD5):      C2:E9:BF:F9:D3:DF:4C:8F:3C:5F:22:9E:AF:0B:42:9D
   4. Finally, sign the JAR file with the test certificate as follows:
          jarsigner -keystore myKeystore test.jar myself 
      Repeat this step on all of your JAR files.

В общем, надо подписать все джары, policy трогать не надо. Пробовал запустить из-под appletviewer - почему-то глюкавит, как и прежде. При запуске через html всё работает нормально.

Автор: fufnf 8.2.2011, 10:03
Добрый день.
У меня вопрос касательно

Цитата

Если же файл отсутствует или такого производителя ПО там нет, то пользователю будет выдан запрос, доверять ли данному производителю ПО или нет. Если пользователь ответил да, то апплет получит все разрешения.


Не смотря на то, что на вопрос о доверии сертификату я ответил "Да", я все равно получаю ошибку:

java.security.AccessControlException: access denied (java.awt.AWTPermission accessClipboard)

Модифицировать файл java.policy у всех клиентов моего сайта я не могу - я думаю, что это и так понятно. Как в таком случае выдать разрешение на доступ к буферу обмена из апплета?

upd.: Уже разобрался. Всем спасибо! Как сделать, чтобы работало, написал в своем блоге:
http://community.terrasoft.ua/blogs/5816

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)