我有一个 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)