2013-08-12 2 views
0

좋은 하루Castor Hashtable 다형성

나는 castor를 사용하여 추상 클래스의 여러 구현을 가진 HashTable을 구성하려고합니다. 여기에 부모 "설정"입니다

<class name="com.Config"> 
    <map-to xml="config" /> 
    <field name="rulesMap" collection="hashtable"> 
     <bind-xml auto-naming="deriveByClass" > 
      <class name="org.exolab.castor.mapping.MapItem"> 
       <field name="key" type="java.lang.String"> 
        <bind-xml name="name" node="attribute" /> 
       </field> 
       <field name="value" type=com.Rule"> 

       </field> 
      </class> 
     </bind-xml> 
    </field> 
</class> 

'com.Rule'내가이

<config> 
<rule-impl1 name="ruleType1Instance1" ruleField="field" /> 
    <rule-impl2 name="ruleType2Instance2" ruleField="field" ruleImpl2Field1="..." /> 
</config> 

답변

0

I처럼 보이는 XML 구조체를하고자하는 하루의 끝에서 추상 클래스와 입니다 정확한 대답을하기에 충분한 세부 사항이나 질문이 여기에 잘 형성되어 있는지 확신 할 수 없지만 나는 꽤 비슷한 것을하고 있었고 어떤 장애물을 맞았습니다. 나는 2 센트를 줄 것이라고 생각했다. 다른 XML 프레임 워크와 마찬가지로 Castor에 익숙하지도 않습니다. Castor는 자동 마샬링/언 마샬링을 사용하여 코드를 직접 작성하는 대신 우리가 원하는 시점을 결정합니다. 우리가 수동으로이 작업을 수행했다면 추상 클래스를 확장하는 특정 클래스에 대한 언 마샬링을 결정할 수있을 것이라고 생각했습니다.

내 면책 조항이 모두 끝나면 어떻게 할 수 있습니까?

** 당신이 요청/응답에 필드를 추가 할 경우,이 같은 것을 만들 :

public class RuleContainer { 
private RuleType ruleType; // possibly build enum or other non-java equivalent 
private RuleImpl1 ruleImpl1; 
private RuleImpl2 ruleImpl2; 
private RuleImpl...N ruleImpl...N; 
// getters & setters, etc 
} 

그런 다음 테이블의 값이 변경

<field name="value" type="com.RuleContainer"></field> 

에와 당신의 매핑을 포함 RuleContainer의

<class name="com.RuleContainer"> 
    <field name="ruleType" type="com.RuleType" 
    <field name="ruleImpl1" type="com.RuleImpl1"> 
    <field name="ruleImpl2" type="com.RuleImpl2"> 
    <field name="ruleImpl...N" type="com.RuleImpl...N"> 
</class> 

도 이러한 구현의 매핑을 포함 할 수 있습니다. 봐. 내 경우에는 내가 별도의 파일로 각 구현 매핑을 세분화하고 부모 파일에 그 외부 매핑을 포함하도록

<include href="" /> 

태그를 사용했습니다.

이 모두는 해당 RuleType 필드를 사용하여 RuleContainer의 어떤 규칙이 유효한지 알아냅니다 (나머지는 Castor 기본값이 "false"로되어 있으므로 null이됩니다). 규칙의 각 구현을 사용하기위한 논리는 거기서부터 작성하는 것이 간단합니다. 희망이 도움이됩니다.