Hi,
I'm trying to use the new fault actions in Oracle SOA Suite 12c (12.1.3.0) invokeWS and enqueue.
I've done the following:
fault-policies.xml
<faultName name="custom:MyFault" xmlns:custom="http://xmlns.oracle.com/Application1/Dummy/WebServiceB"
path="SOA\WSDLs\dummybpelprocess_client_ep.wsdl">
<condition>
<action ref="default-enqueue"/>
</condition>
</faultName>
<Action id="default-ws">
<invokeWS uri="http://host:7003/soa-infra/services/default/WebServiceHandler/webservicehandlerbpel_client_ep?WSDL|webservicehandlerbpel_client_ep|WebServiceHandlerBPEL_pt"/>
<!-- format - <Absolute wsdl path>|service name|port name -->
</Action>
<Action id="default-enqueue">
<!-- enqueue uri="eis/aq/aqjmsuserDataSource"/ -->
<enqueue uri="jdbc:oracle:thin:@host:1521:orcl#user/userpassword#USERQUEUE" />
<!-- QueueURI format - jdbc:oracle:thin:@<host>:<port>:<sid>#<un>/<pw>#queue -->
</Action>
Webservice Handler (which is the webservice to be invoked by the faultpolicy) is constructed 1-way pattern, 1 operation, 1 port and using the following schema:
<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://xmlns.oracle.com/pcbpel/errorHandling"
xmlns:tns="http://xmlns.oracle.com/pcbpel/errorHandling"
elementFormDefault="qualified">
<element name="RejectedMessage" type="tns:RejectedMessageType"/>
<complexType name="RejectedMessageType">
<sequence>
<!-- base64 encoded strings" -->
<element name="MessageHeader" type="string"/>
<element name="MessagePayload" type="string"/>
<element name="RejectionReason" type="string"/>
</sequence>
<attribute name="RejectionId" type="string"/>
</complexType>
</schema>
The scenario is the following:
- Webservice A invokes WebService B
- Webservice B has defined a BusinessFault
- Webservice A has defined faultbindings using the faulpolicies from the previous snippet, for the reference of WebserviceB
- The BusinessFault is thrown by WebServiceB
- The fault policy is not able to neither enque or call the webservce to handle the businessexception
- A NullPointerException is shown in the logs
- The error is also present if enqueue os invokeWS are used in retryFailureAction of a retry action
- The error is only present for enqueue or invokeWS actions (I didn't try fileAction)
- Traditional actions (such as retry, humanintervention, temrinate) are working properly for businessfaults
The error in logs is the following:
|
resolveAndrecover: error in fault resolution:java.lang.NullPointerException |
|
at com.collaxa.cube.engine.fp.BPELRecoverFault.recoverFault(BPELRecoverFault.java:102) at oracle.fabric.CubeServiceEngine.recoverFault(CubeServiceEngine.java:2195) at oracle.integration.platform.faultpolicy.RecoverFault.recoverAndChain(RecoverFault.java:497) at oracle.integration.platform.faultpolicy.RecoverFault.resolveAndRecover(RecoverFault.java:337) at oracle.integration.platform.faultpolicy.FaultRecoveryManagerImpl.resolveAndRecover(FaultRecoveryManagerImpl.java:372) at oracle.soa.tracking.fabric.service.se.ServiceEngineFaultRecoveryServiceImpl.recoverFault(ServiceEngineFaultRecoveryServiceImpl.java:116) at oracle.soa.tracking.fabric.service.se.CubeServiceEngineAuditServiceImpl.recoverFault(CubeServiceEngineAuditServiceImpl.java:502) at com.collaxa.cube.engine.ext.common.FaultPolicyHandler.resolveAndRecover(FaultPolicyHandler.java:115) at com.collaxa.cube.engine.ext.common.InvokeHandler.handleException(InvokeHandler.java:715) at com.collaxa.cube.engine.ext.common.InvokeHandler.__callback(InvokeHandler.java:784) at com.collaxa.cube.engine.ext.common.InvokeHandler.handleNormalInvoke(InvokeHandler.java:657) at com.collaxa.cube.engine.ext.common.InvokeHandler.handle(InvokeHandler.java:143) at com.collaxa.cube.engine.ext.common.InvokeHandler.expire(InvokeHandler.java:1371) at com.collaxa.cube.engine.ext.bpel.common.wmp.BPELInvokeWMP.expire(BPELInvokeWMP.java:62) at com.collaxa.cube.engine.CubeEngine.expireActivity(CubeEngine.java:3358) at com.collaxa.cube.engine.CubeEngine._expireActivity(CubeEngine.java:1621) at com.collaxa.cube.engine.CubeEngine.expireActivity(CubeEngine.java:1557) at com.collaxa.cube.engine.CubeEngine.expireActivity(CubeEngine.java:1478) at com.collaxa.cube.ejb.impl.CubeActivityManagerBean.expireActivity(CubeActivityManagerBean.java:115) at com.collaxa.cube.ejb.impl.CubeActivityManagerBean.expireActivity(CubeActivityManagerBean.java:72) at com.collaxa.cube.ejb.impl.bpel.BPELActivityManagerBean_8dvvts_ICubeActivityManagerLocalBeanImpl.__WL_invoke(Unknown Source) at weblogic.ejb.container.internal.SessionLocalMethodInvoker.invoke(SessionLocalMethodInvoker.java:33) at com.collaxa.cube.ejb.impl.bpel.BPELActivityManagerBean_8dvvts_ICubeActivityManagerLocalBeanImpl.expireActivity(Unknown Source) at com.collaxa.cube.engine.dispatch.message.instance.ExpirationMessageHandler.handle(ExpirationMessageHandler.java:58) at com.collaxa.cube.engine.dispatch.DispatchHelper.handleMessage(DispatchHelper.java:153) at com.collaxa.cube.engine.dispatch.BaseDispatchTask.process(BaseDispatchTask.java:132) at com.collaxa.cube.engine.dispatch.BaseDispatchTask.run(BaseDispatchTask.java:90) at com.collaxa.cube.engine.dispatch.WMExecutor$W.run(WMExecutor.java:239) at weblogic.work.j2ee.J2EEWorkManager$WorkWithListener.run(J2EEWorkManager.java:184) at weblogic.work.ExecuteThread.execute(ExecuteThread.java:311) at weblogic.work.ExecuteThread.run(ExecuteThread.java:263) |
I already made sure I had all the artifacts for the AQ queue:
-database
-table
-queue
-permissions
Do you have the same problem?
Are you able to use this new actions?
Please advise
Thanks in advance.
P.S: Related documentation: http://docs.oracle.com/middleware/1213/soasuite/develop-soa/bpel-fault-handling.htm#CHDCIBDF