5

我用 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
4

3 回答 3

11

问题是 JAX-WS API 的版本。应用程序的类加载器首先加载 Java SE 或 Java EE 中包含的版本。

对于 Java SE 6 或 Java EE 5,JAX-WS API 2.1。中的构造函数javax.xml.ws.Service

javax.xml.ws.Service.Service(URL, QName)

对于 Java SE 7 或 Java EE 6,JAX-WS API 2.2。中的构造函数javax.xml.ws.Service

javax.xml.ws.Service.Service(URL, QName)
javax.xml.ws.Service.Service(URL, QName, WebServiceFeature...)  // You need this!

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

  1. 使用 Java SE 7 或 Java EE 6。

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

  3. 更改类加载器以首先加载应用程序中包含的类。

于 2013-05-29T16:13:53.327 回答
2

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

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

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

于 2013-07-15T10:05:32.607 回答
1

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

如果您使用的是 jdk wsimport 工具,则只需添加 -target 参数,如下所示。

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

(感谢 Paul Vargas 的帮助,旧帖子但仍然有帮助。)

于 2018-08-23T15:56:19.950 回答