2009-07-22 8 views
3

J'ai essayé de désactiver l'importation de documents en WSDL4J (1.6.2) de la manière suggérée par la documentation de l'API:Pourquoi l'analyseur WSDL importe-t-il toujours des documents externes?

wsdlReader.setFeature("javax.wsdl.importDocuments", false); 

En fait, il arrête l'importation de fichiers de schéma XML déclaré avec wsdl: import tag , mais arrête d'importer les fichiers déclarés avec xs: import tags.

L'extrait de code suivant [voir à la fin de la lettre] pour l'exemple fichier

http://www.ibspan.waw.pl/~gawinec/example.wsdl

renvoie l'exception suivante:

javax.wsdl.WSDLException: WSDLException (at /definitions/types/xs:schema): 
faultCode=OTHER_ERROR: An error occurred trying to resolve schema referenced 
at 'EchoExceptions.xsd', relative to 
'http://www.ibspan.waw.pl/~gawinec/example.wsdl'.: 
java.io.FileNotFoundException: This file was not found: 
http://www.ibspan.waw.pl/~gawinec/EchoExceptions.xsd 
    at com.ibm.wsdl.xml.WSDLReaderImpl.parseSchema(Unknown Source) 
    at com.ibm.wsdl.xml.WSDLReaderImpl.parseSchema(Unknown Source) 
    at com.ibm.wsdl.xml.WSDLReaderImpl.parseTypes(Unknown Source) 
    at com.ibm.wsdl.xml.WSDLReaderImpl.parseDefinitions(Unknown Source) 
    at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source) 
    at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source) 
    at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source) 
    at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source) 
    at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source) 
    at IsolatedExample.main(IsolatedExample.java:15) 
Caused by: java.io.FileNotFoundException: This file was not found: 
http://www.ibspan.waw.pl/~gawinec/EchoExceptions.xsd 
    at com.ibm.wsdl.util.StringUtils.getContentAsInputStream(Unknown Source) 
    ... 10 more 

Pouvez-vous me suggérer une solution à ce problème? Je ne veux tout simplement pas importer les schémas XML externes .

Cordialement, Maciej


import javax.wsdl.WSDLException; 
import javax.wsdl.factory.WSDLFactory; 
import javax.wsdl.xml.WSDLReader; 

public class IsolatedExample { 
    public static void main(String[] args) { 

    WSDLFactory wsdlFactory; 
    try { 
     wsdlFactory = WSDLFactory.newInstance(); 
     WSDLReader wsdlReader = wsdlFactory.newWSDLReader(); 
     wsdlReader.setFeature("javax.wsdl.verbose", false); 
     wsdlReader.setFeature("javax.wsdl.importDocuments", false); 
     wsdlReader.readWSDL("http://www.ibspan.waw.pl/~gawinec/example.wsdl"); 
    } catch (WSDLException e) { 
     e.printStackTrace(); 
    } 
    } 
} 

Répondre

1

Un rapide coup d'oeil à WSDL4J (il a été un moment que j'ai travaillé directement avec ce projet) suggère qu'il n'y a pas d'option spécifiquement pour empêcher la lecture des schémas importés. Vous avez peut-être découvert un bug dans le mécanisme de désérialisation des schémas de WSDL4J. Cela dit, si vous n'êtes pas intéressé par le contenu des schémas, y compris ceux incorporés dans le document WSDL, vous pouvez enregistrer votre propre registre d'extension (modifiez simplement la classe PopulatedExtensionRegistry pour omettre le SchemaDeserializer).

Plus précisément, laisser les lignes suivantes:

mapExtensionTypes(Types.class, SchemaConstants.Q_ELEM_XSD_1999, 
    SchemaImpl.class); 
registerDeserializer(Types.class, SchemaConstants.Q_ELEM_XSD_1999, 
    new SchemaDeserializer()); 
registerSerializer(Types.class, SchemaConstants.Q_ELEM_XSD_1999, 
    new SchemaSerializer()); 

mapExtensionTypes(Types.class, SchemaConstants.Q_ELEM_XSD_2000, 
    SchemaImpl.class); 
registerDeserializer(Types.class, SchemaConstants.Q_ELEM_XSD_2000, 
    new SchemaDeserializer()); 
registerSerializer(Types.class, SchemaConstants.Q_ELEM_XSD_2000, 
    new SchemaSerializer()); 

mapExtensionTypes(Types.class, SchemaConstants.Q_ELEM_XSD_2001, 
    SchemaImpl.class); 
registerDeserializer(Types.class, SchemaConstants.Q_ELEM_XSD_2001, 
    new SchemaDeserializer()); 
registerSerializer(Types.class, SchemaConstants.Q_ELEM_XSD_2001, 
    new SchemaSerializer()); 
0

Je ne l'ai pas utilisé Java pour webservices, mais avez-vous essayé de placer un chemin absolu aux schémas que vous importez? Peut-être essaie-t-il de charger un fichier local.

Vous pouvez également essayer de renifler le fil pour voir si vous faites une demande, peut-être est-il mal formé.

0,02 $