wsimport de deux services WCF écrase objectFactory - comment résoudre

Désolé, c'est long. Je suis novice en matière de services Web Java et j'ai parcouru des exemples sur le Web pour créer un client Java pour une paire de services WCF hébergés par une application fournisseur. Je suis capable de créer le client séparément, mais lorsque j'essaie de les assembler, les deuxièmes liaisons de service écrasent la première. Je suis à peu près sûr que c'est la classe ObjectFactory qui est écrasée.

J'utilise Metro (non installé dans eclipse) et la construction de fourmis suivante dans exclipse.

build.xml:


  
     
        
    

     
        
    
  

La connexion au ReportFileService fonctionne, mais lorsque je me connecte au service ReportServices, j'obtiens l'exception suivante:

Exception dans le thread "principal" javax.xml.ws.WebServiceException:   { http://tempuri.org/ } ReportServices n'est pas un service valide. Valide   les services sont: { http://tempuri.org/ } ReportFileService

J'ai essayé de mettre la construction dans des paquets séparés, ce qui fonctionne, mais j'ai un problème similaire à l'exécution.

J'ai regardé différents threads, soit pour changer l'espace de nom de cible de http://tempuri.org/ à quelque chose sinon, ou changez le nom de la classe ObjectFactory en quelque chose de personnalisé.

J'ai ce code en ligne (trouvé ici ), mais je ne sais pas comment utilisez-le/changez-le en fichier externe.


  
  
     
  
  

Quelqu'un peut-il aider sur la façon dont je peux résoudre cela.

0

1 Réponses

D'accord, je suis un idiot ...

Placer les services dans leur propre paquet est ce qui a finalement résolu le problème, mais j'ai fait une erreur de codage supplémentaire lors de la création du service qui masquait le problème.

Étant donné que je déplace ces services d'environnement en environnement (test, étape, production), je crée le service en utilisant une adresse définie en externe (correspondant aux adresses réelles de test, de scène et de serveur d'application de production). J'ai coupé/collé l'URL qui indiquait le mauvais service , ce que l'erreur ci-dessous tentait de me dire.

Exception dans le thread "principal" javax.xml.ws.WebServiceException:   { http://tempuri.org/ } ReportServices n'est pas un service valide. Valide   Les services sont: { http://tempuri.org/ } ReportFileService              URL reportServicesAddress = null;           URL reportFileServiceAddress = null;

    try {
        trustAllCertificates();//For testing only

        reportFileServiceAddress = new URL("http://my.host.name/ptsqamt/Maintain/services/reports/2010/09/ReportFileService.svc");
        reportServicesAddress = new URL("http://my.host.name/ptsqamt/Maintain/services/reports/2010/09/ReportServices.svc");
    } catch (MalformedURLException e) {

        e.printStackTrace();
    }

    ReportServices rsProxy = connectToReportServices(reportServicesAddress);
    ReportFileService rfsProxy = connectToReportFileService(reportFileServiceAddress);

C'est fou à quel point il est difficile d'obtenir de l'information sur l'interopérabilité, alors je vais vous donner un petit conseil qui m'a aidé à résoudre mon problème.

wsimport lèverait une exception lors du traitement du WSDL. Cela n'est arrivé que lorsque j'ai ajouté le paramètre package à mon wsimport.

wsimport -p org.package.my myWSDL.xml

Je suis tombé sur un blog qui disait lors de l'appel des services WCF, il est recommandé de définir la propriété suivante à false. Vous pouvez le voir dans mon wsimport -b wcf.jaxb

wcf.jaxb


  

Cela a résolu ce problème et a arrêté les conflits lors de la génération du code.

0
ajouté