web-dev-qa-db-fra.com

exception lorsque vous essayez d'appeler le service Web

J'obtiens l'exception ci-dessous lorsque j'essaie d'appeler le service à partir de SOAPUI. Lorsque j'ouvre le point de terminaison dans le navigateur, il affiche l'amende wsdl.

WARN  org.Apache.cxf.phase.PhaseInterceptorChain - Interceptor for {http://contract.premsisc.usst.com/}PaidClaimFacadeService has thrown exception, unwinding now
org.Apache.cxf.interceptor.Fault: Message part {http://contract.premsisc.uss`enter code here`t.com/}findPaidClaims was not recognized.  (Does it exist in service WSDL?)
    at org.Apache.cxf.interceptor.DocLiteralInInterceptor.handleMessage(DocLiteralInInterceptor.Java:194)
    at org.Apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.Java:255)
    at org.Apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.Java:113)
    at org.Apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.Java:97)
    at org.Apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.Java:461)
    at org.Apache.cxf.transport.servlet.ServletController.invoke(ServletController.Java:188)
    at org.Apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.Java:148)
    at org.Apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.Java:179)
    at org.Apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.Java:103)
    at javax.servlet.http.HttpServlet.service(HttpServlet.Java:738)
    at org.Apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.Java:159)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.Java:1655)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.Java:1595)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.Java:104)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.Java:77)
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.Java:908)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.Java:932)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.Java:500)
    at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.Java:178)
    at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.Java:91)
    at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.Java:864)
    at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.Java:1583)
    at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.Java:186)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.Java:455)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.Java:384)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.Java:272)
    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.Java:214)
    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.Java:113)
    at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.Java:165)
    at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.Java:217)
    at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.Java:161)
    at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.Java:138)
    at com.ibm.io.async.ResultHandler.complete(ResultHandler.Java:204)
    at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.Java:775)
    at com.ibm.io.async.ResultHandler$2.run(ResultHandler.Java:905)
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.Java:1550)

Mon wsdl comme dans le serveur WAS 7

<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://contract.premsisc.usst.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="PaidClaimFacadeService" targetNamespace="http://contract.premsisc.usst.com/">
<wsdl:types>
<xs:schema xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://contract.premsisc.usst.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://contract.premsisc.usst.com/">
<xs:element name="findPaidClaims" type="tns:findPaidClaims"/>
<xs:element name="findPaidClaimsResponse" type="tns:findPaidClaimsResponse"/>
<xs:complexType name="findPaidClaims">
<xs:sequence>
<xs:element minOccurs="0" name="Product" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="findPaidClaimsResponse">
<xs:sequence>
<xs:element name="return" type="xs:boolean"/>
</xs:sequence>
</xs:complexType>
<xs:element name="PremDiscountService" type="tns:PremDiscountService"/>
<xs:complexType name="PremDiscountService">
<xs:sequence/>
</xs:complexType>
</xs:schema>
</wsdl:types>
<wsdl:message name="findPaidClaims">
<wsdl:part element="tns:findPaidClaims" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="PremDiscountServiceException">
<wsdl:part element="tns:PremDiscountService" name="PremDiscountServiceException"></wsdl:part>
</wsdl:message>
<wsdl:message name="findPaidClaimsResponse">
<wsdl:part element="tns:findPaidClaimsResponse" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:portType name="PaidClaimFacade">
<wsdl:operation name="findPaidClaims">
<wsdl:input message="tns:findPaidClaims" name="findPaidClaims"></wsdl:input>
<wsdl:output message="tns:findPaidClaimsResponse" name="findPaidClaimsResponse"></wsdl:output>
<wsdl:fault message="tns:PremDiscountServiceException" name="PremDiscountServiceException"></wsdl:fault>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="PaidClaimFacadeServiceSoapBinding" type="tns:PaidClaimFacade">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="findPaidClaims">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="findPaidClaims">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="findPaidClaimsResponse">
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="PremDiscountServiceException">
<soap:fault name="PremDiscountServiceException" use="literal"/>
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="PaidClaimFacadeService">
<wsdl:port binding="tns:PaidClaimFacadeServiceSoapBinding" name="PaidClaimFacadePort">
<soap:address location="http://localhost:9084/premdisc/services/PaidClaimFacadeService"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

Ma demande de savon dans SOAPUI:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:con="http://contract.premsisc.usst.com/">
   <soapenv:Header/>
   <soapenv:Body>
      <con:findPaidClaims>
         <!--Optional:-->
         <Product>abc</Product>
      </con:findPaidClaims>
   </soapenv:Body>
</soapenv:Envelope>

