Почему анализатор WSDL все еще импортирует внешние документы? - PullRequest
6 голосов
/ 22 июля 2009

Я попытался отключить импорт документов в WSDL4J (1.6.2) способом, предложенным по документации API:

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

Фактически он прекращает импорт файлов схемы XML, объявленных с тегом wsdl: import , но прекращает импорт файлов, объявленных с тегами xs: import .

Следующий фрагмент кода [см. В конце буквы] для файла примера

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

возвращает следующее исключение:

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

Можете ли вы предложить мне какое-либо решение этой проблемы? Я просто не хочу импортировать внешние XML-схемы.

С уважением, 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();
    }
  }
}

Ответы [ 2 ]

1 голос
/ 09 января 2010

Беглый взгляд на WSDL4J (прошло уже много времени с тех пор, как я работал непосредственно с этим проектом), что нет возможности специально предотвратить чтение импортированных схем. Возможно, вы наткнулись на ошибку в механизме десериализации схем WSDL4J. Тем не менее, если вас не интересует содержимое каких-либо схем, в том числе встроенных в документ WSDL, вы можете зарегистрировать собственный реестр расширений (просто измените класс PopulatedExtensionRegistry, чтобы исключить SchemaDeserializer).

В частности, пропустите следующие строки:

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 голосов
/ 15 сентября 2009

Я не использовал Java для веб-сервисов, но вы пытались установить абсолютный путь к импортируемым схемам? Возможно, он пытается загрузить локальный файл.

Вы также можете попробовать понюхать проволоку, чтобы убедиться, что вы делаете запрос, возможно, он поврежден.

$ 0,02

...