类javax.xml.ws.Service中的构造函数服务不能应用于给定类型

类javax.xml.ws.Service中的构造函数服务不能应用于给定类型,service,jax-ws,Service,Jax Ws,我已经用apache-cxf-2.7.4创建了一个web服务。 我参加了在我的项目中制作的课程。 我在项目中拥有的库包括: math3-commons-3.2.jar XStream-1.4.4.jar jaxws-api-2.2.5.jar 我有以下错误: constructor Service in class javax.xml.ws.Service cannot be applied to given types; required: java.net.URL,javax.x

我已经用apache-cxf-2.7.4创建了一个web服务。 我参加了在我的项目中制作的课程。 我在项目中拥有的库包括:

  • math3-commons-3.2.jar
  • XStream-1.4.4.jar
  • jaxws-api-2.2.5.jar
我有以下错误:

  constructor Service in class javax.xml.ws.Service cannot be applied to given types;
  required: java.net.URL,javax.xml.namespace.QName
  found: java.net.URL,javax.xml.namespace.QName,javax.xml.ws.WebServiceFeature[]
  reason: actual and formal argument lists differ in length

问题在于JAX-WSAPI的版本。应用程序的类加载器首先加载JavaSE或JavaEE中包含的版本

对于JavaSE6或JavaEE5,JAX-WSAPI2.1。施工人员:

对于JavaSE7或JavaEE6,JAX-WSAPI2.2。施工人员:

有三种可能的解决方案(取决于它是web应用程序还是独立应用程序):

  • 使用JavaSE7或JavaEE6

  • 使用参数
    -frontend jaxws21
    重新运行
    wsdl2java
    ,以生成符合JAX-WS 2.1的代码

  • 更改类加载器,以便首先加载应用程序中包含的类


  • 如果使用Maven构建,则应将其添加到执行配置中

    <defaultOptions>
        <extraargs>
            <extraarg>-frontend</extraarg>
            <extraarg>jaxws21</extraarg>
        </extraargs>
    </defaultOptions>
    
    
    -前端
    jaxws21
    

    (感谢Paul Vargas为我指出了正确的方向)。

    wsimport-help告诉我们关于-target选项的信息。它说: 根据给定的JAXWS规范版本生成代码。默认值为2.2,可接受的值为2.0、2.1和2.2

    如果您使用的是JDKWSImport工具,那么只需添加如下所示的-target参数

    wsimport-keep-d\myDirToStoreExtractedClientCode-target 2.1\myWSDLlocation\mineNotYours.wsdl

    (感谢Paul Vargas的帮助,这是一篇老文章,但仍然很有帮助。)

    javax.xml.ws.Service.Service(URL, QName)
    javax.xml.ws.Service.Service(URL, QName, WebServiceFeature...)  // You need this!
    
    <defaultOptions>
        <extraargs>
            <extraarg>-frontend</extraarg>
            <extraarg>jaxws21</extraarg>
        </extraargs>
    </defaultOptions>