在4.13弹簧上有应用 因此,当尝试在Websphere 8.5.5.13上部署Ear-file时-出现错误消息
[12/18/18 14:56:41:946 MSK] 00000086 AnnotationCon E CWMDF0002E: 注释处理失败,出现以下错误: com.ibm.ws.metadata.annotations.AnnotationException:注释 类的处理失败: META-INF / versions / 9 / javax / xml / bind / ModuleUtil.class
这是什么问题? 这可能是安装错误还是应用程序和服务器库的不兼容性?
应用具有访问点
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"spring"})
public class WebAppInitalizer implements WebApplicationInitializer {
private static final String CONFIG_LOCATION = "spring.config";
private static final String MAPPING_URL = "/*";
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
System.out.println(">>>>>>>>>>>>>>>>>>>>>>> ONSTARTUP <<<<<<<<<<<<<<<<<<<<<<<<");
WebApplicationContext context = getContext();
servletContext.addListener(new ContextLoaderListener(context));
ServletRegistration.Dynamic dispatcher = servletContext.addServlet("DispatcherServlet", new DispatcherServlet(context));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping(MAPPING_URL);
System.out.println(">>>>>>>>>>>>>>>>>>>>>>> ONSTARTUP END <<<<<<<<<<<<<<<<<<<<<<<<");
}
private AnnotationConfigWebApplicationContext getContext() {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.setConfigLocation(CONFIG_LOCATION);
return context;
}
}
和配置是
package spring.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(basePackages = "spring")
public class AppConfig {
}
package spring.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
}
并且测试控制器是:
package spring.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@RequestMapping(value = "/greeting")
public String healthCheck() {
return "greeting";
}
}
答案 0 :(得分:3)
您需要在下一个修订包中使用PI96826
https://www-01.ibm.com/support/docview.wss?uid=swg1PI96826
Java V9多发行版JAR包含META-INF下的Java V9类 目录树。 Java V9类的存在导致应用程序 开始失败,出现类似于以下内容的异常:
答案 1 :(得分:2)
错误消息抱怨META-INF / versions / 9目录下的类。该位置表明您具有带有Java V9类的多版本JAR。 WAS不支持Java V9类,但已添加了允许在多版本JAR中使用的代码。
直到发布WAS 8.5.5和WAS 9.0之后,才存在多发行版JAR。为WAS 8.5.5创建了五个APAR,以解决随着向应用程序中添加多发行版JAR而发现的问题。 APAR的列表如下。请注意,8.5.5.14中包含3个APAR,而其他8.2.5.15中则包含2个。您可能不需要全部。它取决于您的应用程序,在一种情况下,取决于应用程序类的扫描顺序。
WAS V9有一个第六个APAR,仅用于性能。它不适用于WAS 8.5.5。
底线:要完全容忍多发行版JAR,您需要上移至8.5.5.15或9.0.0.10或应用下面的所有APAR。
答案 2 :(得分:0)
(临时)解决方法是使用Reducing annotation searches during application deployment中所述的存档或程序包过滤,以排除某些库或类无法扫描。
该产品提供了可配置的过滤功能,以减少 搜索注释的类的数量。您可以识别 注释处理中忽略哪些模块或Java包 通过四个属性:(或清单属性):
Ignore-Scanning-Archives Ignore-Scanning-Packages Include-Scanning-Archives Include-Scanning-Packages
可以在以下位置的amm.filter.properties中指定属性: app_server_root / properties,或可以指定为清单 属性。您还可以确定要哪些模块或Java包 通过使用以下系统属性来忽略:
com.ibm.ws.amm.scan.context.filter.archives com.ibm.ws.amm.scan.context.filter.packages com.ibm.ws.amm.scan.context.include.archives com.ibm.ws.amm.scan.context.include.packages
使用这些选项可以限制扫描哪些类的注释。
我最近在等待应用适当的WebSphere Fixpack时就使用了amm.filter.properties
版本,它使我们能够绕开我们眼前的问题。
在我们的案例中,有Jackson 2.10个库在抱怨,因此我将上述文件的WebSphere根属性版本复制到了我的profile / properties目录中,并将Jackson罐子添加到了Ignore-Scanning-Archives
部分。
似乎还必须重新启动我们的WebSphere ND Node Agent并重新部署应用程序,以解决最初的问题。