2011-01-13 15 views
10

Mam prostą aplikację z usługą sieciową utworzoną przy użyciu Apache CXF. Ta aplikacja działa po uruchomieniu serwera i klienta (jako aplikacje Java). Gdy próbuję uzyskać dostęp do adresu URL aplikacji /services, który jest odwzorowany w web.xml, Tomcat, otrzymuję błąd 404. Kiedy uruchomić projekt otrzymam:Jak rozwiązać ServiceConstructionException: Nie można znaleźć definicji usługi?

org.apache.cxf.service.factory.ServiceConstructionException: Nie można odnaleźć definicję usługi {http: // SendMessage /} SendMessage

Jeśli ktoś ma wszelkie wskazówki związane z tym błędem chętnie bym je usłyszał. (Szukałem google i nie mogłem znaleźć czegoś istotnego w mojej sytuacji)

Dziękuję!

+0

Oto powiązane pytanie. http://stackoverflow.com/questions/3006185/cxf-client-webservice-question –

Odpowiedz

9

Miałem ten sam błąd, mój był związany z przestrzenią nazw, które różniły się we wsdl i usłudze internetowej. Więc zmieniłem je tak samo.

WSDL: Klasa

<wsdl:definitions name="" 
    targetNamespace="http://www.example.org/yourservice/" 

Webservice:

@WebService(targetNamespace = "http://www.example.org/yourservice/", 
......... 
2

Nawet miałem podobny problem. Naprawiono go, aktualizując jaxws: punkt końcowy. Dodałem nazwę usługi (odwzorowanie na nazwę obecną w pliku WSDL) z przestrzenią nazw zdefiniowaną w "targetNamespace" zdefiniowanym w znaczniku wsdl: definicje.

<jaxws:endpoint id=".." implementor="..." serviceName="s:SERVICE_NAME_IN_WSDL" 
xmlns:s="TARGET_NAME_SPACE_WSDL_DEFINTIONS"></jaxws:endpoint> 

edytował (06Jul)
Również mam dzisiaj, że z wersji Apache CXF 3.0.5 kwestia ta nie nadchodzi; Ale z wersją Apache CXF 3.1, nadchodzi.

1

Wyjątek ServiceConstructionException może wystąpić na różnych etapach, gdy cxf porównuje podaną usługę, port i nazwę powiązania z wsdl, który został już przeanalizowany. W tym przypadku (iw większości przypadków) wygląda na problem z przestrzenią nazw.

{http://sendmessage/}SendMessage nie jest obecny w analizowanym pliku wsdl lub nazwa usługi nie jest zgodna z QName występującym w pliku WSDL. Istnieją również inne przypadki, w których powiązanie lub port nie są zgodne, jeden może otrzymać ten sam wyjątek. Poniżej znajduje się snippit kodu z metody org.apache.cxf.wsdl11.WSDLServiceFactory.create(), gdzie wszystko się dzieje.

Jeśli nie jest jasne, dlaczego tak się dzieje, najlepszym rozwiązaniem jest debugowanie tego fragmentu kodu i zobaczenie, gdzie się ono nie udaje i co jest w analizowanej definicji wdsl (com.ibm.wsdl.DefinitionImpl w pliku wsdl4j.jar).

 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)); 
      } 

PS: Wiem, że ten problem został otwarty z powrotem w 2011 roku, ale niedawno w obliczu tego samego problemu i był w stanie go rozwiązać. Mam nadzieję, że pomoże to innym osobom, które mają do czynienia z tym problemem.

+0

Rajeev, twoje wyjaśnienie pomogło mi rozwiązać problem –

Powiązane problemy