问题解决:IWAB0014E Unexpected exception occurred.
在用JBoss Tools生成Web Service客户端时报这个错。
详细错误日志如下:
IWAB0014E Unexpected exception occurred.
java.lang.NullPointerException
at org.jboss.tools.ws.creation.core.utils.JBossWSCreationUtils.getJBossWSRuntimeLocation(JBossWSCreationUtils.java:290)
at org.jboss.tools.ws.creation.core.commands.InitialClientCommand.execute(InitialClientCommand.java:53)
at org.eclipse.wst.command.internal.env.core.fragment.CommandFragmentEngine.runCommand(CommandFragmentEngine.java:419)
at org.eclipse.wst.command.internal.env.core.fragment.CommandFragmentEngine.visitTop(CommandFragmentEngine.java:359)
at org.eclipse.wst.command.internal.env.core.fragment.CommandFragmentEngine.moveForwardToNextStop(CommandFragmentEngine.java:254)
at org.eclipse.wst.command.internal.env.ui.widgets.SimpleCommandEngineManager$6.run(SimpleCommandEngineManager.java:294)
at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:464)
at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:372)
at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:1008)
at org.eclipse.wst.command.internal.env.ui.widgets.SimpleCommandEngineManager.runForwardToNextStop(SimpleCommandEngineManager.java:264)
at org.eclipse.wst.command.internal.env.ui.widgets.WizardPageManager.runForwardToNextStop(WizardPageManager.java:91)
at org.eclipse.wst.command.internal.env.ui.widgets.WizardPageManager.getNextPage(WizardPageManager.java:154)
at org.eclipse.wst.command.internal.env.ui.widgets.SimpleWizardPage.getNextPage(SimpleWizardPage.java:136)
at org.eclipse.jface.wizard.WizardDialog.nextPressed(WizardDialog.java:887)
at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:426)
at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657)
at org.eclipse.jface.window.Window.runEventLoop(Window.java:825)
at org.eclipse.jface.window.Window.open(Window.java:801)
at org.eclipse.wst.command.internal.env.ui.widgets.popup.DynamicPopupWizard.run(DynamicPopupWizard.java:130)
at org.eclipse.ui.internal.PluginAction.runWithEvent(PluginAction.java:251)
at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501)
at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438)
at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
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.eclipse.equinox.launcher.Main.invokeFramework(Main.java:619)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:574)
at org.eclipse.equinox.launcher.Main.run(Main.java:1407)
at org.eclipse.equinox.launcher.Main.main(Main.java:1383)
看日志(getJBossWSRuntimeLocation),大概是找不到Runtime。依次检查JBossWS,Server Runtime。
一切都是好的,没有问题呀。
难道是JBoss Server本身出了问题?试试看,重新解压一个jboss-4.2.3.GA.zip,新建一个Server。再试,仍报同样的错误。
难道是Eclipse环境乱了?另开一个Eclipse,导入工程,一试还是报同样的错误。
百思不得其解中,明明早两天还好好的,咋就突然不行了。回想一下这两天都做了什么?写了很多代码,代码跟环境没有任何关系呀;新建或删除了Workspace的若干项目,但这是project级别的,跟JBossWSRuntime应该是井水不犯河水吧。。。
逆向追溯还是没找到答案,那换个角度想想当初我是怎么成功的?曾记否,New 一 WEB 工程。。。猛然想起,当时我是在web工程里做的操作,而现在我的项目是一个普通的 Maven 工程。即刻查看Build Path 属性。
我是以依赖的方式加进去的,也许JBoss 找不到,于是把Runtime加进Build Path。满怀期待的重试,再次失败。难道只支持纯粹的Web工程?Copy WSDL到一个Web工程,一跑,果然成功。那么为什么只支持Web工程呢?与一个同事交流后有如下意见:
JBoss Tools Webservice套件默认是需要去查找web.xml的。如果采用Top-Down的方式生成Server端,它默认以Servlet的方式发布。这时如果打开web.xml,你会发现会增加这么一段:
<servlet>
<display-name>xxxServicesImpl</display-name>
<servlet-name>xxxvicesImpl</servlet-name>
<servlet-class>xxx</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>xxxImpl</servlet-name>
<url-pattern>/xxxImpl</url-pattern>
</servlet-mapping>
希望以后的版本会增加一些选项,可以自己灵活控制发布方式,不受web工程的限制。
转载于:https://blog.51cto.com/lovespss/594731