我在我的项目中使用Eclipselink Moxy实现JAXB,使用XmlAnyElement将复杂的XML映射到String对象.为此,我实现了名为LayoutHandler的DomHandler.我正在使用JAXB来部署在JBoss 6中的resteasy Web服务.
我间歇性地面对下面的问题 -
Exception [EclipseLink-50033] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b):
org.eclipse.persistence.exceptions.JAXBException
Exception Description: The DomHandlerConverter for DomHandler
[com.**.LayoutHandler] set on property [layoutXml] could not be
initialized.
Internal Exception: java.lang.ClassNotFoundException:
com.**.LayoutHandler from
BaseClassLoader@5c0b3ad0{vfs:///*/*/jboss-server/server/all/deployers/resteasy.deployer}
While EclipseLink Moxy is instantiating JAXBContext using JAXBContext.newInstance(classes, properties)
Run Code Online (Sandbox Code Playgroud)
在花了一些时间调试和分析问题后,我可以发现resteasy的ClassLoader习惯于加载LayoutHandler类而不是我的应用程序类加载器(vfs:/// //jboss-server/server/all/deploy/app_name .ear/app_name.war /)导致该问题无法找到LayoutHandler类.
当我退回服务器时,问题得到解决,所以我无法找到确切的根本原因.任何帮助将不胜感激.
进一步调试到org.eclipse.persistence.jaxb.JAXBContextFactory后发现,下面两个类被传递给JAXBContextFactory的createContext()方法 -
org.jboss.resteasy.plugins.providers.jaxb.JaxbCollection
com.**.Model_class
public static javax.xml.bind.JAXBContext createContext(Class[] classesToBeBound, Map properties) throws JAXBException {
ClassLoader loader = null;
if (classesToBeBound.length > 0) {
loader = classesToBeBound[0].getClassLoader();
}
return createContext(classesToBeBound, properties, …Run Code Online (Sandbox Code Playgroud) 在学校测试中,我在anonyme内部类中使用了非final变量.在学校计算机和我的私人计算机上(使用x86 jre1.8.0_45)它正在工作.
然而,在教师笔记本电脑Eclipse上显示错误(变量应该使用final).他正在使用jre1.8.0.x版本(不知道具体版本).
任何想法为什么它在我的电脑而不是他的电脑上工作?
在此代码示例中,在ActionListener的actionPerformed函数中使用了无最终对象jLabel:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;
public class Main {
public Main(String[] args) {
JLabel jLabel = new JLabel();
JButton button = new JButton();
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
jLabel.setText("xyz");
}
});
}
}
Run Code Online (Sandbox Code Playgroud)