OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

sca-assembly message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: NEW ISSUE: Test 6019 assumed injection behavior




TARGET: SCA Assembly Conformance Tests

DESCRIPTION:

Test case ASM_6019 verifies an autowire reference with multiplicity  
0..n that has no matching services still runs. The component  
implementation, org.oasisopen.sca.test.service1Impl4, has an array  
type for the autowire reference. The operation that is invoked on that  
implementation iterates the array and invokes wired services without  
checking for null. Some runtimes may not inject the reference if no  
matching wires are found. Consequently, this results in an NPE since  
the reference member variable is not set:

@Service(Service1.class)
public class service1Impl4 implements Service1 {
	
	@Property
	public String serviceName = "service1";
	// Required = false + an array -> multiplicity 0..n
	@Reference(required=false)
	public Service1[] reference1 = null;

	public String operation1(String input) {
		String result = serviceName + " operation1 invoked";
		// Call each of the references in the array, concatenating the results
		for( int i=0 ; i < reference1.length; i++ ) {
			result = result.concat(" ");
			result = result.concat( reference1[i].operation1(input) );
		} // end for
		return result;
	}

}


SVN Version: 426

PROPOSAL:

Code defensively, assuming the reference may not be injected. A  
potential replacement is:

@Service(Service1.class)
public class service1Impl4 implements Service1 {
	
	@Property
	public String serviceName = "service1";

	@Reference(required=false)
	public Service1[] reference1;

	public String operation1(String input) {
		StringBuilder result = new StringBuilder(serviceName).append("  
operation1 invoked");
	        for (Service1 aReference1 : reference1) {
             		String value = aReference1.operation1(input);
             		result = result.append(" ").append(value);
         	}
		return result.toString();
	}

}



[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]