Réponse de Soap dans Soap UI:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <soap:Fault>
         <faultcode>soap:Client</faultcode>
         <faultstring>Message part {http://contract.premsisc.usst.com/}findPaidClaims was not recognized.  (Does it exist in service WSDL?)</faultstring>
      </soap:Fault>
   </soap:Body>
</soap:Envelope>

et voici comment j'ai configuré jaxws: endpoint

<jaxws:endpoint id="paidClaimWs" implementor="#paidClaimFacadeImpl"
        address="/PaidClaimFacadeService" wsdlLocation="/wsdl/PaidClaimFacade.wsdl"
        serviceName="msg:PaidClaimFacadeService" endpointName="msg:PaidClaimFacadePort"
        xmlns:msg="http://contract.premsisc.usst.com/">
    </jaxws:endpoint>
19
Mahi G

Cela signifie que vous appelez une opération qui ne se termine pas dans votre fichier WSDL.

{http://contract.premsisc.usst.com/}findPaidClaims was not recognized

Il s'agit de votre espace de nom cible: http://contract.premsisc.usst.com/ Et voici votre opération: findPaidClaims

Si vous vérifiez votre WSDL, vous verrez qu'il n'y a pas une telle opération comme: findPaidClaims.

MODIFIER

Maintenant, le problème est clair. Vos espaces de noms dans le fichier WSDL sont incorrects. C'est WSDL fixe et cela fonctionnera. Je ne sais pas si vous exécutez une validation de votre fichier WSDL, mais mon IntelliJ affiche les erreurs. Je les ai donc réparés:

<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
                  xmlns:tns="http://contract.premdisc.hcsc.com/"
                  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                  name="PaidClaimFacadeService"
                  targetNamespace="http://contract.premdisc.hcsc.com/">
    <wsdl:types>
        <xs:schema xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
                   xmlns:tns="http://contract.premsisc.usst.com/types"
                   xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
                   xmlns:xs="http://www.w3.org/2001/XMLSchema"
                   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                   attributeFormDefault="unqualified"
                   elementFormDefault="unqualified"
                   targetNamespace="http://contract.premsisc.usst.com/types">
            <xs:element name="findPaidClaims" type="tns:findPaidClaims"/>
            <xs:element name="findPaidClaimsResponse" type="tns:findPaidClaimsResponse"/>
            <xs:complexType name="findPaidClaims">
                <xs:sequence>
                    <xs:element minOccurs="0" name="Product" type="xs:string"/>
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="findPaidClaimsResponse">
                <xs:sequence>
                    <xs:element name="return" type="xs:boolean"/>
                </xs:sequence>
            </xs:complexType>
            <xs:element name="PremDiscountService" type="tns:PremDiscountService"/>
            <xs:complexType name="PremDiscountService">
                <xs:sequence/>
            </xs:complexType>
        </xs:schema>
    </wsdl:types>
    <wsdl:message name="findPaidClaims">
        <wsdl:part element="tns:findPaidClaims" name="parameters"></wsdl:part>
    </wsdl:message>
    <wsdl:message name="PremDiscountServiceException">
        <wsdl:part element="tns:PremDiscountService" name="PremDiscountServiceException"></wsdl:part>
    </wsdl:message>
    <wsdl:message name="findPaidClaimsResponse">
        <wsdl:part element="tns:findPaidClaimsResponse" name="parameters"></wsdl:part>
    </wsdl:message>
    <wsdl:portType name="PaidClaimFacade">
        <wsdl:operation name="findPaidClaims">
            <wsdl:input message="tns:findPaidClaims" name="findPaidClaims"></wsdl:input>
            <wsdl:output message="tns:findPaidClaimsResponse" name="findPaidClaimsResponse"></wsdl:output>
            <wsdl:fault message="tns:PremDiscountServiceException" name="PremDiscountServiceException"></wsdl:fault>
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="PaidClaimFacadeServiceSoapBinding" type="tns:PaidClaimFacade">
        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
        <wsdl:operation name="findPaidClaims">
            <soap:operation soapAction="" style="document"/>
            <wsdl:input name="findPaidClaims">
                <soap:body use="literal"/>
            </wsdl:input>
            <wsdl:output name="findPaidClaimsResponse">
                <soap:body use="literal"/>
            </wsdl:output>
            <wsdl:fault name="PremDiscountServiceException">
                <soap:fault name="PremDiscountServiceException" use="literal"/>
            </wsdl:fault>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="PaidClaimFacadeService">
        <wsdl:port binding="tns:PaidClaimFacadeServiceSoapBinding" name="PaidClaimFacadePort">
            <soap:address location="http://localhost:9084/premdisc/services/PaidClaimFacadeService"/>
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>

Le problème était que vous aviez un espace de noms différent de votre xmlns:tns et targetNamespace. Regardez attentivement votre WSDL.

xmlns:tns="http://contract.premdisc.hcsc.com/"
targetNamespace="http://contract.premsisc.usst.com/"

Vous voyez que dans votre fichier, ils sont différents, mais ils doivent être les mêmes. Et pour votre XSD, vous devez utiliser un espace de noms différent. Quelque chose comme:

xmlns:tns="http://contract.premsisc.usst.com/types"

Comme c'était dans votre dossier:

xmlns:tns="http://contract.premsisc.usst.com/"
targetNamespace="http://contract.premdisc.hcsc.com/"

Ass, vous pouvez voir qu'ils sont également différents. Comparez le fichier que j'ai corrigé et votre fichier et vous verrez la différence. Essayez-le avec un fichier fixe et cela fonctionnera.

19
Paulius Matulionis

Je sais que c'est assez vieux, mais pour certains d'entre vous qui tombent dessus: j'ai eu le même problème, la cause? J'avais "ancien" WSDL chargé dans mon SOAPUI, tandis que je changeais certaines choses dans mon "nouveau" WSDL. D'où les problèmes, essayez de recharger le WSDL dans SOAPUI ou de le supprimer et de le charger à nouveau, puis de vérifier si vous obtenez la même erreur. J'espère que cela aide quelqu'un!

4
Thasar