【问题标题】:Generate webservice stub from wsdl in Java在 Java 中从 wsdl 生成 web 服务存根
【发布时间】:2011-03-09 07:59:14
【问题描述】:

我正在开发带有向导的 Eclipse 插件。当鼠标右键单击 Java 编辑器时,该向导将在上下文菜单中以示例形式提供。

向导将负责收集以下信息:

  • WSDL 文件的位置
  • 包名

向导完成后,我希望将 WSDL 中描述的 Web 服务的存根生成到前面提供的包中。

问题是:如何从源代码(而不是命令行)动态生成 webservice 存根并将其添加到当前项目中?

到目前为止,我遇到了 WSDL2Java (Axis)、Apache CXF 和 wsimport。我尝试使用 Apache CXF 和 wsimport,但我总是得到 ClassNotFoundException,即使所有 jar 都包含在 buildpath 中。我想我可能用错了。

请帮助我的人!该任务的时间不多了:-(

小例子:

假设代码是(Apache CXF):

String[] args = {"-client", "-d", "D:\\test", "D:\test.wsdl" };
WSDLToJava w = 新的 WSDLToJava(args);
ToolContext t = new ToolContext();
w.run(t);

异常的前几行是:

java.lang.NoClassDefFoundError: org/apache/cxf/tools/wsdlto/WSDLToJava 在 plugin.wsreplication.ui.wizard.component.AddComponentWizard.performFinish(AddComponentWizard.java:160) 在 org.eclipse.jface.wizard.WizardDialog.finishPressed(WizardDialog.java:752) 在 plugin.wsreplication.ui.wizard.component.AddComponentWizardDialog.finishPressed(AddComponentWizardDialog.java:39) 在 org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:373) 在 org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624) 在 org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:228) 在 org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) 在 org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1003) 在 org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3910) 在 org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3503) 在 org.eclipse.jface.window.Window.runEventLoop(Window.java:825) 在 org.eclipse.jface.window.Window.open(Window.java:801) 在 plugin.wsreplication.ui.action.AddComponentAction.run(AddComponentAction.java:35) 在 org.eclipse.ui.internal.PluginAction.runWithEvent(PluginAction.java:251)

【问题讨论】:

  • “即使所有 jar 都包含在 buildpath 中,我也总是遇到 ClassNotFoundException。我想我可能没有正确使用它们。”您可以发布确切的例外情况、您使用它们所采取的步骤等吗?
  • 我记得,wsimport 需要安装 Java SDK,而不仅仅是 JRE。
  • 当你运行它时,buildpath 是否暗示它们在类路径上?构建后运行程序时仍需要指定类路径。
  • 详述:根据我描述的上下文应该怎么做?请详细说明,哪些文件应该包含在构建路径中才能正确?

标签: java eclipse-plugin web-services dynamic stub


【解决方案1】:

我有同样的问题。在堆栈溢出中偶然发现了这个问题。重启eclipse后问题就解决了。

问题是由于 Eclipse 中未设置 Apache CXF jar。一旦在 Eclipse 中设置了 CXF 的主路径。需要重新启动 Eclipse 以获取 jars。希望这对面临相同问题的人有所帮助

【讨论】:

    【解决方案2】:

    您在为插件设置环境时似乎出错了。详情请查看this 列表。 如果错误不会消失,请尝试使用System.getProperty("java.class.path") 找出实际的类路径。如果 jar 确实在类路径上,则问题可能出在 Eclipse 本身。

    【讨论】:

      【解决方案3】:

      听起来 cxf-tools 不在你的类路径中。

      我不确定它如何与 Eclipse 插件和 OSGi 一起工作,以及如何为您的插件指定类路径,但您需要能够指定 CXF JAR 在类路径中的位置。

      【讨论】:

      • 我认为问题可能出在运行时的类路径中。在开发插件时,我设置了所有环境并且它可以工作。当我在 Eclipse 中安装插件(不同的,假设使用默认设置)时,cxf 不存在。可能吗?我应该向插件添加一些依赖项吗?
      • 搞定了。工具位于开发环境的类路径中,而在运行时不包含该包。解决方案是将工具添加到运行时环境的类路径
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-16
      • 2013-01-02
      • 2015-09-09
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多