[解決済み] Java Web サービス エラー: com.ctc.wstx.exc.WstxEOFException: プロローグで予期しないEOF
2022-02-16 08:26:33
質問
実行中のWebサービスにJavaクライアントを作成し、接続するのに問題があります。
私は以下のコードを使用しています。
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の場所とサービスクラス名はこの投稿のためだけに変更しました。コード内ではオリジナルのものを使用しています)。
しかし、new Service()コマンドでサービスを作成し、appserver上に展開されたWebサービスを呼び出すと、例外が発生します。 しかし SOAP UIでwsdlの場所をテストしたところ、完全に動作しました。 また、私はソープUIを使用してモックサービスを作成し、私のJavaクライアントはそれに接続し、それを呼び出し、結果を得ることができました。 問題は、アプリケーション・サーバー上で動作しているウェブ・サービスを呼び出したい場合に発生します。
スタックトレース
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
どなたか助けてください。
どのように解決するのですか?
このエラーに遭遇し、WSDLを直接使用するのではなく、HTTP 302リダイレクトを返すURLを使用したことが原因のようだとわかりました。
私が使用していたURLは、以下のような形式でした。
/Service?wsdl
という形式の URL にリダイレクトされます。
/Service/wsdl/Service.wsdl
. リダイレクト先のURLを直接使用したら、すべてがうまくいきました。
関連
-
[解決済み】エラー「No enclosing instance of type Foo is accessible」の原因と修正方法について教えてください。
-
[解決済み】「'void' type not allowed here」エラーの原因とは?
-
[解決済み】"|="の意味は何ですか?(パイプ等号演算子)
-
[解決済み] 二項演算子「&」のオペランド型がおかしい java
-
[解決済み】Eclipseがエラーメッセージ "Java was started but returned exit code = 1" を返す
-
[解決済み】文字列中の � を置換する方法
-
[解決済み】java.io.IOException: 壊れたパイプ
-
[解決済み】Eclipseで「JUnitテストが見つかりませんでした。
-
[解決済み】Eclipseで「パッケージエクスプローラー」ビューが見つからない
-
[解決済み] ActionScript 3 で SOAP ウェブサービスに "Null" (本当の苗字!) を渡す方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Javaの".class期待値"
-
[解決済み】不正な反射的アクセスとは?
-
[解決済み】スレッド「main」での例外 java.lang.StringIndexOutOfBoundsException: 文字列のインデックスが範囲外です。0 [閉店]
-
[解決済み】"|="の意味は何ですか?(パイプ等号演算子)
-
[解決済み】Java JDK - doubleからintへの非可逆変換の可能性
-
[解決済み] hibernate のプロパティが見つかりません。
-
[解決済み】Eclipseがエラーメッセージ "Java was started but returned exit code = 1" を返す
-
[解決済み】破損したjarファイル
-
[解決済み】koch snowflake java recursion
-
[解決済み】Eclipseで「パッケージエクスプローラー」ビューが見つからない