使用Apache CXF的JAXWS Web服务 - 名称""对于JDOM/XML名称空间不合法:名称空间URI必须是非null且非空字符串

1 java web-services

我正在使用Apache CXF(2.7.14)使用Code First方法和注释开发JAXWS Webservice.我用JAXWS注释注释了SEI,SEI实现类,用JAXB注释注释了域对象.每当尝试使用eclipse生成WSDL时,我都会收到以下错误:

IWAB0014E Unexpected exception occurred.
  The name "" is not legal for JDOM/XML namespaces: Namespace URIs must be non-null and non-empty Strings.
      org.jdom.IllegalNameException: The name "" is not legal for JDOM/XML namespaces: Namespace URIs must be non-null and non-empty Strings.
      at org.jdom.Namespace.getNamespace(Namespace.java:162)
      at org.eclipse.jst.ws.internal.cxf.core.utils.SpringUtils.createJAXWSEndpoint(SpringUtils.java:414)
      at org.eclipse.jst.ws.internal.cxf.creation.core.commands.Java2WSCommand.execute(Java2WSCommand.java:103)
      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:212)
      at org.eclipse.wst.command.internal.env.ui.widgets.SimpleCommandEngineManager$6.run(SimpleCommandEngineManager.java:294)
      at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:466)
      at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:374)
      at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:1059)
      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:935)
      at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:434)
      at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:619)
      at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:248)
      at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
      at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4353)
      at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1061)
      at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4172)
      at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3761)
      at org.eclipse.jface.window.Window.runEventLoop(Window.java:832)
      at org.eclipse.jface.window.Window.open(Window.java:808)
      at org.eclipse.wst.command.internal.env.ui.widgets.popup.DynamicPopupWizard.run(DynamicPopupWizard.java:130)
      at org.eclipse.ui.internal.PluginAction.runWithEvent(PluginAction.java:253)
      at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:595)
      at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:511)
      at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:420)
      at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
      at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4353)
      at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1061)
      at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4172)
      at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3761)
      at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1151)
      at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
      at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1032)
      at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:148)
      at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:636)
      at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
      at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:579)
      at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
      at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:135)
      at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
      at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
      at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
      at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380)
      at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
      at java.lang.reflect.Method.invoke(Unknown Source)
      at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:648)
      at org.eclipse.equinox.launcher.Main.basicRun(Main.java:603)
      at org.eclipse.equinox.launcher.Main.run(Main.java:1465)
Run Code Online (Sandbox Code Playgroud)

员工服务类是:

@WebService
@SOAPBinding(style = Style.DOCUMENT, use = Use.LITERAL, parameterStyle = ParameterStyle.WRAPPED)
@WebFault(name = "exception", faultBean = "java.lang.Exception")
public interface EmployeeService
{
    @WebMethod(exclude = false)
    @RequestWrapper(className = "home.cxfwebservicesdemo.employeeservice.domain.Employee")
    @Oneway
    public void addEmployee(@WebParam(name = "employee", mode = Mode.IN) Employee employee) throws Exception;

    @WebMethod(exclude = false)
    @RequestWrapper(className = "home.cxfwebservicesdemo.employeeservice.domain.Employee")
    @Oneway
    public void updateEmployee(@WebParam(name = "employee", mode = Mode.IN) Employee employee) throws Exception;

    @WebMethod(exclude = false)
    @Oneway
    public void deleteEmployee(@WebParam(name = "employeeId", mode = Mode.IN) long employeeId) throws Exception;

    @WebMethod(exclude = false)
    @ResponseWrapper(className = "home.cxfwebservicesdemo.employeeservice.domain.Employee")
    @WebResult(name = "employee")
    public Employee getEmployeeById(@WebParam(name = "employeeId", mode = Mode.IN) long employeeId) throws Exception;

    /*
     * @WebMethod(exclude = false)
     * @ResponseWrapper(className = "java.util.ArrayList")
     * @WebResult(name = "employeeList") public List<Employee> getAllEmployees() throws Exception;
     */
}
Run Code Online (Sandbox Code Playgroud)

我没有广泛地从事过Web服务.

如果您需要更多详细信息,请与我们联系.

有人可以帮我找到上述问题的解决方案吗?

谢谢!

Ben*_*opa 8

在使用CXF Web服务时,我在使用向导生成Web Service时遇到了类似的错误.为解决此问题,我将namespace属性值添加到@WebService注释中

@WebService(targetNamespace="http://www.benjmaz.com")
public class MyWebService{
   @Resource
   private WebServiceContext context;
}
Run Code Online (Sandbox Code Playgroud)

提供您选择的其他名称(尤其是您公司的域名)作为targetnamespace