2013-01-20 6 views
1

j'ai un problème de conception:CXF conception service Web qestion

Je vais décrire le problème en utilisant un exemple:

@WebService 
public interface GlossaryWebService { 
    @Secured("READ") 
    public void foo(); 

    @Secured("READ") 
    public void goo(); 
} 

Mise en œuvre:

@WebService 
public class GlossaryWebServiceImpl implements GlossaryWebService{ 


    private GlossaryService glossaryService; 

    @Override 
    public void foo() { 
     glossaryService.foo(); 
    } 

    @Override 
    public void goo() { 
     glossaryService.goo(); 
    } 
} 

Interface:

public interface GlossaryService { 
    public void foo(); 
    public void goo(); 
} 

Mise en œuvre:

public Class GlossaryServiceImpl extends GlossaryService{ 

    @Override 
    public void foo() { 
     // impl 
    } 

    @Override 
    public void goo() { 
     // impl 
    } 
} 

Comme vous pouvez le voir, nous avons GlossaryWebServiceImpl la mise en œuvre GlossaryWebService et GlossaryServiceImpl mise en œuvre GlossaryService!

le problème est que le GlossaryWebServiceImpl agit en tant que façade (pour GlossaryService), et que cela provoque la duplication de code . Les méthodes de GlossaryService doivent également être dans GlossaryWebService et les méthodes de GlossaryServiceImpl doivent également figurer dans GlossaryWebServiceImpl!

Je peux enregistrer la création de GlossaryWebServiceImpl en rendant GlossaryServiceImpl pour implémenter GlossaryWebService et par cela nous aurons seulement 2 iterfaces et une implémentation!

mais cela fait aussi problème parce que je veux que l'annotation @Secured (sur GlossaryWebService) à réaliser que lorsque vous passez par le service Web et non lors de l'appel aux méthodes sur GlossaryServiceImpl!

Si quelqu'un a une suggestion d'idée, ce serait très utile! Merci d'avance.

Répondre

0

Depuis GlossaryWebServiceImpl est votre point d'entrée lorsque accessng votre formulaire de service Web Service, je mettrais tous les paramètres liés au service Web (rôles, annotations othe) dans et mettre toute la logique métier dans GlossaryServiceImpl:

@WebService 
public class GlossaryWebService{ 


    private GlossaryService glossaryService; 

    @Secured("READ") 
    public void foo() { 
     glossaryService.foo(); 
    } 

    @Secured("READ") 
    public void goo() { 
     glossaryService.goo(); 
    } 
} 
Questions connexes