public void recoverActivity( final String channel, final long activityId, final String action, FaultInfo fault) { // TODO: better translation here? final FaultData fdata = (fault != null) ? new FaultData(fault.getFaultName(), null, fault.getExplanation()) : null; _vpu.inject( new JacobRunnable() { private static final long serialVersionUID = 3168964409165899533L; public void run() { ActivityRecoveryChannel recovery = importChannel(channel, ActivityRecoveryChannel.class); __log.info( "ActivityRecovery: Recovering activity " + activityId + " with action " + action + " on channel " + recovery); if (recovery != null) { if ("cancel".equals(action)) recovery.cancel(); else if ("retry".equals(action)) recovery.retry(); else if ("fault".equals(action)) recovery.fault(fdata); } } }); }
@Test public void testFault() throws Exception { assertEquals(operationInfo.getFaults().size(), 0); QName faultName = new QName("urn:test:ns", "fault"); operationInfo.addFault( faultName, new QName("http://apache.org/hello_world_soap_http", "faultMessage")); assertEquals(operationInfo.getFaults().size(), 1); FaultInfo fault = operationInfo.getFault(faultName); assertNotNull(fault); assertEquals(fault.getFaultName().getLocalPart(), "fault"); assertEquals(fault.getName().getLocalPart(), "faultMessage"); assertEquals(fault.getName().getNamespaceURI(), "http://apache.org/hello_world_soap_http"); operationInfo.removeFault(faultName); assertEquals(operationInfo.getFaults().size(), 0); try { operationInfo.addFault(null, null); fail("should get NullPointerException"); } catch (NullPointerException e) { assertEquals("Fault Name cannot be null.", e.getMessage()); } try { operationInfo.addFault(faultName, null); operationInfo.addFault(faultName, null); fail("should get IllegalArgumentException"); } catch (IllegalArgumentException e) { assertEquals( e.getMessage(), "A fault with name [{urn:test:ns}fault] already exists in this operation"); } }