0

我有一个 WSDL 和一些用于生成 JAX-WS Web 服务客户端的模式文件。当我尝试获取客户端的实例时,我得到了这个堆栈跟踪:

原因: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 解析为其初始化的一部分,然后由于某些前缀为空而失败。该行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 所有者,因此很难将更改推送给其他团队)。

(WAS 7.0 的环境是 RAD 7.5)

4

1 回答 1

1

如果您检查堆栈跟踪的详细信息,您会注意到问题出在 WSDL 中的端口类型操作输入的名称上:

<wsdl:definitions .... > 
  <wsdl:portType .... >
    <wsdl:operation>
       <wsdl:input message="qname"/>    <--- your problem is here
    </wsdl:operation>
  </wsdl:portType >
</wsdl:definitions>
于 2012-08-16T19:05:11.617 回答