Missing warning message when verifying connformance item 50011
--------------------------------------------------------------

                 Key: TUSCANY-2770
                 URL: https://issues.apache.org/jira/browse/TUSCANY-2770
             Project: Tuscany
          Issue Type: Bug
          Components: Java SCA Assembly Model
    Affects Versions: Java-SCA-1.3
            Reporter: Shu Chao Wan
            Priority: Minor


I have a question about conformance item 50011 and hope some one could help me.
 
Conformance item 50011 tells something about some constraints about interface 
of <component>'s <reference>.  And here is the detailed description:
 "A reference has zero or one interface, which describes the operations 
required by the reference. The interface is described by an interface element 
which is a child element of the reference element. If no interface is 
specified, then the interface specified for the reference in the componentType 
of the implementation is in effect. If an interface is declared for a component 
reference it MUST provide a compatible superset of the interface declared for 
the equivalent reference in the componentType of the implementation, i.e. 
provide the same operations or a superset of the operations defined by the 
implementation for the reference. "
In my opinion, I think it is to say that interface declared for a component 
reference must have equal or more operations than its implementation acturally 
need. So I write a composite file wire.composite and testcase to verify it.
 
-----------------------------
wire.composite
-----------------------------
<composite>...
   <component name="FComponent">
     <implementation.java 
class="org.apache.tuscany.sca.vtest.assembly.composite.impl.FServiceImpl"/>
     <reference name="d">
        <interface.java 
interface="org.apache.tuscany.sca.vtest.assembly.composite.DSubService" />
     </reference>
     <reference name="c">
         <interface.java 
interface="org.apache.tuscany.sca.vtest.assembly.composite.CSubService" />
     </reference>
  </component>
   <component name="CComponent">
        <implementation.java 
class="org.apache.tuscany.sca.vtest.assembly.composite.impl.CServiceImpl"/>
        <service name="CService"> 
            <interface.java 
interface="org.apache.tuscany.sca.vtest.assembly.composite.CService"/>
        </service>     
    </component>
    <component name="DComponent">
        <implementation.java 
class="org.apache.tuscany.sca.vtest.assembly.composite.impl.DServiceImpl"/>
        <service name="DService"> 
            <interface.java 
interface="org.apache.tuscany.sca.vtest.assembly.composite.DService" />
        </service>        
    </component>    
    <wire source="FComponent/d" target="DComponent" />
    <wire source="FComponent/c" target="CComponent" />
</composite>
 
---------------------------
FServiceImpl.java
---------------------------
@Service(FService.class)
public class FServiceImpl implements FService {
    @Reference
    protected CService c;
    
    @Reference
    protected DService d;
}
 
Here, CSubService and DSubService are sub sets of CService and DService 
respectively.
 
When loading this composite file, I haven't got any error message or even 
warning message, which supposed to appear. 
And when I switch the CSubService to  CSuperService and DSubService to 
DSuperService (CSuperService and DSuperService are super sets of CService and 
DService respectively), I got warning message this time.
WARNING: Component reference interface incompatible with reference interface: 
Component = FComponent Reference = d
WARNING: Component reference interface incompatible with reference interface: 
Component = FComponent Reference = c
 
It seems that it works just on the opposite to the specification. Is there 
anything wrong with it? 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to