11
votes

Comment résoudre ServicConstructionException: Impossible de trouver la définition du service?

J'ai une application simple avec un service Web créé avec Apache CXF . Cette application fonctionne lorsque j'exécute le serveur et le client (en tant que java applications). Lorsque j'essaie d'accéder à l'application / Services URL mappée dans web.xml , tomcat me donne 404 Erreur. Quand j'exécute le projet, je reçois:

org.apache.cxf.service.factory.serviceconstructionException: Impossible de trouver la définition du service {http: // sendMessage /} sendMessage

Si quelqu'un a des indices liés à cette erreur, je serais heureux de les entendre. (J'ai cherché Google et n'a pas trouvé quelque chose de pertinent pour ma situation)

Merci!


1 commentaires

Voici une question connexe. Stackoverflow.com/questions/3006185/...


4 Réponses :


11
votes

J'ai eu la même erreur, la mienne était liée à l'espace de noms qui étaient différents dans WSDL et WebService. Alors je les ai changés vers la même chose.

wsdl: xxx

classe WebService: xxx


0 commentaires

3
votes

Même j'avais un problème similaire. Corrigé en mettant à jour les jaxws: point final. J'ai ajouté le nom de service (mappage du nom du nom présent dans le fichier WSDL) avec l'espace nominal tel que défini dans le "TargeNamespace" défini dans la balise WSDL: Définitions. XXX

édité (06jul)
En outre, j'ai aujourd'hui cela, avec Apache CXF 3.0.5 Version Ce problème ne vient pas; Mais avec Apache CXF 3.1 version, cela arrive.


0 commentaires

1
votes

ServicConstructionsPonsconsception peut se produire à différentes étapes lorsque CXF compare le service, le port et le nom de liaison fournies avec le WSDL qu'il a déjà analysé. Dans ce cas (et dans la plupart des cas), il semble être un problème d'espace de noms.

{http: // sendmessage /} sendmessage code> n'est pas présent dans la WSDL analysé ou le nom de service ne correspond pas à la QName présente dans la WSDL. Il existe également d'autres cas où la liaison ou le port ne correspond pas, on peut recevoir la même exception. Voici un code snippit de org.apache.cxf.wsdl11.wsdlserviceffactory.create () code> méthode où tout se passe. P>

Si les choses ne sont pas claires, pourquoi cela se passe-t-il exactement Meilleur pari est de déboguer ce morceau de code et de voir où il échoue et de ce qui y est dans la définition de WDSL analysée ( com.ibm.wsdl.definititionImpl code> dans wsdl4j.jar). P>

        javax.wsdl.Service wsdlService = definition.getService(serviceName);
        if (wsdlService == null) {
            if ((!PartialWSDLProcessor.isServiceExisted(definition, serviceName))
                && (!PartialWSDLProcessor.isBindingExisted(definition, serviceName))
                && (PartialWSDLProcessor.isPortTypeExisted(definition, serviceName))) {
                try {
                    Map<QName, PortType> portTypes = CastUtils.cast(definition.getPortTypes());
                    String existPortName = null;
                    PortType portType = null;
                    for (QName existPortQName : portTypes.keySet()) {
                        existPortName = existPortQName.getLocalPart();
                        if (serviceName.getLocalPart().contains(existPortName)) {
                            portType = portTypes.get(existPortQName);
                            break;
                        }
                    }
                    WSDLFactory factory = WSDLFactory.newInstance();
                    ExtensionRegistry extReg = factory.newPopulatedExtensionRegistry();
                    Binding binding = PartialWSDLProcessor.doAppendBinding(definition, 
                                                                           existPortName, portType, extReg);
                    definition.addBinding(binding);
                    wsdlService = PartialWSDLProcessor.doAppendService(definition, 
                                                                       existPortName, extReg, binding);
                    definition.addService(wsdlService);
                } catch (Exception e) {
                    throw new ServiceConstructionException(new Message("NO_SUCH_SERVICE_EXC", LOG, serviceName));
                }
            } else {
                throw new ServiceConstructionException(new Message("NO_SUCH_SERVICE_EXC", LOG, serviceName));
            }


0 commentaires

0
votes
...
<wsdl:service name='targetName'>
  <wsdl:port binding='tns:targetNameSoap12' name='targetNameSoap12'>
...

0 commentaires