如何使用JAXB从签名Applet(不签名)? [英] How can I use JAXB from an unsigned applet (without signing it)?

查看:174
本文介绍了如何使用JAXB从签名Applet(不签名)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想马歇尔Java对象转换为XML,反之亦然从签名Applet内我不能改变任何安全权限/策略文件中,或签署申请。

我似乎得到一个安全异常,因为JAXB试图访问字段或构造函数,它不能在小程序沙箱。

该浏览器运行JRE 1.6.0_17

我也开到基于其他一些XML(或JSON)库解决方案,但曾尝试以下和pretty多碰上类似的问题;
  - XStream的
  - GSON

由于(类似)以下对象:

  @XmlType
@XmlRootElement
公共类SimpleObject {    公共字符串sampleText;    公共SimpleObject(){
    }    公共字符串getSampleText(){
        返回sampleText;
    }    公共无效setSampleText(字符串sampleText){
        this.sampleText = sampleText;
    }
}

和下面这个简单的JAXB code:

 公共无效的actionPerformed(ActionEvent的五){
    尝试{
        JAXBContext而JC = JAXBContext.newInstance(SimpleObject.class);
        编组编组= jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,真);        SimpleObject对象=新SimpleObject();
        object.setSampleText(你好);        的Marshaller.marshal(目标下,System.out);
    }
    赶上(JAXBException E1){
        抛出新的RuntimeException(E1);
    }
}

我得到了以下异常:

 异常螺纹AWT-EventQueue的-2java.security.AccessControlException:访问被拒绝(java.lang.RuntimePermission accessDeclaredMembers)
    在java.security.AccessControlContext.checkPermission(来源不明)
    在java.security.AccessController.checkPermission(来源不明)
    在java.lang.SecurityManager.checkPermission(来源不明)
    在java.lang.SecurityManager.checkMemberAccess(来源不明)
    在java.lang.Class.checkMemberAccess(来源不明)
    在java.lang.Class.getDeclaredConstructor(来源不明)
    在com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.hasDefaultConstructor(来源不明)
    在com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.hasDefaultConstructor(来源不明)
    在com.sun.xml.internal.bind.v2.model.impl.ClassInfoImpl<&初始化GT;(未知来源)
    在com.sun.xml.internal.bind.v2.model.impl.RuntimeClassInfoImpl<&初始化GT;(未知来源)
    在com.sun.xml.internal.bind.v2.model.impl.RuntimeModelBuilder.createClassInfo(来源不明)
    在com.sun.xml.internal.bind.v2.model.impl.RuntimeModelBuilder.createClassInfo(来源不明)
    在com.sun.xml.internal.bind.v2.model.impl.ModelBuilder.getClassInfo(来源不明)
    在com.sun.xml.internal.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(来源不明)
    在com.sun.xml.internal.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(来源不明)
    在com.sun.xml.internal.bind.v2.model.impl.ModelBuilder.getClassInfo(来源不明)
    在com.sun.xml.internal.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(来源不明)
    在com.sun.xml.internal.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(来源不明)
    在com.sun.xml.internal.bind.v2.model.impl.ModelBuilder.getTypeInfo(来源不明)
    在com.sun.xml.internal.bind.v2.model.impl.ModelBuilder.getTypeInfo(来源不明)
    在com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(来源不明)
    在com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl<&初始化GT;(未知来源)
    在com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl $ JAXBContextBuilder.build(来源不明)
    在com.sun.xml.internal.bind.v2.ContextFactory.createContext(来源不明)
    在com.sun.xml.internal.bind.v2.ContextFactory.createContext(来源不明)
    在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
    在sun.reflect.NativeMethodAccessorImpl.invoke(来源不明)
    在sun.reflect.DelegatingMethodAccessorImpl.invoke(来源不明)
    在java.lang.reflect.Method.invoke(来源不明)
    在javax.xml.bind.ContextFinder.newInstance(来源不明)
    在javax.xml.bind.ContextFinder.find(来源不明)
    在javax.xml.bind.JAXBContext.newInstance(来源不明)
    在javax.xml.bind.JAXBContext.newInstance(来源不明)
    在nz.co.zeal.maker.application.actions.build.JAXBTestAction.actionPerformed(JAXBTestAction.java:24)
    在javax.swing.AbstractButton.fireActionPerformed(来源不明)
    在javax.swing.AbstractButton中的$ Handler.actionPerformed(来源不明)
    在javax.swing.DefaultButtonModel.fireActionPerformed(来源不明)
    在javax.swing.DefaultButtonModel.set pressed(来源不明)
    在javax.swing.AbstractButton.doClick(来源不明)
    在javax.swing.plaf.basic.BasicMenuItemUI.doClick(来源不明)
    在javax.swing.plaf.basic.BasicMenuItemUI $ Handler.mouseReleased(来源不明)
    在java.awt.Component.processMouseEvent(来源不明)
    在javax.swing.JComponent.processMouseEvent(来源不明)
    在java.awt.Component.processEvent(来源不明)
    在java.awt.Container.processEvent(来源不明)
    在java.awt.Component.dispatchEventImpl(来源不明)
    在java.awt.Container.dispatchEventImpl(来源不明)
    在java.awt.Component.dispatchEvent(来源不明)
    在java.awt.LightweightDispatcher.retargetMouseEvent(来源不明)
    在java.awt.LightweightDispatcher.processMouseEvent(来源不明)
    在java.awt.LightweightDispatcher.dispatchEvent(来源不明)
    在java.awt.Container.dispatchEventImpl(来源不明)
    在java.awt.Component.dispatchEvent(来源不明)
    在java.awt.EventQueue.dispatchEvent(来源不明)
    在java.awt.EventDispatchThread.pumpOneEventForFilters(来源不明)
    在java.awt.EventDispatchThread.pumpEventsForFilter(来源不明)
    在java.awt.EventDispatchThread.pumpEventsForHierarchy(来源不明)
    在java.awt.EventDispatchThread.pumpEvents(来源不明)
    在java.awt.EventDispatchThread.pumpEvents(来源不明)
    在java.awt.EventDispatchThread.run(来源不明)


