Hi,
This week I was struggling with custom xpath functions in OSB. First I created a jar file that contained the class and the complete functionality including logging. It contains a class that does a DVM Lookup from the database. As a standalone function, called from JUnit test cases it functions perfectly. I use Apache commons logging with the libraries from the Weblogic installation.
But when I put this OSB Util Services jar in the osb-home/config/xpath-function, it turns out that somehow the Weblogic Console gets a conflict with the commons-logging libraries. So I deployed it just as an application library in weblogic console, to solve this breakage.
Then I created a simple separate class that only calls the method in the deployed library. I packaged that as a custom-osb-functions.jar for the osb-home/config/xpath-function. I managed to get if visible in OEPE. But when I test the xquery transformation resource on the server, I get:
Error executing the XQuery transformation: {http://www.bea.com/wli/common/xquery}XQueryException: Error invoking custom xquery java function: java.lang.reflect.InvocationTargetException
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.bea.wli.sb.stages.functions.XQueryExternalFunction.execute(XQueryExternalFunction.java:111)
at com.bea.wli.sb.stages.functions.XQueryExternalFunction.init(XQueryExternalFunction.java:61)
at weblogic.xml.query.iterators.FirstOrderIterator.open(FirstOrderIterator.java:169)
at weblogic.xml.query.runtime.typing.SeqTypeMatching.open(SeqTypeMatching.java:129)
at weblogic.xml.query.iterators.FirstOrderIterator.open(FirstOrderIterator.java:167)
at weblogic.xml.query.runtime.core.ExecutionWrapper.open(ExecutionWrapper.java:58)
at com.bea.wli.common.xquery.iterators.XQueryVariableMapper.getObjects(XQueryVariableMapper.java:459)
at com.bea.wli.common.xquery.iterators.XQueryVariableMapper.getObjects(XQueryVariableMapper.java:447)
at com.bea.wli.sb.test.transform.XQueryProcessor.invoke(XQueryProcessor.java:165)
at com.bea.wli.sb.test.TestServiceImpl.invoke(TestServiceImpl.java:172)
at com.bea.wli.sb.test.client.ejb.TestServiceEJBBean.invoke(TestServiceEJBBean.java:167)
at com.bea.wli.sb.test.client.ejb.TestService_sqr59p_EOImpl.__WL_invoke(Unknown Source)
at weblogic.ejb.container.internal.SessionRemoteMethodInvoker.invoke(SessionRemoteMethodInvoker.java:40)
at com.bea.wli.sb.test.client.ejb.TestService_sqr59p_EOImpl.invoke(Unknown Source)
at com.bea.wli.sb.test.client.ejb.TestService_sqr59p_EOImpl_WLSkel.invoke(Unknown Source)
at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:667)
at weblogic.rmi.cluster.ClusterableServerRef.invoke(ClusterableServerRef.java:230)
at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:522)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:146)
at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:518)
at weblogic.rmi.internal.wls.WLSExecuteRequest.run(WLSExecuteRequest.java:118)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:252)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)
Caused by: java.lang.NoClassDefFoundError: nl/darwin-it/osb/dvm/DomainValueMap
at nl.darwin-it.osb.xpath.DomainValueMapLookup.lookupDVM(DomainValueMapLookup.java:35)
... 28 more
Caused by: java.lang.ClassNotFoundException: nl.darwin-it.osb.dvm.DomainValueMap
at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:297)
at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:270)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:179)
... 29 more
Can any one explain to me how I can get the OSB Util Services jar library in the same classpath as the custom-xpath-functions jar, without having it put along the custom-xpath-functions jar in the osb-home/config/xpath-functions folder (since that somehow breaks the weblogic console)?
How does the OSB classpath/classloading mechanisms work in this?
Thanks in advance,
Regards,
Martien