Metro applique la politique d'exécution soit du WSDL ou le fichier de configuration WSIT-client.xml. C'est pourquoi aucun code n'est généré lié aux stratégies. Selon this post il n'est pas possible pour le moment de faire la programmation.
This tutorial explique assez bien certaines des choses que vous pouvez faire avec WSS, et bien que tout ne s'applique probablement pas dans ce cas, c'est toujours une bonne lecture.
La façon la plus simple que j'ai trouvé de générer un client avec le soutien de WSS est en utilisant le script wsimport
de Metro:
cd metro/bin/
mkdir src target
./wsimport.sh -s src -d target -extension -Xendorsed -verbose YourService.wsdl
Installez ensuite Metro dans votre serveur d'applications (copier les libs aux bons endroits ou exécutez le script ant):
ant -f metro-on-glassfish.xml
Ensuite, mettez votre fichier WSDL local dans votre classpath (par exemple votre dossier de ressources), de sorte que Metro peut l'obtenir à l'exécution d'appliquer les politiques de votre classe générée YourService
:
private final static URL YOURSERVICE_WSDL_LOCATION;
// This is enough, you don't need the wsdlLocation attribute
// on the @WebServiceClient annotation if you have this.
static {
YOURSERVICE_WSDL_LOCATION =
CustomerService.class.getClassLoader().getResource("YourService.wsdl");
}
public YourService() {
super(YOURSERVICE_WSDL_LOCATION,
new QName("http://tempuri.org/", "YourService"));
}
Et si vous voulez WS-Addressing vous pourriez avoir besoin d'ajouter la fonctionnalité manuellement à votre méthode (Metro ne m'a jamais généré pour, donc je dois toujours ajouter moi-même) contraignant.
@WebEndpoint(name = "WSHttpBinding_IYourService")
public IYourService getWSHttpBindingIYourService() {
WebServiceFeature wsAddressing = new AddressingFeature(true);
IYourService service =
super.getPort(new QName("http://xmlns.example.com/services/Your",
"WSHttpBinding_IYourService"), IYourService.class,
wsAddressing);
return service;
}