Eureka Server与Weblogic冲突问题解决方案(V6.6.6.Final)

当Eureka Server以war包形式部署到Weblogic时,可能会遇到启动问题。异常源于Weblogic的类加载机制,它加载了不同版本的JAVA-RS接口导致冲突。解决方法包括调整Weblogic的类加载顺序,修改jersey配置,以及处理javax.validation的版本冲突。
摘要由CSDN通过智能技术生成

00 版本说明

组件 版本
WebLogic 12.2.1.3
Spring Boot 2.1.6.RELEASE
spring-cloud-netflix-eureka-server 2.1.2.RELEASE

01 现象

使用eureka server作为注册中心,以war包形式部署到weblogic中时,无论是否配置优先加载项目类库,都会出现项目无法启动的情况。如果使用prefer-application-packages配置优先的包,项目虽然可以启动,但是会出现其他服务无法注册的问题,日志中会报出如下异常:

ERROR [ACTIVE] ExecuteThread: '19' for queue: 'weblogic.kernel.Default (self-tuning)' --- [forwardToErrorPage] o.s.b.w.s.support.ErrorPageFilter : Forwarding to error page from request [/eureka/peerreplication/batch/] due to exception [javax.ws.rs.core.UriBuilder.uri(Ljava/lang/String;)Ljavax/ws/rs/core/UriBuilder;]
java.lang.AbstractMethodError: javax.ws.rs.core.UriBuilder.uri(Ljava/lang/String;)Ljavax/ws/rs/core/UriBuilder;
	at javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:119)
	at com.sun.jersey.spi.container.servlet.ServletContainer.doFilter(ServletContainer.java:911)
	at com.sun.jersey.spi.container.servlet.ServletContainer.doFilter(ServletContainer.java:875)
	at com.sun.jersey.spi.container.servlet.ServletContainer.doFilter(ServletContainer.java:829)
	at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
	at org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter.doFilterInternal(HttpTraceFilter.java:88)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:109)
	at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)

02 分析&解决

从异常信息中可以看到,是程序在调用javax.ws.rs.core.UriBuilder.uri(String)这个方法时出现问题的,问题原因是该方法是一个抽象方法。
根据异常堆栈信息,首先找到com.sun.jersey.spi.container.servlet.ServletContainer的911行,该类位于jersey-servlet-1.19.1.jar中

final UriBuilder absoluteUriBuilder = UriBuilder.fromUri(request.getRequestURL().toString());

在进一步跟踪UriBuilder.fromUri(String)的位置,javax.ws.rs.core.UriBuilder在jsr311-api-1.1.1.jar中

public static UriBuilder fromUri(String uri) throws IllegalArgumentException {
   
    URI u;
    try {
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值