Ошибка "prefix is ​​null" при попытке настроить клиент веб-службы

У меня есть WSDL и некоторые файлы схемы, которые я использовал для создания клиента веб-службы JAX-WS. Когда я пытаюсь получить экземпляр клиента, я получаю следующую трассировку стека:

Причина: java.lang.IllegalArgumentException: указанный префикс был нулевым.
    в com.ibm.xml.xlxp.api.stax.msg.StAXMessageProvider.throwIllegalArgumentException(StAXMessageProvider.java:42)
    в com.ibm.xml.xlxp.api.stax.XMLStreamReaderImpl.getNamespaceURI(XMLStreamReaderImpl.java:721)
    в com.ibm.xml.xlxp.api.stax.XMLInputFactoryImpl$XMLStreamReaderProxy.getNamespaceURI(XMLInputFactoryImpl.java:212)
    в com.sun.xml.internal.ws.util.xml.XMLStreamReaderFilter.getNamespaceURI(XMLStreamReaderFilter.java:242)
    в com.sun.xml.internal.ws.wsdl.parser.ParserUtil.getQName(ParserUtil.java:78)
    в com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.parsePortTypeOperationInput(RuntimeWSDLParser.java:721)
    в com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.parsePortTypeOperation(RuntimeWSDLParser.java:694)
    в com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.parsePortType(RuntimeWSDLParser.java:668)
    в com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.parseWSDL(RuntimeWSDLParser.java:305)
    в com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:136)
    на com.sun.xml.internal.ws.client.WSServiceDelegate.parseWSDL(WSServiceDelegate.java:227)
    на com.sun.xml.internal.ws.client.WSServiceDelegate.(WSServiceDelegate.java:190)
    на com.sun.xml.internal.ws.client.WSServiceDelegate.(WSServiceDelegate.java:160)
    в com.sun.xml.internal.ws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:92)
    на javax.xml.ws.Service.(Service.java:67)
...

Для меня это выглядит очень похоже на то, что класс Service пытается проанализировать WSDL как часть его инициализации, а затем завершается неудачно, потому что какой-то префикс имеет значение null. Линия at com.sun.xml.internal.ws.wsdl.parser.ParserUtil.getQName(ParserUtil.java:78) предполагает, что у него проблемы с анализом QName. Когда служба создается, QName устанавливается следующим образом:

new QName("http://www.mycompany.ca/some/schema/MyService", "MyService")

Сообщение об ошибке не слишком ясно, хотя. Нужен ли префикс перед "MyService" или необходимы изменения в WSDL (я не владелец WSDL, поэтому изменения трудно передать другим командам).

(среда RAD 7.5 для WAS 7.0)

1 ответ

Решение

Если вы изучите детали трассировки стека, вы заметите, что проблема связана с именем операции ввода типа порта в WSDL:

<wsdl:definitions .... > 
  <wsdl:portType .... >
    <wsdl:operation>
       <wsdl:input message="qname"/>    <--- your problem is here
    </wsdl:operation>
  </wsdl:portType >
</wsdl:definitions>
Другие вопросы по тегам