0

JAX-WSWebサービスクライアントを生成するために使用したWSDLといくつかのスキーマファイルがあります。クライアントのインスタンスを取得しようとすると、次のスタックトレースが取得されます。

原因:java.lang.IllegalArgumentException:指定されたプレフィックスがnullでした。
    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の所有者ではないため、変更を他のチームにプッシュするのは困難です)。

(環境はWAS7.0のRAD7.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 に答える