on 11-25-2013 4:16 PM
Hi,
I am writing, or rather have written, a piece of java code for a custom action block.
When writing the code in standard Java it works, thus I started changing to code to make it usable for a custom action block on MII.
To do this I used "SAP PRESS - Implementing and configuring SAP MII" Chapter 9.1. This is based on an earlier version of MII and I have noticed some differences with the current version.
So I was wondering if the steps for creating a custom action and deploying it have changed. When I try to deploy my action I get a lot of errors which I did not expect.
My action has to take 3 input parameters and should give one string as output (just to give a reference that it ain't a complex action).
Could anyone provide me a code template or point me to some up to date documentation on creating custom actions in MII?
With kind regards,
Joery
Hi Joery,
Is the Catalog.xml added to the root folder of your jar? (The classes inside the jar can be in nested folder structure).
-
Rutika
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
The xml is at the root level along with a folder META-INF and bin(which contains the file contactScale.class.
I don't think I made a mistake in the xml itself but just to be sure I added it as well:
<ComponentCatalog>
<Category Name = "MettlerToledoScale"
Description = "Classes to communicate with Mettler Toledo scale">
<Component Type = "Action"
Name = "contactScale"
Description = ""
Label = "Contact_Scale"
ClassName = "contactScale.class"
AssemblyName= "MettlerToledo.jar"
Dependencies= ""
HelpFileName= ""
/>
</Category>
</ComponentCatalog>
And in my java code my class extends "ActionReflectionBase" and used the methods GetIconPath(){ return "path to an image"; }, isConfigurable(){ return false; } and Invoke(...) with the logic inside a try block.
Thanks for the replies and ideas.
In the meantime I have deployed a custom action jar file I found on the web, thus it is not an issue with the MII installation.
Also when comparing my xml with the one in that jar file they are verry similar.
The only options felt are a bad code implementation or a problem with the compiler somewhere (altough it is set to the same as the one that MII uses).
Your classname inthe Catalog.xml is incorrect...it should be the full classpath and classname without the .class at the end. Here's an example from the JTA actions:
<Component Type="Action" Name="JTATransactionStart" Description="" Label="JTA Start" ClassName="com.sap.mii.custom.actions.jta.JTAUserTransactionActions" AssemblyName="SAPMIIJTA.jar" Dependencies="" HelpFileName="" />
Sam
Joery, Did you use right JVM to build your class files ? You need to use same JVM which MII server uses .
Hope this helps.
Thanks
Hari
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
It seems I did not, the MII server only has 1.6 and I was using 1.7 on my dev machine.
Changed it now, but the errors remain.
It is as if the class itself cannot be found in the jar file. Do all files in the jar file need to be in the top level or can they be in a folder, for instance in my case the class file is in a folder "bin" which is also pointed to in the catalog.xml.
Just in case it might help I will add the error log. Sorry for the wall of text it causes.
error Creating Component : contactScale/bin/contactScale.class : bin/contactScale.class
[EXCEPTION]
java.lang.ClassNotFoundException: bin/contactScale.class
at com.sap.lhcommon.system.CustomClassLoader.findClass(CustomClassLoader.java:232)
at java.lang.ClassLoader.loadClass(ClassLoader.java:367)
at java.lang.ClassLoader.loadClass(ClassLoader.java:308)
at com.sap.xmii.xacute.components.ComponentCatalogManager.getActionInstance(ComponentCatalogManager.java:767)
at com.sap.xmii.xacute.components.ActionComponent.createInstance(ActionComponent.java:198)
at com.sap.xmii.xacute.components.ComponentCatalogManager.postProcessCustomAssemblyList(ComponentCatalogManager.java:630)
at com.sap.xmii.xacute.components.ComponentCatalogManager.access$100(ComponentCatalogManager.java:69)
at com.sap.xmii.xacute.components.ComponentCatalogManager$JarReaderCustomizer.customize(ComponentCatalogManager.java:1563)
at com.sap.xmii.dao.reader.DatabaseObjectReader.getObjects(DatabaseObjectReader.java:98)
at com.sap.xmii.xacute.components.ComponentCatalogManager.getCustomAssemblyList(ComponentCatalogManager.java:593)
at com.sap.xmii.ejb.sysres.CustomActionsServiceBean.getCustomAssemblyList(CustomActionsServiceBean.java:49)
at sun.reflect.GeneratedMethodAccessor401785.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sap.engine.services.ejb3.runtime.impl.RequestInvocationContext.proceedFinal(RequestInvocationContext.java:47)
at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:166)
at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext$InvocationContextImpl.proceed(AbstractInvocationContext.java:131)
at com.sap.xmii.ejb.common.AdministrationInterceptor.wrapRuntimeExceptions(AdministrationInterceptor.java:50)
at com.sap.xmii.ejb.common.AdministrationInterceptor.assertHasPermission(AdministrationInterceptor.java:38)
at sun.reflect.GeneratedMethodAccessor2912.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sap.engine.services.ejb3.runtime.impl.Interceptors_Application.invoke(Interceptors_Application.java:53)
at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179)
at com.sap.engine.services.ejb3.runtime.impl.Interceptors_StatesTransition.invoke(Interceptors_StatesTransition.java:19)
at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179)
at com.sap.engine.services.ejb3.runtime.impl.Interceptors_Resource.invoke(Interceptors_Resource.java:50)
at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179)
at com.sap.engine.services.ejb3.runtime.impl.Interceptors_Transaction.doWorkWithAttribute(Interceptors_Transaction.java:37)
at com.sap.engine.services.ejb3.runtime.impl.Interceptors_Transaction.invoke(Interceptors_Transaction.java:21)
at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179)
at com.sap.engine.services.ejb3.runtime.impl.Interceptors_MethodRetry.invoke(Interceptors_MethodRetry.java:46)
at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179)
at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:191)
at com.sap.engine.services.ejb3.runtime.impl.Interceptors_StatelessInstanceGetter.invoke(Interceptors_StatelessInstanceGetter.java:23)
at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179)
at com.sap.engine.services.ejb3.runtime.impl.Interceptors_SecurityCheck.invoke(Interceptors_SecurityCheck.java:25)
at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179)
at com.sap.engine.services.ejb3.runtime.impl.Interceptors_ExceptionTracer.invoke(Interceptors_ExceptionTracer.java:17)
at com.sap.engine.services.ejb3.runtime.impl.AbstractInvocationContext.proceed(AbstractInvocationContext.java:179)
at com.sap.engine.services.ejb3.runtime.impl.DefaultInvocationChainsManager.startChain(DefaultInvocationChainsManager.java:138)
at com.sap.engine.services.ejb3.runtime.impl.DefaultEJBProxyInvocationHandler.invoke(DefaultEJBProxyInvocationHandler.java:164)
at $Proxy399.getCustomAssemblyList(Unknown Source)
at com.sap.xapps.xmii.ui.admin.sysres.sysrescomp.CustomActionsComp$JarInfoProvider.getObjectList(CustomActionsComp.java:449)
at com.sap.xapps.xmii.ui.admin.common.table.TableController.requestObjectList(TableController.java:319)
at com.sap.xapps.xmii.ui.admin.common.table.ObservableObjectList.updateCache(ObservableObjectList.java:122)
at com.sap.xapps.xmii.ui.admin.common.table.ObservableObjectList.size(ObservableObjectList.java:110)
at com.sap.tc.webdynpro.progmodel.context.ModelElementList.size(ElementList.java:1776)
at com.sap.tc.webdynpro.progmodel.context.Node.size(Node.java:543)
at com.sap.xapps.xmii.ui.admin.sysres.sysrescomp.CustomActionsComp.refreshContext(CustomActionsComp.java:202)
at com.sap.xapps.xmii.ui.admin.sysres.sysrescomp.wdp.InternalCustomActionsComp.refreshContext(InternalCustomActionsComp.java:215)
at com.sap.xapps.xmii.ui.admin.sysres.sysrescomp.CustomActionsView.okDeployAction(CustomActionsView.java:653)
at com.sap.xapps.xmii.ui.admin.sysres.sysrescomp.wdp.InternalCustomActionsView.wdInvokeEventHandler(InternalCustomActionsView.java:443)
at com.sap.tc.webdynpro.progmodel.generation.DelegatingView.invokeEventHandler(DelegatingView.java:142)
at com.sap.tc.webdynpro.clientserver.event.CustomEventProcessor.handleServerEvent(CustomEventProcessor.java:46)
at com.sap.tc.webdynpro.clientserver.phases.ProcessingEventPhase.doHandleServiceEvent(ProcessingEventPhase.java:207)
at com.sap.tc.webdynpro.clientserver.phases.ProcessingEventPhase.execute(ProcessingEventPhase.java:96)
at com.sap.tc.webdynpro.clientserver.window.WindowPhaseModel.processRequestPartly(WindowPhaseModel.java:162)
at com.sap.tc.webdynpro.clientserver.window.WindowPhaseModel.doProcessRequest(WindowPhaseModel.java:110)
at com.sap.tc.webdynpro.clientserver.window.WindowPhaseModel.processPhaseLoop(WindowPhaseModel.java:101)
at com.sap.tc.webdynpro.clientserver.window.WebDynproWindow.processPhaseLoop(WebDynproWindow.java:548)
at com.sap.tc.webdynpro.clientserver.cal.AbstractClient.handleWindowHierarchyChanges(AbstractClient.java:111)
at com.sap.tc.webdynpro.clientserver.cal.AbstractClient.executeTasks(AbstractClient.java:59)
at com.sap.tc.webdynpro.clientserver.cal.ClientApplication.doExecute(ClientApplication.java:1671)
at com.sap.tc.webdynpro.clientserver.cal.ClientApplication.doProcessing(ClientApplication.java:1485)
at com.sap.tc.webdynpro.clientserver.session.ApplicationSession.doApplicationProcessingStandalone(ApplicationSession.java:908)
at com.sap.tc.webdynpro.clientserver.session.ApplicationSession.doApplicationProcessing(ApplicationSession.java:880)
at com.sap.tc.webdynpro.clientserver.session.ApplicationSession.doProcessing(ApplicationSession.java:357)
at com.sap.tc.webdynpro.clientserver.session.RequestManager.doProcessing(RequestManager.java:326)
at com.sap.tc.webdynpro.serverimpl.core.AbstractDispatcherServlet.doContent(AbstractDispatcherServlet.java:87)
at com.sap.tc.webdynpro.serverimpl.wdc.DispatcherServlet.doContent(DispatcherServlet.java:89)
at com.sap.tc.webdynpro.serverimpl.core.AbstractDispatcherServlet.doPost(AbstractDispatcherServlet.java:62)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
at com.sap.engine.services.servlets_jsp.server.Invokable.invoke(Invokable.java:152)
at com.sap.engine.services.servlets_jsp.server.runtime.RequestDispatcherImpl.doWork(RequestDispatcherImpl.java:367)
at com.sap.engine.services.servlets_jsp.server.runtime.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:490)
at com.sap.tc.webdynpro.serverimpl.wdc.ForwardServlet.doPost(ForwardServlet.java:63)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
at com.sap.engine.services.servlets_jsp.server.Invokable.invoke(Invokable.java:152)
at com.sap.engine.services.servlets_jsp.server.Invokable.invoke(Invokable.java:38)
at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.runServlet(HttpHandlerImpl.java:457)
at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.handleRequest(HttpHandlerImpl.java:210)
at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:441)
at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:430)
at com.sap.engine.services.servlets_jsp.filters.DSRWebContainerFilter.process(DSRWebContainerFilter.java:38)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78)
at com.sap.engine.services.servlets_jsp.filters.ServletSelector.process(ServletSelector.java:81)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78)
at com.sap.engine.services.servlets_jsp.filters.ApplicationSelector.process(ApplicationSelector.java:278)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78)
at com.sap.engine.services.httpserver.filters.WebContainerInvoker.process(WebContainerInvoker.java:81)
at com.sap.engine.services.httpserver.chain.HostFilter.process(HostFilter.java:9)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78)
at com.sap.engine.services.httpserver.filters.ResponseLogWriter.process(ResponseLogWriter.java:60)
at com.sap.engine.services.httpserver.chain.HostFilter.process(HostFilter.java:9)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78)
at com.sap.engine.services.httpserver.filters.DefineHostFilter.process(DefineHostFilter.java:27)
at com.sap.engine.services.httpserver.chain.ServerFilter.process(ServerFilter.java:12)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78)
at com.sap.engine.services.httpserver.filters.MonitoringFilter.process(MonitoringFilter.java:29)
at com.sap.engine.services.httpserver.chain.ServerFilter.process(ServerFilter.java:12)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78)
at com.sap.engine.services.httpserver.filters.SessionSizeFilter.process(SessionSizeFilter.java:26)
at com.sap.engine.services.httpserver.chain.ServerFilter.process(ServerFilter.java:12)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78)
at com.sap.engine.services.httpserver.filters.MemoryStatisticFilter.process(MemoryStatisticFilter.java:57)
at com.sap.engine.services.httpserver.chain.ServerFilter.process(ServerFilter.java:12)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78)
at com.sap.engine.services.httpserver.filters.DSRHttpFilter.process(DSRHttpFilter.java:43)
at com.sap.engine.services.httpserver.chain.ServerFilter.process(ServerFilter.java:12)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78)
at com.sap.engine.services.httpserver.server.Processor.chainedRequest(Processor.java:475)
at com.sap.engine.services.httpserver.server.Processor$FCAProcessorThread.process(Processor.java:269)
at com.sap.engine.services.httpserver.server.rcm.RequestProcessorThread.run(RequestProcessorThread.java:56)
at com.sap.engine.core.thread.execution.Executable.run(Executable.java:122)
at com.sap.engine.core.thread.execution.Executable.run(Executable.java:101)
at com.sap.engine.core.thread.execution.CentralExecutor$SingleThread.run(CentralExecutor.java:328)
User | Count |
---|---|
12 | |
7 | |
3 | |
2 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.