3 votes

Problème avec WSDL

J'ai récemment travaillé sur un service web conforme à ACORD P&C et j'ai rencontré quelques problèmes avec des erreurs de wsimport disant qu'il est incapable d'analyser l'un des fichiers xsd. Le message d'erreur est le suivant :

[ERROR]         Unable to parse "D:\projects\DICACORD\DicAcordQuoteRq.xsd" : Illegal character in opaque part at index 2: D:\projects\DICACORD\DicAcordQuoteRq.xsd

Le schéma que j'ai créé est basé sur le schéma ACORD P&C (plus de 23 000 lignes) et je n'ai inclus que les éléments requis que la société doit utiliser. J'ai créé les schémas à l'aide de XMLSpy et selon sa validation, les schémas sont valides mais lorsque j'essaie de créer le service Web dans Netbeans 6.8, j'obtiens le message d'erreur ci-dessus.

Les schémas sont sur ma machine de développement et d'après ce que j'ai pu trouver sur les forums de Netbeans, Netbeans copie le wsdl dans un répertoire à l'intérieur du projet de sorte que lorsque vous le déplacez du développement à la production, tout fonctionne toujours comme prévu.

Le wsdl est le suivant

<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSpy v2010 -->
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"         xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="discoveryinsurance.com/schemas" xmlns:ns="discoveryinsurance.com/schemas/acordRq" xmlns:ns1="discoveryinsurance.com/schemas/acordRs" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" targetNamespace="discoveryinsurance.com/schemas">
<wsdl:import namespace="discoveryinsurance.com/schemas/acordRq" location="D:\projects\DICACORD\DicAcordQuoteRq.xsd"/>
<wsdl:import namespace="discoveryinsurance.com/schemas/acordRs" location="D:\projects\DICACORD\DicAcordQuoteRs.xsd"/>
<wsdl:types>
    <xs:schema targetNamespace="discoveryinsurance.com/schemas" elementFormDefault="qualified"/>
</wsdl:types>
<wsdl:message name="NewMessageRequest">
    <wsdl:part name="parameter" element="ns:ACORD"/>
</wsdl:message>
<wsdl:message name="NewMessageResponse">
    <wsdl:part name="parameter" element="ns1:ACORD"/>
</wsdl:message>
<wsdl:portType name="QuotePort">
    <wsdl:operation name="QuoteRequest">
        <wsdl:input name="quoteInput" message="tns:NewMessageRequest"/>
        <wsdl:output name="quoteOutput" message="tns:NewMessageResponse"/>
    </wsdl:operation>
</wsdl:portType>
<wsdl:binding name="AgencyQuoteSOAP" type="tns:QuotePort">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="QuoteRequest">
        <soap:operation soapAction="urn:QuoteRequest" style="document"/>
        <wsdl:input>
            <soap:body use="literal"/>
        </wsdl:input>
        <wsdl:output>
            <soap:body use="literal"/>
        </wsdl:output>
    </wsdl:operation>
</wsdl:binding>
<wsdl:service name="AgencyQuote">
    <wsdl:port name="QuotePort" binding="tns:AgencyQuoteSOAP">
        <soap:address location="http://localhost:8084/DicQuoteSvc/AgencyQuote"/>
    </wsdl:port>
</wsdl:service>

J'ai l'impression que cela a quelque chose à voir avec les espaces de noms, mais je ne suis pas sûr. C'est également la première fois que j'essaie de créer un service Web de cette manière, car je pensais gagner du temps de développement.

J'ai essayé de googler le message d'erreur et tout ce que j'ai lu indique que l'URI est incorrect. Je pensais que la validation de XMLSpy détecterait une telle erreur, mais si c'est le cas, elle ne le fait pas.

Toute aide serait grandement appréciée et je serai heureux de fournir toute autre information nécessaire que je peux.

7voto

Pascal Thivent Points 295221

À propos de l'élément wsdl:import, la spécification WSDL 1.1 dit :

WSDL permet d'associer un espace de nom à un emplacement de document en utilisant une d'importation :

<definitions .... >
    <import namespace="uri" location="uri"/> *
</definitions>

(...)

Les URIs peuvent être absolus ou relatifs mais le vôtre est clairement invalide .

Bien sûr, vous pouvez essayer de spécifier un URI absolu, en utilisant par exemple file:// et/ou des barres obliques. Mais dans votre cas, je pense que vous devriez mettre vos XSDs à côté de votre WSDSL et utiliser un URI relatif, quelque chose comme ceci :

<wsdl:import namespace="discoveryinsurance.com/schemas/acordRq" location="DicAcordQuoteRq.xsd"/>
<wsdl:import namespace="discoveryinsurance.com/schemas/acordRs" location="DicAcordQuoteRs.xsd"/>

1voto

karoberts Points 4472

Il peut s'agir des barres obliques ( \ vs / ), essayez

D:/projects/DICACORD/DicAcordQuoteRs.xsd

Si cela ne fonctionne pas, essayez

file://D:/projects/DICACORD/DicAcordQuoteRs.xsd

0voto

DJ. Points 2663

Une chose à laquelle je pense est que selon la spécification wsdl targetNamespace doit être un URI absolu. Voir la section 2.2 de la Apprentissage du wsdl .

Voir le wikipedia sur le format URI valide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X