Подтвердить что ты не робот

Тест WSDL/SOAP с soapui

Я тестировал свои веб-сервисы (wsdl/soap) с помощью soapui. и у меня есть ошибки: http/log: error 400 BAD REQUEST.

Какова может быть ошибка с моим wsdl?

error/log:

un Jun 05 14:10:37 CEST 2011:ERROR:javax.wsdl.WSDLException: WSDLException (at /html): faultCode=INVALID_WSDL: Expected element '{http://schemas.xmlsoap.org/wsdl/}definitions'.
   javax.wsdl.WSDLException: WSDLException (at /html): faultCode=INVALID_WSDL: Expected element '{http://schemas.xmlsoap.org/wsdl/}definitions'.
    at com.ibm.wsdl.xml.WSDLReaderImpl.checkElementName(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 com.eviware.soapui.impl.wsdl.support.wsdl.WsdlInterfaceDefinition.load(WsdlInterfaceDefinition.java:48)
    at com.eviware.soapui.impl.wsdl.support.wsdl.WsdlContext.loadDefinition(WsdlContext.java:66)
    at com.eviware.soapui.impl.wsdl.support.wsdl.WsdlContext.loadDefinition(WsdlContext.java:30)
    at com.eviware.soapui.impl.support.definition.support.AbstractDefinitionContext.cacheDefinition(AbstractDefinitionContext.java:264)
    at com.eviware.soapui.impl.support.definition.support.AbstractDefinitionContext.access$400(AbstractDefinitionContext.java:44)
    at com.eviware.soapui.impl.support.definition.support.AbstractDefinitionContext$Loader.construct(AbstractDefinitionContext.java:230)
    at com.eviware.soapui.support.swing.SwingWorkerDelegator.construct(SwingWorkerDelegator.java:46)
    at com.eviware.soapui.support.swing.SwingWorker$2.run(SwingWorker.java:140)
    at java.lang.Thread.run(Thread.java:637)
4b9b3361

Ответ 1

definitions является корневым элементом WSDL, поэтому похоже, что вы не загружаете WSDL.

Edit:

Я тестировал его, и похоже, что вся проблема связана с вашим веб-сервером. Ваш веб-сервер возвращает WSDL в браузер, но он не возвращает его никакому инструменту, потому что эти инструменты используют очень минималистические HTTP-запросы без большого количества заголовков HTTP. Один из отсутствующих заголовков Accept. После того как этот заголовок не включен в запрос, ваш сервер выдает запрос HTTP 400 Bad.

Легкий подход к продолжению открывает WSDL в браузере, сохраняет wsdl в файл и импортирует этот файл в soapUI вместо WSDL из URL.

Ответ 2

Вы можете попробовать открыть wsdl в веб-браузере и сохранить с расширением .wsdl. И установите WSDL в проекте SOAP UI в этот .wsdl файл. Это действительно работает.

Ответ 3

Другая возможность заключается в том, что вам нужно добавить? wsdl в конце вашего URL-адреса службы для SoapUI. Это меня достало, когда я привык к WCFClient, который ему не нужен.

Ответ 4

  • да, сначала убедитесь, что вы добавили "? wsdl" к вашей ссылке "http...... whatever.svc".
    • Это не исправило мою проблему. Мне нужно было создать новый проект WCF с самого начала и вручную скопировать код. Это исправило это. Удачи.

И самое главное!!!

При изменении пространства имен в коде также убедитесь, что вы изменили его в web.config!

Ответ 5

Я столкнулся с тем же самым исключением, пытаясь проверить мои веб-службы, развернутые на WSO2 ESB.

WSO2 генерирует как wsdl, так и wsdl2. Я попытался передать URL-адрес wsdl2 и получил вышеописанное исключение. Быстрый googling показал мне, что одно из различий между wsdl1.1 и wsdl2.0 заменяет элемент "определения" на "описание". Кроме того, я узнал, что SoapUI не поддерживает wsdl2.

Поэтому для меня решение должно было использовать wsdl1 url вместо wsdl2.

Ответ 6

Вероятная вероятность того, что ваш браузер достигает вашего веб-сервиса через прокси-сервер, и SoapUI не настроен на использование этого прокси-сервера. Например, я работаю в корпоративной среде, и хотя мой IE и FireFox могут обращаться к внешним сайтам, мой SoapUI может получить доступ только к внутренним веб-службам.

Простое решение - просто открыть WSDL в браузере, сохранить его в .xml файле и основать на нем проект SoapUI. Это не сработает, если ваш WSDL полагается на внешние XSD, к которым он не может добраться.

Ответ 7

Для любого, кто столкнется с этой проблемой в будущем: конкретная ситуация здесь ("сервер не отправляет WSDL должным образом") может или не может быть актуальной, но всегда должны быть два ключевых аспекта:

  1. Сообщение faultCode=INVALID_WSDL: Expected element '{http://schemas.xmlsoap.org/wsdl/}definitions' означает, что возвращаемый фактический контент не является XML с базовым элементом "определения" в пространстве имен WSDL.
  2. Сообщение WSDLException (at /html) сообщает вам важную подсказку о том, что он нашел - для этого примера /html настоятельно подразумевает, что была возвращена обычная веб-страница, а не WSDL. Другая распространенная ситуация - это что-то вроде /soapenv:Reason, которое указывает на то, что сервер пытается обработать его как вызов SOAP - например, это может произойти, если ваш URL-адрес предназначен для "базового" URL-адреса службы, а не для WSDL.