[alibaba/fastjson]Web应用tomcat部署成功,weblogic 12c部署失败

2025-11-24 285 views
2

web应用使用了fastjson,打成war包部署在tomcat上是可以的,但部署在weblogic 12c上出现下面的错误信息:

`####<Nov 17, 2017 10:50:11 AM CST> <Scanning for root resource and provider classes in the packages: com.alibaba.fastjson.support.jaxrs>

<Nov 17, 2017 10:50:11 AM CST> <Nov 17, 2017 10:50:11 AM CST> <Provider classes found:

class com.alibaba.fastjson.support.jaxrs.FastJsonProvider>

<Nov 17, 2017 10:50:13 AM CST> <Initiating Jersey application, version 'Jersey: 1.18.1 02/19/2014 03:28 AM'> <Nov 17, 2017 10:50:18 AM CST> <Nov 17, 2017 10:50:18 AM CST> <Servlet: "Jersey" failed to preload on startup in Web application: "xx.war".

com.sun.jersey.api.container.ContainerException: The ResourceConfig instance does not contain any root resource classes. at com.sun.jersey.server.impl.application.RootResourceUriRules.(RootResourceUriRules.java:99) at com.sun.jersey.server.impl.application.WebApplicationImpl._initiate(WebApplicationImpl.java:1359) at com.sun.jersey.server.impl.application.WebApplicationImpl.access$700(WebApplicationImpl.java:180) at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:799) at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:795)`

去掉fastjson包的依赖,weblogic就可以成功部署,请问是否是fastjson哪里还需要专门针对weblogic的配置?

回答

4

是不是包冲突?

8

升级到最新版本1.2.40试试看?

3

@wenshao 目前就是用的最新版本1.2.40

7

@duqicauc 之前怀疑过,weblogic.xml加上<prefer-web-inf-classes>true</prefer-web-inf-classes>也是这个问题,只有把fastjson包去掉就好了

5

从异常信息可以看出是weblogic 扫描到了 com.alibaba.fastjson.support.jaxrs包以及com.alibaba.fastjson.support.jaxrs.FastJsonProvider,导致出现的问题

验证:将fastjson.jar包中的com.alibaba.fastjson.support.jaxrs包删除即可解决问题

5

@xingguang2013 在启动jersey 之前 FastJsonAutoDiscoverable.autoDiscover = false; 试试

5

@VictorZeng 您好,我的web应用是没有用到jersey的。按照您说的,我在web.xml的listener中配置了FastJsonAutoDiscoverable.autoDiscover = false;,但还是不可以。不行的话,先按照上面的方式,打出的war包删除fastjson.jar中的com.alibaba.fastjson.support.jaxrs包。谢谢您

1

@xingguang2013 不好意思 weblogic不太熟 不知道有没有什么配置能更改 不自动scan Provider

8

@VictorZeng 谢谢您提供的思路

1

@kimmking 我还在查找配置jersey.config.disableAutoDiscovery的官方说明以及方式,感谢您提供的建议

0

核心问题是,weblogic 12内置了对jersey的支持。

3

@wenshao 解决这个问题的根本办法就是把对不同其他类库支持的package,拆成独立的包:fastjson-xxx

6

@kimmking 我所说的模块化就是这个意思

2

@VictorZeng 是的,可以先处理core api之外的部分。

1

感谢各位,已在weblogic官网https://docs.oracle.com/middleware/12213/wls/RESTF/intro-restful-service.htm找到相关配置信息

The JAX-RS provides support for creating web services according to REST architectural style. JAX-RS uses annotations to simplify the development of RESTful web services. By simply adding annotations to your web service, you can define the resources and the actions that can be performed on those resources. JAX-RS is part of the Java EE 7 full profile, and is integrated with Contexts and Dependency Injection (CDI) for the Java EE Platform (CDI), Enterprise JavaBeans (EJB) technology, and Java Servlet technology.

正如同@kimmking 所讲的。https://jersey.github.io/documentation/latest/deployment.html#deployment.autodiscoverable,不过尝试了各种配置方式,都无法有效的让weblogic获取到jersey.config.disableAutoDiscovery为false的设置。目前还是用删除fastjson的com.alibaba.fastjson.support.jaxrs包方式解决的。

6

@xingguang2013 fastjson一直没分包,给你带来不便,深感歉意。

6

没关系,已经改用 jackson 了,谢谢

0

您好,我现在也遇到了这个问题,删除了jaxrs包就可以了,可以这么做不,会不会带来一些其他的问题呢?

2

您好,我现在用的版本是1.2.80 我一旦切到 fastjson2后,有一些方法用不了了,代码里用的地方也比较多,要是重新改的话,来不及了。有没有其他的办法呢

3

您好,我现在用的版本是1.2.80 我一旦切到 fastjson2后,有一些方法用不了了,代码里用的地方也比较多,要是重新改的话,来不及了。有没有其他的办法呢

自己编译吧,太坑了