解决方案

我从来没有相当弄清楚这一个。我所做的却是抢一个相当简单的JSON库调用Flexjson。它也扔了一个类似的安全异常,但该库是很简单的,我是能关断库code,它导致异常与一个布尔标志的小程序。

I would like to marshall Java objects into XML and vice-versa from within an Unsigned Applet and I can't change any of the security permission/policy files, or sign the application.

I seem to get a Security exception, because JAXB is attempting to access fields or constructors that it can't in the applet sandbox.

The browser is running JRE 1.6.0_17

I'm also open to solutions based on some other XML (or JSON) library but have tried the following and pretty much run into a similar problem; - XStream - Gson

Given (something like) the following object:

@XmlType
@XmlRootElement
public class SimpleObject {

    public String sampleText;

    public SimpleObject() {
    }

    public String getSampleText() {
        return sampleText;
    }

    public void setSampleText(String sampleText) {
        this.sampleText = sampleText;
    }
}

And the following simple JAXB code:

public void actionPerformed(ActionEvent e) {
    try {
        JAXBContext jc = JAXBContext.newInstance(SimpleObject.class);
        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

        SimpleObject object = new SimpleObject();
        object.setSampleText("Hello");

        marshaller.marshal(object, System.out);
    }
    catch (JAXBException e1) {
        throw new RuntimeException(e1);
    }
}

I get the following exception:

Exception in thread "AWT-EventQueue-2" java.security.AccessControlException: access denied (java.lang.RuntimePermission accessDeclaredMembers)
    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.checkMemberAccess(Unknown Source)
    at java.lang.Class.checkMemberAccess(Unknown Source)
    at java.lang.Class.getDeclaredConstructor(Unknown Source)
    at com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.hasDefaultConstructor(Unknown Source)
    at com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.hasDefaultConstructor(Unknown Source)
    at com.sun.xml.internal.bind.v2.model.impl.ClassInfoImpl.<init>(Unknown Source)
    at com.sun.xml.internal.bind.v2.model.impl.RuntimeClassInfoImpl.<init>(Unknown Source)
    at com.sun.xml.internal.bind.v2.model.impl.RuntimeModelBuilder.createClassInfo(Unknown Source)
    at com.sun.xml.internal.bind.v2.model.impl.RuntimeModelBuilder.createClassInfo(Unknown Source)
    at com.sun.xml.internal.bind.v2.model.impl.ModelBuilder.getClassInfo(Unknown Source)
    at com.sun.xml.internal.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(Unknown Source)
    at com.sun.xml.internal.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(Unknown Source)
    at com.sun.xml.internal.bind.v2.model.impl.ModelBuilder.getClassInfo(Unknown Source)
    at com.sun.xml.internal.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(Unknown Source)
    at com.sun.xml.internal.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(Unknown Source)
    at com.sun.xml.internal.bind.v2.model.impl.ModelBuilder.getTypeInfo(Unknown Source)
    at com.sun.xml.internal.bind.v2.model.impl.ModelBuilder.getTypeInfo(Unknown Source)
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(Unknown Source)
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(Unknown Source)
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(Unknown Source)
    at com.sun.xml.internal.bind.v2.ContextFactory.createContext(Unknown Source)
    at com.sun.xml.internal.bind.v2.ContextFactory.createContext(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at javax.xml.bind.ContextFinder.newInstance(Unknown Source)
    at javax.xml.bind.ContextFinder.find(Unknown Source)
    at javax.xml.bind.JAXBContext.newInstance(Unknown Source)
    at javax.xml.bind.JAXBContext.newInstance(Unknown Source)
    at nz.co.zeal.maker.application.actions.build.JAXBTestAction.actionPerformed(JAXBTestAction.java:24)
    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.AbstractButton.doClick(Unknown Source)
    at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
    at javax.swing.plaf.basic.BasicMenuItemUI$Handler.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.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(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)

解决方案

I never did quite figure this one out. What I did instead was to grab a fairly simple JSON library called Flexjson. It also threw a similar security exception but the library was simple enough that I was able to switch-off the library code that causes the exception in an Applet with a boolean flag.

这篇关于如何使用JAXB从签名Applet(不签名)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