私は 1 年ほど Eclipse を使用していますが、通常はソフトウェアのデバッグに問題はありません。しかし、私を困惑させる状況に遭遇しました。
私が実行しているテスト ケースは、次のスタック トレースで失敗しています。
com.sun.xml.internal.ws.protocol.soap.MessageCreationException: Couldn't create SOAP message due to exception: Unable to create StAX reader or writer
at com.sun.xml.internal.ws.encoding.SOAPBindingCodec.decode(SOAPBindingCodec.java:283)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:180)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:83)
at com.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:105)
at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:587)
at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:546)
at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:531)
at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:428)
at com.sun.xml.internal.ws.client.Stub.process(Stub.java:211)
at com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(SEIStub.java:124)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:98)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:107)
at $Proxy34.getCommission(Unknown Source)
at uk.co.bglgroup.servicehub.external.lifehub.v1_0.fitnesse.ws.LifeHubWebServiceLifeHubWebServicePortClient.doCallGetCommission(LifeHubWebServiceLifeHubWebServicePortClient.java:51)
at uk.co.bglgroup.servicehub.external.lifehub.v1_0.fitnesse.service.GetCommissionService.getCommissionService(GetCommissionService.java:40)
at uk.co.bglgroup.servicehub.external.lifehub.v1_0.fitnesse.endToEnd.SkeletalEndToEndTest.run(SkeletalEndToEndTest.java:82)
at uk.co.bglgroup.servicehub.external.lifehub.v1_0.fitnesse.endToEnd.SkeletalEndToEndTest.skeletalTestQA(SkeletalEndToEndTest.java:66)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: com.sun.xml.internal.ws.streaming.XMLReaderException: Unable to create StAX reader or writer
at com.sun.xml.internal.ws.api.streaming.XMLStreamReaderFactory$Default.doCreate(XMLStreamReaderFactory.java:358)
at com.sun.xml.internal.ws.api.streaming.XMLStreamReaderFactory.create(XMLStreamReaderFactory.java:139)
at com.sun.xml.internal.ws.api.streaming.XMLStreamReaderFactory.create(XMLStreamReaderFactory.java:143)
at com.sun.xml.internal.ws.encoding.StreamSOAPCodec.decode(StreamSOAPCodec.java:290)
at com.sun.xml.internal.ws.encoding.StreamSOAPCodec.decode(StreamSOAPCodec.java:118)
at com.sun.xml.internal.ws.encoding.SOAPBindingCodec.decode(SOAPBindingCodec.java:278)
... 39 more
Caused by: javax.xml.stream.XMLStreamException: java.net.MalformedURLException
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.setInputSource(XMLStreamReaderImpl.java:219)
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.<init>(XMLStreamReaderImpl.java:191)
at com.sun.xml.internal.stream.XMLInputFactoryImpl.getXMLStreamReaderImpl(XMLInputFactoryImpl.java:279)
at com.sun.xml.internal.stream.XMLInputFactoryImpl.createXMLStreamReader(XMLInputFactoryImpl.java:151)
at com.sun.xml.internal.ws.api.streaming.XMLStreamReaderFactory$Default.doCreate(XMLStreamReaderFactory.java:356)
... 44 more
Caused by: java.net.MalformedURLException
at java.net.URL.<init>(URL.java:601)
at java.net.URL.<init>(URL.java:464)
at java.net.URL.<init>(URL.java:413)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:650)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1315)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startDocumentEntity(XMLEntityManager.java:1267)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.setInputSource(XMLDocumentScannerImpl.java:281)
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.setInputSource(XMLStreamReaderImpl.java:206)
... 48 more
さて、問題をデバッグしたいと思います。SEIStub.class というオブジェクトに到達するまで、作成したコードをステップ ダウンできます。このオブジェクトについて、Eclipse は「ソースの添付ファイルにはファイルのソースが含まれていませんSEIStub.class"
[添付ソースの変更] を選択すると、正しい JDK バージョン内の src.zip の場所を正しく識別するボックスがポップアップ表示されます。そこで変更するものは何もありません...
手動で src.zip に移動しましたが、実際には com.sun.internal フォルダーはありません。
紛らわしい点の 1 つは、開発環境でテストを実行すると、すべてが機能することです。QA 環境でテストを実行すると、上記のスタック トレースが表示されます。
最も紛らわしいのは、com.sun.org.apache.xerces.internal.impl.XMLEntityManager にブレーク ポイントを設定でき、SEIStub オブジェクトを通過した後にそのブレーク ポイントに到達できるにもかかわらず、それができないことです。そのプログラム内の変数のいずれかを表示するには、Eclipse の [変数] タブを調べても有効な変数として表示されません。
JDK 1.6.0_25 を使用しています
うーん...非常に混乱していて、引っ張る髪がなくなっています!
このクラスでデバッグを操作するのを手伝ってくれる人はいますか?
どうもありがとう、マーク
更新: http://openjdk.java.net/projects/jdk6/もダウンロードしようとしましたが、このソースのセットにも com.sun.internal オブジェクトがすべて欠けているようです。
更新: 私は Eclipse Helios を使用しており、同僚が Juno を使用して同じ問題を繰り返しています。