2010-02-05 8 views
0

Est-il possible de diviser un service Web en plusieurs classes et de fournir un seul chemin d'accès au service Web?Possibilité de diviser un service JAX-WS entre plusieurs fichiers source?

Je sais que ce n'est pas possible en raison des valeurs du modèle d'URL en double. Il illustre en quelque sorte où nous vouloir aller :)

<endpoint name="OneBigService" 
      implementation="SmallImpl1" 
      url-pattern="/OneBigService"/> 

<endpoint name="OneBigService" 
      implementation="SmallImpl2" 
      url-pattern="/OneBigService"/> 

En gros, comment les éviter d'avoir une classe de @WebService monolithique?

Merci!

Rob

Répondre

2

Est-il possible de diviser un service Web pour plusieurs classes et encore fournir un seul chemin au service Web?

N ° A URI est un point de connexion à une service Web (défini par le Port/Endpoint).

Fondamentalement, comment éviter d'avoir une classe @WebService monolithique?

Eh bien, à mon avis, la vraie question est plus quand dois-je utiliser plusieurs Port/Endpoint? Et je serais tenté de répondre: regrouper/diviser les choses logiquement.

Par exemple, alors il judicieux pour un service Calculator pour exposer add, subtract, multiply et divide opérations, j'utiliser un autre service pour exposer une opération getQuote.

Maintenant, vous pouvez toujours diviser la logique en plusieurs classes et leur déléguer à partir de votre @WebService.

+0

La raison en est que plus de points finaux signifient plus de douleur côté client lors de la spécification des services. Les deux services web que je connais sont Rally et VMware, tous deux avec une quantité massive d'API mais toujours une URL de service Web. C'est génial pour moi en tant que développeur de client parce que je n'ai pas à me demander à quelle URL cette API est (encore un vote mais parce que maintenant je sais avec certitude que je ne peux pas le casser :) –

+0

Je ne sais pas pense que Pascal a répondu à la question. Rob demandait de mettre plusieurs ports dans un seul service, pas de mettre plusieurs opérations dans un seul port. WSDL autorise plusieurs ports dans un seul service (et permet ainsi de multiples ports décrits par un seul URI WSDL), et la question de Rob est de savoir si un tel WSDL peut être généré par JAX-WS. J'aimerais connaître la réponse aussi! – Aaron

+0

... ou au lieu de plusieurs ports dans un seul service, peut-être plusieurs services dans un même WSDL? – Aaron

1

Vous pouvez déléguer la fonctionnalité à une classe composée de votre classe de service Web:

@WebService 
public class OneBigService { 
    ISmall delegate = new SmallImpl1(); // or new SmallImpl2(); 

    @WebMethod 
    public Result webMethodStuff() { 
     // do something with delegate 
    } 
}