系統從Tomcat遷移到Weblogic無法發佈

 有一個系統從開發環境部署到正式環境,開發環境用的是tomcat,正式環境用的是weblogic。部署一直不成功,啓動失敗。

首先會報這個警告:
<The list of resource packages: gg.soa.org.apache.cxf.jaxrs.provider;org.apache.cxf.jaxrs.provider.atom;gg.soa.org.apache.cxf.rs.security.oauth2.provider;org.apache.cxf.jaxrs.provider;gg.soa.org.apache.cxf.rs.security.oauth2.services;gg.soa.org.apache.cxf.rs.security.oauth.services;org.apache.cxf.jaxrs.provider.json;org.codehaus.jackson.jaxrs;gg.soa.org.apache.cxf.jaxrs.ext.search;gg.soa.org.apache.cxf.jaxrs.provider.xmlbeans;gg.soa.org.apache.cxf.jaxrs.provider.json;gg.soa.org.apache.cxf.rs.security.oauth2.filters;org.apache.cxf.jaxrs.impl;org.apache.cxf.jaxrs.provider.aegis;com.alibaba.fastjson.support.jaxrs;org.apache.cxf.jaxrs.provider.xmlbeans;gg.soa.org.apache.cxf.jaxrs.provider.aegis;gg.soa.org.apache.cxf.jaxrs.provider.atom;gg.soa.org.apache.cxf.jaxrs.impl;gg.soa.org.apache.cxf.rs.security.oauth.filters>

然後會報下面的一些類找不到,不光是這些類,每次報的可能是不一樣的。
weblogic.application.ModuleException: java.lang.ClassNotFoundException: net.oauth.OAuthValidator
weblogic.application.ModuleException: java.lang.ClassNotFoundException: org.apache.abdera.writer.Writer
weblogic.application.ModuleException: java.lang.ClassNotFoundException: org.apache.cxf.aegis.type.AegisType
weblogic.application.ModuleException: java.lang.ClassNotFoundException: org.apache.abdera.i18n.iri.IRI

調整1,根據 這個信息找到相應的解決方案,發現按照方案調整之後沒有取得效果。
調整2,tomcat下的包都悉數放到了weblogic,覺得是jar包衝突引起的,或者是類加載順序以前的,在D:\program\jdk1.8.0_221現在,找到src.zip,找到java.util.jar.JarFile,在這一個方法上面加上打印語句,可以打印出來jar包的調用情況。
public JarFile(File file, boolean verify, int mode) throws IOException {
super(file, mode);
System.out.println(“JarFile-----:”+file.getName());
this.verify = verify;
}
編譯好累之後,替換D:\program\jdk1.8.0_221\jre\lib\rt.jar。
打印出加載順序之後,打印出2千多條信息,導入數據庫後去重,同一個包按第一次加載爲準,看不出來什麼問題。

調整3,再次迴歸問題,先把類找不到的問題解決,abdera-core-1.1.3.jar abdera-core-1.1.3.jar,cxf-rt-databinding-aegis-2.5.3.jar,oauth.net.jar先下載這四個包。類找不到的問題解決了,有產生了新的問題:
org.glassfish.jersey.server.model.ModelValidationException: Validation of the application resource model has failed during application initialization.
[[WARNING] Parameter 1 of type java.util.Map<? extends java.lang.Enum<?>, java.lang.String> from public void org.apache.cxf.jaxrs.provider.RequestDispatcherProvider.setEnumResources(java.util.Map<? extends java.lang.Enum<?>, java.lang.String>) is not resolvable to a concrete type.; source=‘public void org.apache.cxf.jaxrs.provider.RequestDispatcherProvider.setEnumResources(java.util.Map)’, [WARNING] Parameter 1 of type java.lang.Class<?>[] from public void gg.soa.org.apache.cxf.jaxrs.provider.AbstractJAXBProvider.setExtraClass(java.lang.Class<?>[]) is not resolvable to a concrete type.; source=‘public void gg.soa.org.apache.cxf.jaxrs.provider.AbstractJAXBProvider.setExtraClass(java.lang.Class[])’, [WARNING] Parameter 1 of type java.lang.Class<?>[] from public void org.apache.cxf.jaxrs.provider.AbstractJAXBProvider.setExtraClass(java.lang.Class<?>[]) is not resolvable to a concrete type.; source=‘public void org.apache.cxf.jaxrs.provider.AbstractJAXBProvider.setExtraClass(java.lang.Class[])’, [WARNING] Parameter 1 of type java.util.Map<java.lang.Class<?>, gg.soa.org.apache.cxf.jaxrs.provider.atom.AtomElementReader<?, ?>> from public void gg.soa.org.apache.cxf.jaxrs.provider.atom.AtomPojoProvider.setAtomClassReaders(java.util.Map<java.lang.Class<?>, gg.soa.org.apache.cxf.jaxrs.provider.atom.AtomElementReader<?, ?>>) is not resolvable to a concrete type.; source='public void gg.soa.org.apache.cxf.jaxrs.provider.atom.Atom…f.rs.security.oauth.services.AuthorizationRequestService.authorizeDecisionForm() and public javax.ws.rs.core.Response gg.soa.org.apache.cxf.rs.security.oauth2.services.RedirectionBasedGrantService.authorizeDecisionForm(javax.ws.rs.core.MultivaluedMap) at matching path pattern /decision.; source=‘org.glassfish.jersey.server.model.RuntimeResource@d5cec09’, [HINT] A resource model has ambiguous (sub-)resource method for HTTP method GET and output mime-types as defined by @Produces annotation at Java methods public javax.ws.rs.core.Response gg.soa.org.apache.cxf.rs.security.oauth.services.AuthorizationRequestService.authorizeDecision() and public javax.ws.rs.core.Response gg.soa.org.apache.cxf.rs.security.oauth2.services.RedirectionBasedGrantService.authorizeDecision() at matching path pattern /decision.; source=‘org.glassfish.jersey.server.model.RuntimeResource@d5cec09’]
at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:555)
at org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:184)
at org.glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:350)
at org.glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:347)
at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
Truncated. see log file for complete stacktrace

metalink的解釋:
In the client application did not see the oauth related configuration, you can download the cxf316 source, modify org.apache.cxf.rs.security.oauth2.services.AuthorizationService this class path settings, such as the original @Path (“authorize” ) Modified to @Path (“authorize2”) as a temporary workaround

有org.apache.cxf.rs.security.oauth2.services.AuthorizationService和org.apache.cxf.rs.security.oauth2.services.RedirectionBasedGrantService.authorizeDecisionForm這兩對類都有補丁衝突,即相同的路徑會有兩個實現,這樣在實際的調用中服務器將無法確定應該調用哪個方法來提供服務。所以服務器會拋出致命的異常。而TOMCAT應該沒有全局掃描機制,最初推測CXF可能使用按需加載,因此不會發生衝突。

調整4:把org.apache.cxf.rs.security.oauth2.services.AuthorizationService 註解的Path改了一下,再次啓動,終於OK。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章