16

Java クライアントを作成し、実行中の Web サービスに接続する際に問題があります。

次のコードを使用します。

Service myService  = null;
URL wsdlLocation = new URL("http://myservice?wsdl");
QName serviceName = new QName(wsdlLocation, "MyService");
Service myService = new Service(wsdlLocation, serviceName);

Service クラスは次のコマンドで作成されました。

wsimport -d gen -keep http://myservice?wsdl

Apache cxf 2.4 の wsdl2java によって生成されたクライアントでも試してみましたが、同じ結果が得られました。

(この投稿のためだけに WSDL の場所とサービス クラス名を変更しました。コードでは元のものを使用しています。)

しかし、新しい Service() コマンドでサービスを作成するときに、appserver にデプロイされた Web サービスを呼び出すと、例外が発生します。ただし: SOAP UI を使用して wsdl の場所をテストしたところ、完全に機能します。また、Soap UI を使用してモック サービスを作成し、Java クライアントがそれに接続して呼び出し、結果を取得することができました。appserver で実行されている Web サービスを呼び出したいときに問題が発生します。

スタックトレース:

javax.xml.ws.WebServiceException: org.apache.cxf.service.factory.ServiceConstructionException: Failed to create service.
        at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:149)
        at org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:98)
        at javax.xml.ws.Service.<init>(Service.java:76)
        at MyService.<init>(MyService.java:42)
        at mypackage.createService(AClass.java:288)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
Caused by: org.apache.cxf.service.factory.ServiceConstructionException: Failed to create service.
        at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:100)
        at org.apache.cxf.jaxws.ServiceImpl.initializePorts(ServiceImpl.java:199)
        at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:147)
        ... 12 more
Caused by: javax.wsdl.WSDLException: WSDLException: faultCode=PARSER_ERROR: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog
 at [row,col,system-id]: [1,0,"http://myservice?wsdl"]
        at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:256)
        at org.apache.cxf.wsdl11.WSDLManagerImpl.getDefinition(WSDLManagerImpl.java:205)
        at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:98)
        ... 14 more
Caused by: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog
 at [row,col,system-id]: [1,0,"http://myservice?wsdl"]
        at com.ctc.wstx.sr.StreamScanner.throwUnexpectedEOF(StreamScanner.java:677)
        at com.ctc.wstx.sr.BasicStreamReader.handleEOF(BasicStreamReader.java:2139)
        at com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java:2045)
        at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1134)
        at org.apache.cxf.staxutils.StaxUtils.readDocElements(StaxUtils.java:1248)
        at org.apache.cxf.staxutils.StaxUtils.readDocElements(StaxUtils.java:1142)
        at org.apache.cxf.staxutils.StaxUtils.read(StaxUtils.java:1069)
        at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:247)
        ... 16 more

誰か助けてくれませんか?

4

9 に答える 9

3

末尾の「/」を期待するエンドポイントに関連している可能性があることを読んだことを覚えています。これが有効かどうかはわかりませんが、試してみて、機能する場合はここに投稿してください。

于 2014-01-09T08:06:41.533 に答える
2

同様のエラーが発生し、サーバーのログを確認したところ、リクエストでサポートされていない http メソッドに遭遇した http サーバーに関連していました。このため、サーバーは SOAP クライアントが処理できない HTTP 応答を返すため、プロローグで予期しない EOF が返されます。

org.apache.tomcat.util.descriptor.web.SecurityConstraint.findUncoveredHttpMethods For security constraints with URL pattern [/services/*] only the HTTP methods [POST GET] are covered. All other methods are uncovered.

これにより、クライアント側で次のエラーが発生しました

 com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog

私の場合、セキュリティで保護されたサービスをセキュリティで保護されていないサービスにダウングレードしていて、web.xml に GET を制限している次の浮遊エントリがあり、セキュリティ制約で投稿し、要求で必要なセキュリティ パラメータを送信していなかった..

<security-constraint>
    <web-resource-collection>
      <web-resource-name>restricted web services</web-resource-name>
          <url-pattern>/services/*</url-pattern>
          <http-method>GET</http-method>
          <http-method>POST</http-method>
        </web-resource-collection>

このエラーを取り除くために、この制約を削除しました:-)

あなたの場合、それはセキュリティ上の制約に関係していないかもしれませんが、サーバーが生の http 応答を送信することに関連していることは確かです。

于 2014-01-15T10:37:17.927 に答える
1

同様のエラーが発生し、サーバー ログを確認したところ、HTTP サーバーが要求でサポートされていない HTTP メソッドに遭遇したことに関連していました。SOAP クライアントが処理できない HTTP 応答が返されました。Web サーバーのログを確認してください。

于 2014-01-15T10:29:29.453 に答える
1

確かに、これは文字や形式の問題によるものではありません。Woodstox (wstx) が XML に解析しようとして失敗したデータをサーバーが返さなかったため、このエラーが発生した可能性があります。

于 2016-05-18T09:11:43.260 に答える