on 07-14-2006 11:00 AM
Hi gurus,
I'm very new to adapter module.
I tried with the howto guide and I develelop a really sample module just to check if I'm able to write the audit log.
The code is really simple:
/*
Created on Jul 11, 2006
*
To change the template for this generated file go to
Window>Preferences>Java>Code Generation>Code and Comments
*/
package it.elsag.xi.adapter.module;
import javax.ejb.CreateException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import com.sap.aii.af.mp.module.*;
import com.sap.aii.af.ra.ms.api.*;
import com.sap.aii.af.service.auditlog.Audit;
import com.sap.aii.af.service.auditlog.AuditDirection;
import com.sap.aii.af.service.auditlog.AuditLogStatus;
import com.sap.aii.af.service.auditlog.AuditMessageKey;
/**
@ejbHome <{com.sap.aii.af.mp.module.ModuleHome}>
@ejbLocal <{com.sap.aii.af.mp.module.ModuleLocal}>
@ejbLocalHome <{com.sap.aii.af.mp.module.ModuleLocalHome}>
@ejbRemote <{com.sap.aii.af.mp.module.ModuleRemote}>
@stateless
*/
public class MyAdapterModule implements SessionBean, Module {
final String auditStr = "*** AFWJavaMap - ";
private SessionContext myContext;
private AuditMessageKey amk = null ;
private ModuleContext mc;
private Object obj = null; // Handler to get Principle data
private Message msg = null; // Handler to get Message object
public void ejbRemove() {
}
public void ejbActivate() {
}
public void ejbPassivate() {
}
public void setSessionContext(SessionContext context) {
myContext = context;
}
public void ejbCreate() throws CreateException {
}
public ModuleData process(
ModuleContext moduleContext,
ModuleData inputModuleData)
throws ModuleException {
obj = inputModuleData.getPrincipalData();
msg = (Message) obj;
if (msg.getMessageDirection() == MessageDirection.INBOUND)
amk = new AuditMessageKey(msg.getMessageId(),
AuditDirection.INBOUND);
else
amk = new AuditMessageKey(msg.getMessageId(),
AuditDirection.OUTBOUND);
Audit.addAuditLogEntry(amk, AuditLogStatus.SUCCESS,
"MyAdapterModule: Module called (mojitodaiquiri)");
return inputModuleData;
}
}
but when I try I get this error (from the visual admin):
[EXCEPTION]
com.sap.engine.services.ejb.exceptions.BaseTransactionRolledbackLocalException: Exception thrown in method process. The transaction is marked for rollback.
at com.sap.aii.af.mp.module.ModuleLocalLocalObjectImpl0.process(ModuleLocalLocalObjectImpl0.java:118)
at com.sap.aii.af.mp.ejb.ModuleProcessorBean.process(ModuleProcessorBean.java:252)
at com.sap.aii.af.mp.processor.ModuleProcessorLocalLocalObjectImpl0.process(ModuleProcessorLocalLocalObjectImpl0.java:103)
at com.sap.aii.af.listener.AFWListenerBean.onMessage(AFWListenerBean.java:243)
at com.sap.aii.af.listener.AFWListenerLocalObjectImpl0.onMessage(AFWListenerLocalObjectImpl0.java:103)
at com.sap.aii.af.ra.ms.impl.ServicesImpl.deliver(ServicesImpl.java:253)
at com.sap.aii.adapter.xi.ms.XIEventHandler.onDeliver(XIEventHandler.java:838)
at com.sap.aii.af.ra.ms.impl.core.queue.ReceiveConsumer.invokeHandler(ReceiveConsumer.java:351)
at com.sap.aii.af.ra.ms.impl.core.queue.ReceiveConsumer.onMessage(ReceiveConsumer.java:100)
at com.sap.aii.af.ra.ms.impl.core.queue.Queue.run(Queue.java:831)
at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37)
at java.security.AccessController.doPrivileged(Native Method)
at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:100)
at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:170)
Caused by: java.lang.NullPointerException
at it.elsag.xi.adapter.module.MyAdapterModule.process(MyAdapterModule.java:58)
at com.sap.aii.af.mp.module.ModuleLocalLocalObjectImpl0.process(ModuleLocalLocalObjectImpl0.java:103)
... 13 more
java.lang.NullPointerException
at it.elsag.xi.adapter.module.MyAdapterModule.process(MyAdapterModule.java:58)
at com.sap.aii.af.mp.module.ModuleLocalLocalObjectImpl0.process(ModuleLocalLocalObjectImpl0.java:103)
at com.sap.aii.af.mp.ejb.ModuleProcessorBean.process(ModuleProcessorBean.java:252)
at com.sap.aii.af.mp.processor.ModuleProcessorLocalLocalObjectImpl0.process(ModuleProcessorLocalLocalObjectImpl0.java:103)
at com.sap.aii.af.listener.AFWListenerBean.onMessage(AFWListenerBean.java:243)
at com.sap.aii.af.listener.AFWListenerLocalObjectImpl0.onMessage(AFWListenerLocalObjectImpl0.java:103)
at com.sap.aii.af.ra.ms.impl.ServicesImpl.deliver(ServicesImpl.java:253)
at com.sap.aii.adapter.xi.ms.XIEventHandler.onDeliver(XIEventHandler.java:838)
at com.sap.aii.af.ra.ms.impl.core.queue.ReceiveConsumer.invokeHandler(ReceiveConsumer.java:351)
at com.sap.aii.af.ra.ms.impl.core.queue.ReceiveConsumer.onMessage(ReceiveConsumer.java:100)
at com.sap.aii.af.ra.ms.impl.core.queue.Queue.run(Queue.java:831)
at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37)
at java.security.AccessController.doPrivileged(Native Method)
at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:100)
at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:170)
The line whereI get the error is:
if (msg.getMessageDirection() == MessageDirection.INBOUND)
so I think msg is null.
Can anyone help me? Thank you.
PS. How can I put some trace in the module?
Gianni
Hi Gianni,
I have a try and catch block around this, so that the msg will be processed, but if msg is really null you have to check if you get principleData.
Which Adapter do you use?
Regards
Philipp
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
I just have a test with the file adapter and still I have the same problem.
I attach the j2ee-application-engine.xml :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application-j2ee-engine SYSTEM "application-j2ee-engine.dtd">
<application-j2ee-engine>
<reference
reference-type="weak">
<reference-target
provider-name="sap.com"
target-type="library">com.sap.aii.af.lib</reference-target>
</reference>
<reference
reference-type="weak">
<reference-target
provider-name="sap.com"
target-type="service">com.sap.aii.adapter.xi.svc</reference-target>
</reference>
<reference
reference-type="hard">
<reference-target
provider-name="sap.com"
target-type="service">com.sap.aii.af.svc</reference-target>
</reference>
<reference
reference-type="hard">
<reference-target
provider-name="sap.com"
target-type="service">com.sap.aii.af.cpa.svc</reference-target>
</reference>
<provider-name>sap.com</provider-name>
<fail-over-enable
mode="disable"/>
<start-up
mode="always"/>
</application-j2ee-engine>
I keep on ask If same angel teach me how to put some trace.
Thanks
Gianni
For which type of adapter you are trying to use this module? what you get in the PrincipalData and supplementaldata depends on the type of adapter.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
87 | |
10 | |
10 | |
10 | |
7 | |
6 | |
6 | |
5 | |
5 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.