Tag: classloader

如何将速度模板加载到EJB中以用作邮件模板

我有一个Java EE 6应用程序,我想在其中使用velocity从模板生成邮件。 我有一个@Named bean,负责加载和填充特定模板。 该项目是一个Web应用程序,所以我将我的模板放入WEB-INF / classes(这看起来相当丑陋,但我现在没有找到更优雅的解决方案)并使用ClasspathResourceLoader来访问文件。 配置如下: Properties props = new Properties(); props.setProperty(“resource.loader”, “class”); props.setProperty(“resource.loader.class”, “org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader”); VelocityEngine engine = new VelocityEngine(props); VelocityContext context = new VelocityContext(); engine.init(); context.put(“myObject”, myObject); Template template = engine.getTemplate(“mail_template.vm”); StringWriter writer = new StringWriter(); template.merge(context, writer); 运行此代码会产生以下exception: Caused by: java.lang.UnsupportedOperationException: Could not retrieve ServletContext from application attributes at org.apache.velocity.runtime.log.ServletLogChute.init(ServletLogChute.java:73) […]

为什么ContextClassLoader返回带有感叹号字符的路径?

我尝试在WEB-INF / lib中用jar打开文件 Thread.currentThread().getContextClassLoader(); URL url=classLoader.getResource(myconfig); 在调试器中,我可以看到: jar:file:/C:/apache-tomcat/webapps/mywebapp/WEB-INF/lib/myjarresource.jar! /conf/configuration.xml 为什么文件路径是“!” ? 我认为由于这个原因应用程序无法打开此文件。 如何获得正确的路径? 谢谢。

URLClassLoader.getResources(“”)(空资源名称)没有给出jar的根

考虑使用URL集合参数化的URLClassLoader , URL集合是扩展目录和jar文件的混合。 例如: URL[] urls = new URL[] { new URL(“file:/D:/work/temp/jars/spring-security-core-3.2.0.RELEASE.jar”), new URL(“file:/D:/work/temp/jars/spring-security-config-3.2.0.RELEASE.jar”), … new URL(“file:/D:/work/temp/domain/bin/”), new URL(“file:/D:/work/temp/web/bin/”), … } URLClassLoader cl = new URLClassLoader(urls); 类加载器正确处理位于包内某处的资源的getResources()请求,如”org/my/package/conf.properties” 。 通过正确处理我的意思是类加载器成功找到目录和jar中的所有匹配项。 在getResources(“”)传递的特殊空字符串名称应该产生所有可用根的URL(在目录和jar中)。 但是, ClassLoader存在一个已知的限制,它只导致返回与目录对应的根。 所有根jar子都被丢弃了。 使用classloader.getURLs[]而不是classloader.getResources(“”)将无法使用,因为我有一个相互依赖的URLClassLoader的复杂图形,因此结果将完全不同。 此外,我的类加载器将由使用getResources(“”)调用的第三方类路径扫描工具使用,以便设置内部搜索库。 这样就无法找到位于jar子里的资源。 我目前有一个工作修复,我从URLClassLoader扩展并手动处理带有空字符串的请求,除了返回URL的返回集合中的目录之外,还强制执行jar的根。 不过我的问题是: 这种限制的概念/技术原因是什么(不返回jar子的路径)? 通过手动修复,我是否违反任何重要合同? 有没有很好的方法来获得理想的行为? 谢谢你的任何想法!

使用详细类加载运行Gradle?

我的构建脚本遇到错误(如下)。 有没有办法使用与-verbose:class调用Java相同类型的输出来运行Gradle? 有问题的错误,任何人都应该有一些输入: Caused by: org.gradle.api.artifacts.ResolveException: Could not resolve all dependencies for configuration ‘:Project:compile’. at org.gradle.api.internal.artifacts.ivyservice.ErrorHandlingArtifactDependencyResolver.wrapException(ErrorHandlingArtifactDependencyResolver.java:49) … more Caused by: java.lang.LinkageError: loader constraints violated when linking org/apache/ivy/core/module/descriptor/DependencyDescriptor class

Tomcat 6 vs 7 – lib vs shared / lib – jars only?

从Tomcat 6升级到Tomcat 7时 – 我们在6上的$ CATALINA_HOME / lib目录中的类路径上保留了我们想要的许多文件 – 在Tomcat 7上移动这两个$ CATALINA_HOME / shared / lib是有意义的。 我们发现jar文件没有问题 – 但是任何不是jar文件的东西 – 例如xml文件等都没有被shared / lib目录中加载的类拾取。 当我们将非jar文件移回$ CATALINA_HOME / lib目录时 – 它们加载到类路径中而没有问题。 我的问题是 – 这是Tomcat 7中类加载器中的错误吗? 或者这是预期的行为? (无法以与从$ CATALINA_HOME / lib加载文件的方式不一致的方式从$ CATALINA_HOME / shared / lib将非jar文件加载到类路径中) 操作系统:Windows7 Tomcat版本:7.0.30 Java版本:1.7.0_11

如何从嵌入式JAR文件加载资源

