同事解決的,摘抄上來備用。
問題描述:在OAF里調用ESB的服務報錯如下:
Error Page
Exception Details.
oracle.apps.fnd.framework.OAException: oracle.jbo.JboException: JBO-29000: Unexpected exception caught: java.lang.IllegalAccessError, msg=tried to access class org.apache.commons.logging.LogFactory$1 from class org.apache.commons.logging.LogFactory
at oracle.apps.fnd.framework.OAException.wrapperException(OAException.java:912)
at oracle.apps.fnd.framework.OAException.wrapperException(OAException.java:888)
at _OAErrorPage._jspService(_OAErrorPage.java:221)
at com.orionserver.http.OrionHttpJspPage.service(OrionHttpJspPage.java:59)
分析:由于ESB API里需要引入很多jar包,其中包括:commons-logging.jar,事實上EBS之前在其它地方就存在了這個jar包。
在運行程序時追蹤它到底使用的是哪個目錄下的jar包:
方法1:
String myclassPath = URLDecoder.decode(org.apache.commons.logging.LogFactory.class.getProtectionDomain().getCodeSource().getLocation().getFile(), "UTF-8");
方法2:
String className = org.apache.commons.logging.LogFactory.class.getName().replace('.', '/');
String resource = "/" + className + ".class";
URL url = org.apache.commons.logging.LogFactory.class.getResource(resource);
System.out.println("路徑:" + url.getFile());
通過查看發現系統調用的$IAS_ORACLE_HOME/ webservices/lib/commons-logging.jar。沒有調用我們上傳的$JAVA_TOP下的commons-logging.jar.
解決辦法:
將$IAS_ORACLE_HOME/ webservices/lib/commons-logging.jar改名commons-logging.jar.old(如果目錄下沒有這個jar包,系統會去加載$JAVA_TOP下的)
將commons-logging.jar復制到$JAVA_TOP(用系統原來的這個包替換我們自己的)
這時運行可能會報以下錯誤:
oracle.apps.fnd.framework.OAException: oracle.jbo.JboException: JBO-29000: Unexpected exception caught: oracle.classloader.util.AnnotatedNoClassDefFoundError, msg=
Missing class: org.apache.commons.logging.Log
Dependent class: oracle.webdb.wsrp.server.CommonsLogAdapter
Loader: oracle.wsrp:1.0
.....
.....
為了防止以上錯誤需要將本次ESB相關的其它JAR配置到$ORA_CONFIG_HOME/10.1.3/j2ee/oacore/config/server.xml
如:
刪除:
<code-source path="/oracle/ebsapp/appldev3/DEV3/apps/tech_st/10.1.3/webservices/lib/commons-logging.jar"/>
添加:
code-source path="/oracle/ebsapp/appldev3/DEV3/apps/apps_st/comn/java/classes/commons-logging.jar"/>
<code-source path="/oracle/ebsapp/appldev3/DEV3/apps/apps_st/comn/java/classes/com.ibm.mq.headers.jar"/>
<code-source path="/oracle/ebsapp/appldev3/DEV3/apps/apps_st/comn/java/classes/com.ibm.mq.jar"/>
即把esb相關jar包都加上。
注意:為了防止AutoConfig后所添加的會丟失,需在模板中將之信息添加到 FND_TOP/admin/template/ FND_TOP/admin/template/ server_xml_1013.tmp
如:
刪除行:
<code-source path="%s_weboh_oh%/webservices/lib/commons-logging.jar"/>
添加行:
<code-source path="%s_javatop%/commons-logging.jar"/>
<code-source path="%s_javatop%/com.ibm.mq.commonservices.jar"/>
<code-source path="%s_javatop%/com.ibm.mq.headers.jar"/>
<code-source path="%s_javatop%/com.ibm.mq.jar"/>
.........
........
重啟后可正常使用。