2012-03-19 11 views
3

Webサービスを実行するために使用するTomcat 7.0 Webサーバーがあります。 WebサービスフレームワークはCXF 2.5.2です。Webserverは形式の正しくないサービスを生成します.wsdl

Eclipse Web Service ExplorerからWebサービスをテストすると、すべてが想定通りに動作します。 (Eclipseを使用して)WSDLからJavaクライアントを生成し、それを実行するときにサービスの実装からsuper(wsdlLocation, serviceName)を呼び出すときしかし、私は次のエラーを取得する:

Exception in thread "main" javax.xml.ws.WebServiceException: org.apache.cxf.service.factory.ServiceConstructionException: Failed to create service. 
at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:150) 
at org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:91) 
at javax.xml.ws.Service.<init>(Service.java:77) 
at test.Test_Service.<init>(Test_Service.java:43) 
at test.Test_TestSOAP_Client.main(Test_TestSOAP_Client.java:47) 

Caused by: org.apache.cxf.service.factory.ServiceConstructionException: Failed to create service. 
at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:94) 
at org.apache.cxf.jaxws.ServiceImpl.initializePorts(ServiceImpl.java:204) 
at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:148) 
... 4 more 

Caused by: javax.wsdl.WSDLException: WSDLException: faultCode=PARSER_ERROR: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character 'c' (code 99) in start tag Expected a quote at [row,col,system-id]: [1,208,"http://www.example.com:8081/TestWS/services?wsdl"] 
at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:240) 
at org.apache.cxf.wsdl11.WSDLManagerImpl.getDefinition(WSDLManagerImpl.java:191) 
at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:92) 
... 6 more 

Caused by: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character 'c' (code 99) in start tag Expected a quote at [row,col,system-id]: [1,208,"http://www.example.com:8081/TestWS/services?wsdl"] 
at com.ctc.wstx.sr.StreamScanner.throwUnexpectedChar(StreamScanner.java:639) 
at com.ctc.wstx.sr.BasicStreamReader.handleNsAttrs(BasicStreamReader.java:3005) 
at com.ctc.wstx.sr.BasicStreamReader.handleStartElem(BasicStreamReader.java:2926) 
at com.ctc.wstx.sr.BasicStreamReader.nextFromTree(BasicStreamReader.java:2802) 
at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1050) 
at org.apache.cxf.staxutils.StaxUtils.readDocElements(StaxUtils.java:1080) 
at org.apache.cxf.staxutils.StaxUtils.readDocElements(StaxUtils.java:974) 
at org.apache.cxf.staxutils.StaxUtils.read(StaxUtils.java:901) 
at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:231) 
... 8 more 

興味深い部分はUnexpected character 'c' (code 99) in start tag Expected a quote at [row,col,system-id]: [1,208,"http://www.example.com:8081/TestWS/services?wsdl"]メッセージでなければなりません。生成されたservices.wsdlを検査するとき、私はこの問題は、メタ一部であることが見出さ:

<meta http-equiv=content-type content="text/html; charset=UTF-8"> 

content-typeは、通常は引用符にラップする必要があります。これは、使用されているフレームワーク/サーバーのいずれかの既知のバグですか?これを回避するには何ができますか?そして、なぜEclipse Web Services Explorerを使用しても問題はありませんか?それはフォールトトレラントです(私のFirefoxは、生成されたwsdlのグラフィカルな表現を表示するのに何の問題もないようです)。

答えて

1

問題が見つかりました。誤ってhttp://www.example.com:8081/TestWS/services/MyTestWSの代わりにhttp://www.example.com:8081/TestWS/servicesというWSDLエンドポイントを指定しました。したがって、自動的に生成されたクライアントは、実際のWSDLを返すhttp://www.example.com:8081/TestWS/services/MyTestWS?wsdlではなく、HTMLページを返すhttp://www.example.com:8081/TestWS/services?wsdlからWSDLをフェッチしようとしました。

1

これは、CXFサービスのリスト生成の問題/バグのようです。 (ライン52付近)org.apache.cxf.transport.servlet.servicelist.FormattedServiceListWriterソースに:

writer.write("<meta http-equiv=content-type content=\"text/html; charset=UTF-8\">"); 

すなわちhttp-equiv値は引用符で囲まれていないです。あなたが推測したように、より「フォールトトレラント」なので、他のツールには問題ありません。

com.ctc.wstx.*のクラスは、このように見えますが、検証が行われていてエラーがスローされている場所がわかりません。あなたがコントロールできるものであれば、(一時的な)回避策は、サービス一覧ページ上でHTMLTidyを実行することでしょうか?

CXFのメールリストに言及するか、バグを報告する価値がありますか?

+0

これをCXFメーリングリストに転送しました。ここに更新が掲載されます。 'com.ctc.wstx'はWoodstock XMLプロセッサーのようです。私がコントロールできるものは何もない... – ubuntudroid

+0

問題が見つかりました。私の答えを見てください。 – ubuntudroid

3

サービスリストページは、サービスをリストし、それらのサービス(または残りのサービスベースのWADLドキュメント)の適切なWSDLドキュメントへのリンクを提供するHTMLページです。これはWSDLドキュメントではありません。 WSDLとして解析することはできません。

+0

さて、私たちが話すファイルはWSDLを返すべきである 'http://www.example.com:8081/TestWS/services?wsdl'からフェッチされますね。 – ubuntudroid

+0

問題が見つかりました。私の答えをご覧ください。 – ubuntudroid

0

私はかつて同じ例外を持っていたし、それは、エラーが開始タグでorg.jboss.deployment.DeploymentException: Unexpected character 'c' (code 99) 以下のようないくつかのことが期待されていたdestination-name=closeTaskService

修正はdestination-name="closeTaskService"だった私はdoule引用符が欠落していた一つの場所..例で、設定ファイルであるためでした見積もり

関連する問題