我正在尝试加载嵌入的JAR文件中包含的资源。 该项目实际上是使用具有以下结构的EAR文件部署在JBoss中的: deploy.ear | |-> project.sar | |-> sub_project.jar | | | |-> settings.xml | |-> com/path/project/ | |-> main.class 从main.java我想获得settings.xml的InputStream 。 这样做的正确方法是什么? 我目前的理解是以下代码应该工作,但它返回null : this.getClass().getResourceAsStream(“settings.xml”); 更新 经过一些试验和错误后,以下声明有效: getClass().getResourceAsStream(“/settings.xml”); getClass().getResourceAsStream(“/sub_project.jar/settings.xml”); getClass().getClassLoader().getResourceAsStream(“/settings.xml”); getClass().getClassLoader().getResourceAsStream(“settings.xml”); getClass().getClassLoader().getResourceAsStream(“sub_project.jar/settings.xml”); getClass().getClassLoader().getResourceAsStream(“/sub_project.jar/settings.xml”);

JBoss中的类加载顺序

我想知道JBoss服务器的默认行为(在我的情况下是4.2.3.GA)是以parent-first或parent-last模式加载类。 如果我怀疑在父 – 最后一种模式下工作(即首先尝试从应用程序的WEB-INF / lib加载类,并且只有在找不到它们时转到server \ lib),我该如何配置它才能工作在相反 – 首先尝试从外部加载类,然后再查看应用程序内部。

在使用多个dex文件时,是否有必要将同一个包的类保留在同一个dex中

关于标题 “相同包的类”表示共享相同包访问的类。 请注意,类abcFoo没有类abBar的包访问权 。 因为如果前者的修饰符是默认值,后者无法访问前者。 问题 如果我将同一个包中的两个类分成两个dex文件,即使我正确加载它们,我也会在运行时遇到一些错误,logcat喜欢: I / dalvikvm(6498):DexOpt:非法方法访问(从Lcom / fish47 / multidex / TestMatchWord调用Lcom / fish47 / multidex / Foo; .isWholeWord(Lcom / fish47 / multidex / Foo;)Z;) I / dalvikvm(6498):找不到方法com.fish47.multidex.core.Foo.isWholeWord,从com.fish47.multidex.core.TestMatchWord.test_english方法引用 W / dalvikvm(6498):VFY:无法解析虚方法758:Lcom / fish47 / multidex / Foo; .isWholeWord(Lcom / fish47 / multidex / Foo;)Z 推测 这是代码,它会弹出以下错误消息: vm / analysis / Optimize.c […]

Thread.getContextClassLoader()== null?

Thread.getContextClassLoader()可以为null吗? javadoc并不是很清楚。 图书馆是否应考虑此案例? 更新:我问的原因是beansbinding.dev.java.net在这种情况下不起作用setContextClassLoader(null)我的代码确实setContextClassLoader(null)

WAS 8.5:java.lang.ClassCastException:org.apache.xerces.jaxp.SAXParserFactoryImpl与javax.xml.parsers.SAXParserFactory不兼容

我正在Websphere Application Server 8.5中部署J2EE Web应用程序。 Web应用程序具有与所有第三方库共享的库。 所有内部编码的库都在WEB-INF / lib文件夹中。 问题是只有一些jsps WAS会抛出以下exception。 我认为它与xercesImpl-2.8.1.jar有关但我不明白为什么它会抛出这个exception以及它为什么只抛出一些页面。 在tomcat它完美地工作。 java.lang.ClassCastException: org.apache.xerces.jaxp.SAXParserFactoryImpl incompatible with javax.xml.parsers.SAXParserFactory at javax.xml.parsers.SAXParserFactory.newInstance(Unknown Source) at org.apache.taglibs.standard.tlv.JstlBaseTLV.validate(JstlBaseTLV.java:152) at org.apache.taglibs.standard.tlv.JstlCoreTLV.validate(JstlCoreTLV.java:96) at com.ibm.ws.jsp.translator.visitor.validator.ValidateVisitor.validateTagLib(ValidateVisitor.java:1129) at com.ibm.ws.jsp.translator.visitor.validator.ValidateVisitor.visitJspRootStart(ValidateVisitor.java:491) at com.ibm.ws.jsp.translator.visitor.JspVisitor.processJspElement(JspVisitor.java:233) at com.ibm.ws.jsp.translator.visitor.JspVisitor.visit(JspVisitor.java:216) at com.ibm.ws.jsp.translator.JspTranslator.processVisitors(JspTranslator.java:127) at com.ibm.ws.jsp.translator.utils.JspTranslatorUtil.translateJsp(JspTranslatorUtil.java:254) at com.ibm.ws.jsp.translator.utils.JspTranslatorUtil.translateJspAndCompile(JspTranslatorUtil.java:121) at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionServletWrapper.translateJsp(AbstractJSPExtensionServletWrapper.java:535) at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionServletWrapper._checkForTranslation(AbstractJSPExtensionServletWrapper.java:452) at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionServletWrapper.checkForTranslation(AbstractJSPExtensionServletWrapper.java:283) at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionProcessor.findWrapper(AbstractJSPExtensionProcessor.java:456) at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionProcessor.getServletWrapper(AbstractJSPExtensionProcessor.java:337) at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:963) at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:1384) at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:193) […]