如何使用JAXB从签名Applet(不签名)? [英] How can I use JAXB from an unsigned applet (without signing it)?
问题描述
我想马歇尔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屋!