Question

Est-il possible avec Axis2 et Eclipse de générer un client de service Web et de le faire utiliser les types java que vous avez déjà dans les packages au lieu de créer ses propres types. La raison étant bien sûr si le type A est déjà créé et qu'il crée son propre type A, je ne peux pas simplement affecter une variable de type A à une variable de type B.

Le fichier WSDL est généré à partir d'un service Web déployé sur un serveur d'applications. S'il n'est pas possible de le générer à partir de cela, il serait possible de générer un client à partir des fichiers Java existants.

Était-ce utile?

La solution

Si vous souhaitez vraiment réutiliser des classes existantes, vous pouvez appeler directement l'API Axis2 sans générer de client à l'aide de wsdl2java. Vous trouverez ci-dessous un code relativement simple pour appeler un service Web. Il vous suffit de renseigner le point de terminaison du service Web, la méthode QName, les classes de retour attendu et les arguments du service. Vous pouvez réutiliser vos classes existantes en tant que valeurs ou arguments de retour.

Si votre service Web est assez compliqué, vous constaterez peut-être que vous devez aller plus loin dans l'API pour que cette approche fonctionne.

serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();

EndpointReference targetEPR = new EndpointReference("http://myservice");

options.setTo(targetEPR);

QName methodName = new QName("ns","methodName");

Class<?>[] returnTypes = new Class[] { String.class };

Object[] args = new Object[] { "parameter" };

Object[] response = serviceClient.invokeBlocking(methodName, args,
                returnTypes);

Autres conseils

Vous générez le client de service Web à partir de wsdl, n'est-ce pas?

La seule chose que l'outil wsdl2java connaît est l'information contenue dans le fichier wsdl. Par conséquent, il ne connaît aucun type déjà créé.

Si vous pouvez obtenir les informations de type dans le fichier WSDL, vous pouvez les faire fonctionner, bien que je n’aie jamais essayé.

Si vous souhaitez un moyen facile de copier du Type A au Type B, vous pouvez essayer BeanUtils.copyProperties , à condition que les paramètres d'établissement et d'accès de type A et de type B soient identiques

La plupart des projets Java Webservices passent par cela. Je ne sais pas si le monde .NET / C # propose une solution plus élégante.

Il est logique, comme l'a mentionné Mike, d'utiliser BeanUtils.copyProperties.

BR,
~ A

Si vous utilisez eclipse, c’est ce dont vous avez besoin: http: //www.eclipse. org / webtools / . Cela va au-delà de tout ce que vous voulez.

Vous pouvez directement utiliser la classe ServiceClient pour appeler le service Web, qui fournit un appel utilisant uniquement XML et renvoie une réponse XML. Pour différentes méthodes de service Web, vous devez convertir la réponse XML en un POJO java pour pouvoir l'utiliser. Seul le traitement des réponses doit être effectué de votre côté. que vous pouvez faire comme du XML à la carte etc ...

Ainsi, vous n'aurez besoin d'aucune autre classe de stub pour appeler un service Web, mais uniquement du traitement de la réponse XML. Vous pouvez convertir XML en POJO à l’aide des bibliothèques Castor ou JAXB.

C’est ainsi que vous n’avez pas besoin de modifier votre client à chaque fois pour diff. services Web. Vous pouvez développer comme fournir un gestionnaire de réponse au client en externe. Ainsi, pour chaque service Web différent, vous aurez des différences. classe de gestionnaire de réponse qui est l'implémentation de votre interface.

//common interface for response handlers...
//implement this for diff. web service/methods
public interface WSRespHandler{
    public Object getMeResp(Object respData);
}


//pass particular handler to client when you call some WS
public class WebServiceClient {
    public Object getResp(WSRespHandler respHandler) {
        ..

        return repHandler.getMeResp(xmlData);
    }
}

référence:

http://www.developer.com/java/web/article.php/3863416/Using-Axis2-and-Java-for-Asynchronous-Web-Service-Invocation -on-the-Client-Side.htm

http: // www.devdaily.com/blog/post/java/java-web-service-client-read-array-list/

merci.

www.techlads.com

Si ce message est toujours utile à quelqu'un, je lis le guide des clients pour la génération de axis2: http://axis.apache.org/axis2/java/core/docs/userguide-creatingclients.html .

Il semble que le plug-in Axis2 Eclipse soit configuré pour appeler la génération de code ADB en mode intégré (voir http://axis.apache.org/axis2/java/core/docs/adb/adb-howto.html ), créant ainsi des classes internes dans le stub de service Web. Je ne sais pas s'il est possible de passer du mode de génération au mode développé (générer des classes de données à partir de la classe stub), mais vous pouvez le faire en ligne de commande à l'aide de Wsdl2Java:

    %AXIS2_HOME%\bin\WSDL2Java -uri <wsdl file path> -p <package name> -u

L'option -u indique au générateur de code ADB de créer des classes de données en tant que classes séparées et non en classes internes dans le stub.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top